2014-11-07 7 views
-2

Я хотел бы запускать каждые 6 часов из cron, скрипта PHP (или что-то еще), который обновлял бы таблицу MySQL из файла csv, присутствующего на FTP-сервере.Как импортировать данные CSV из каталога FTP-сервера в Mysql?

Что такое CSV Import/Export, очень интересно, но я бы хотел, чтобы он выбирал CSV-файл из каталога, а не вручную загружал его, потому что имя файла изменится: logdata_*******.csv).

Кто-нибудь сделал такое? Легко ли это возможно? Любая помощь будет оценена по достоинству. Благодаря

+0

1) Получить файл (file_get_content против Curl) 2) LOAD DATA INFILE – dayuloli

+0

Можете ли вы предоставить мне фрагмент кода для таких же? Я очень новичок в этом, и я очень много манипулировал этим. – Joe

+0

Я бы не прочь дать вам фрагмент, если бы у меня было что-то доступное, но у меня нет времени писать для вас фрагмент. Тем не менее, я могу гарантировать, что с вашими собственными усилиями вы сможете научить себя, как писать то, что вы описали. Я знаю это, потому что я был на твоем месте. Google, которые я предложил в своем предыдущем комментарии, и вы поймете, как его написать. – dayuloli

ответ

1

Вот PHP скрипт, который поможет вам, вам необходимо изменить его для своих нужд, я поместил некоторые пояснения в него:

Если вы хотите сделать это с помощью FTP, вам также потребуется установить ftp-соединение.

$db_connection = new mysqli("HOST","DB_USER","DB_PASS","DB"); // make mysqli connection to DB 

$query = $db_connection->prepare("INSERT INTO yourtable (column1,column2) VALUES (?,?)"); 

$data = scandir('/PATH/TO/READ'); // Scan the dir your files are in 

foreach ($data as $datas) { 

if (0 === strpos($datas, 'logdata')) { 

    echo $datas."<br />"; //Show all the files that beginn with logdata 

$file = 'PATH/TO/FILE/'.$datas; 
unset($file[0]); //DELETE THE FIRST LINE IF FILE CONTAINS A HEADLINE ELSE DELETE THIS LINE 
foreach ($file as $line) 
{ 
    $column = explode("\t", $line); // \t stands for tab-delimited, change it to what ever delimites your file (f.e. ; , .) 

$example = $column[0]; // get content of first column 
$example1 = $column[1]; // get content of second column 
// .....   
$query->bind_param('ss',$example, $example1) 
$query->execute(); 


}}} 

Давайте назовем файл insertscript.php, то ваш cronjob будет:

0 */6 * * * nohup php /path/to/file/insertscript.php 

поЬир поместить это proccess в фоновом режиме и создает файл для каждого запуска. Если вы не хотите этого файла, вы можете изменить ваш cronjob к:

0 */6 * * * nohup php /path/to/file/insertscript.php >/dev/null 2>&1 
Смежные вопросы