Загрузите удаленный файл (2 ГБ) с помощью PHP - PullRequest
3 голосов
/ 14 января 2012

У меня есть большой файл (2 ГБ), и я хочу загрузить его на сервер A с сервера B с помощью PHP.

Я пробовал FTP и CURL с PHP, но безуспешно. он возвращает ошибку ЗАПРОС ВРЕМЕНИ, даже если я установил set_time_limit () со значением 0.

Вот мой код:

<?php

set_time_limit(0)

$local_file = 'file.zip';
$server_file = '/www/file.zip';

$conn_id = ftp_connect("ftp.webmashing.com");

$login_result = ftp_login($conn_id, "USERNAME", "PASSWORD");

if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
echo "Successfully written to $local_file\n";
} else {
echo "There was a problem\n";
}

ftp_close($conn_id);

?>

Ответы [ 3 ]

0 голосов
/ 14 января 2012

При вызове set_time_limit () перезапускает счетчик тайм-аута с нуля. Другими словами, если время ожидания по умолчанию составляет 30 секунд и 25 секунд для выполнения сценария выполняется вызов, такой как set_time_limit (20), сценарий будет работать в общей сложности 45 секунд до истечения времени ожидания. Пожалуйста, проверьте директиву max_execution_time в php.ini

0 голосов
/ 14 января 2012

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

Теперь, что бы я сделал вместо этого (все же, если у вас есть права),это сделать в командной строке, вызываемой из файлов php.Командная строка записывает результаты в конкретный файл, и все, что вам нужно сделать, это проверить содержимое этого файла.

Как только результат записан (скажите «0» для успеха, как всегда в linux), вы можете делать то, что вы хотите.

На внешнем интерфейсе немного ajax, чтобы получить состояние загрузки тоже может быть полезным!

Но, как всегда, это зависит от того, можете ли вызапустить команды оболочки.

0 голосов
/ 14 января 2012

Если у вас есть тайм-ауты для загрузки файла, вы можете взглянуть на ftp_pasv()

bool ftp_pasv ( resource $ftp_stream , bool $pasv )

В вашем случае попробуйте это:

$conn_id = ftp_connect("ftp.webmashing.com");

$login_result = ftp_login($conn_id, "USERNAME", "PASSWORD");

ftp_pasv($conn_id, true);
...