PHP FTP Загрузить тысячи файлов - PullRequest
3 голосов
/ 07 апреля 2010

Я написал небольшой класс FTP, который я использовал для перемещения файлов с локального сервера на удаленный сервер. Это делается путем проверки массива локальных файлов с массивом файлов на удаленном сервере. Если файл существует на удаленном сервере, он не будет загружать его.

Сценарий отлично работает для небольшого количества файлов, но я заметил, что локальный сервер может иметь до 3000+ файлов изображений для передачи, это, кажется, приводит к тому, что сценарий проваливается и передает только 100 или около того.

Как я могу изменить скрипт для обработки потенциально тысяч файлов передачи изображений?

Ответы [ 4 ]

3 голосов
/ 07 апреля 2010

Чаще запускайте cron и ограничивайте сценарий загрузкой 80 изображений за цикл.

0 голосов
/ 08 апреля 2010

Вы можете заархивировать сначала в php http://www.php.net/manual/en/book.zip.php

Затем загрузите один большой ZIP-файл. Общий размер файла вряд ли изменится, но я обнаружил, что при передаче большого количества файлов через WAN он все равно быстрее.

-Будет

0 голосов
/ 08 апреля 2010

Если проблема связана с тайм-аутом php или браузера, вы можете создать файл (пример ниже) и сохранить его или позвонить из браузера.

<?
echo "Running cli syncfiles.php";
system("&php syncfiles.php"); // & pushes file to background processing on linux 
?>

Если у вас возникла проблема из-за того, что ftp ограничивает ваши соединения или ограничивает ваши одновременные загрузки / выгрузки в течение x промежутка времени, то вы, вероятно, можете добавить некоторые таймеры в код.

<?
$counter=0;
for($i=0;$i<$numftpfiles;$i++)
{
   syncfile($i); // this represents your sync code
   usleep(250000); // sleep for 1/4 second
   $count++;
   if($count>50)
   {
     usleep(30000000); // sleep for 30 seconds
     $count=0;
   }
}
?>
0 голосов
/ 07 апреля 2010

Может случиться так, что вам потребуется слишком много времени для выполнения скрипта (это не относится к php командной строки), если это произойдет, ваш скрипт будет остановлен веб-сервером.Вы можете изменить настройки php, чтобы исправить это, но это не будет хорошо масштабироваться (потому что ваш браузер в конечном итоге тоже будет зависать).Возможно, запуск скрипта из командной строки (называемый cli php) будет работать.

Мне кажется, что вы реализуете то, что уже существует.Вы должны взглянуть на rsync (для Linux), если у вас есть контроль над обоими серверами.

...