У меня есть php-скрипт, который читает удаленный CSV-файл и добавляет продукты в базу данных на основе содержимого CSV-файла.В настоящее время существует около 2800 строк (продуктов), но скрипт останавливается на строке 1388.
Я использовал следующий код:
while(($data = fgetcsv($fopen, 0, ",")) !== false):
//stuff is done here...
endwhile;
Я установил предел памяти php равным64М и даже попробовал 128М.Я также установил max_execution_time на 60 минут.Я также попытался изменить код следующим образом:
while(($data = fgetcsv($fopen, 1000, ",", '\r')) !== false):
//stuff is done here...
endwhile;
Это привело к тому, что больше строк было проанализировано, НО тогда данные были неправильными, то есть столбцы изображения становились столбцами описания и т. Д. Я предполагаю, что это должно сделатьс добавлением \ r в качестве окончания моей строки.Я пытался \ n, не повезло.Наконец, я также добавил auto_detect_line_endings как true в ini.
Кто-нибудь может подсказать причины, по которым мои данные обрезаются?
С уважением, Саймон
РЕДАКТИРОВАТЬ
Я заметил кое-что интересное.У меня есть вставка MySQL в каждой строке, которая зацикливается в приведенном выше коде.Теперь, последняя запись в моей базе данных - это ПЕРВАЯ строка в CSV-файле. Означает ли это, что файл анализируется с последней строки вверх?
W-3066, I Love Love Cheap And Chic, Moschino, 3.4 oz,EDT Spray,Women,,"Introduced by the design house of Moschino, I love love has a blend of grapefruit, orange, lemon, red currant, tea rose, cinnamon leaves, musk, cedar and tonka wood. It is recommended for daytime wear.",http://www.perfume-worldwide.com/products/Women/Final/W-3066large.jpg,0,0,0,8011003991457
W-3070, Adidas Floral Dream, Adidas, 1.7 oz,EDT Spray,Women,,"Introduced in 2008, the notes are bergamot, lily, rose, tonka bean and vanilla.",http://www.perfume-worldwide.com/products/Women/Final/W-3070large.jpg,0,0,0,3412244310024
W-3071, Adidas Fruity Rhythm, Adidas, 1.7 oz,EDT Spray,Women,,"Introduced in 2008, the notes are black currant, raspberry, cyclamen, freesia and musk.",http://www.perfume-worldwide.com/products/Women/Final/W-3071large.jpg,0,0,0,3412244510004
РЕШЕНИЕ
Как оказалось, мне гораздо лучше скопировать файл на сервер и отработатькопия.Я следовал следующим шагам:
- Я прочитал содержимое удаленного файла, используя
file_get_contents()
- Я затем использовал функцию
iconv(
) для перекодирования данных в UTF-8 - Я сделал временный файл, используя функции
fopen()
, fwrite()
и fclose()
, содержимое файла было закодированными данными выше - Я установил права доступа к файлу на0750 с использованием функции
chmod()
- Затем я применил функцию
fgetcsv()
к моему временному файлу - Сделал все, что нужно было сделать
- Удалил временный файл после завершения, используя
unlink()
функцию
Это добилось цели.Итак, я подозреваю, что половина проблемы была связана с тайм-аутом удаленного сервера, а другая половина - с кодировкой.
Спасибо всем за все подталкивания в правильном направлении