время выполнения php и ограничение памяти - PullRequest
1 голос
/ 13 октября 2011

Я использую сервер CentOS 5. Я получил ошибку, когда пытался загрузить 1 ГБ файла с сервера на мой сервер, который

maximum execution time exceeded.

я открыл свой файл php.ini, там было написано

max_execution_time = 30     ; Maximum execution time of each script, in seconds
max_input_time = 60     ; Maximum amount of time each script may spend parsing request data
memory_limit = 128M      ; Maximum amount of memory a script may consume

в последней строке написано Maximum amount of memory a script may consume так что это означает на самом деле? он не будет загружать больше, чем это для выполнения скрипта или его памяти, занятой скриптом для выполнения (типы совместного использования) Я искал, но не получил ответ на этот вопрос. Пожалуйста, если кто-нибудь скажет мне, что это значит и как я могу загрузить приблизительно 1 ГБ данных через скрипт с другого сервера, используя PHP.

EDIT

код, который я использую для загрузки файла с сервера, используя curl

$username = "user";
$password = "pwd";
$url = "http://domain.com/feeds/";

global $ch;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);
$output = curl_exec($ch);
$r = time()-(24*60*60); 
$dateit = date("Ymd", $r);
$file8 = "abc".$dateit.".tbz";
$file3 = "abc".$dateit.".tbz.md5";
$file5 = "xyz".$dateit.".tbz";
$file4 = "xyz".$dateit.".tbz.md5";
$file7 = "lmn".$dateit.".tbz";
$file2 = "lmn".$dateit.".tbz.md5";
$file6 = "pqr".$dateit.".tbz";
$file1 = "pqr".$dateit.".tbz.md5";
$arr = array($file1, $file2, $file3, $file4, $file5, $file6);
for($i=0;$i<=4;$i++)
{

 $url = "http://domain.com/feeds/current-data/".$arr[$i];
 curl_setopt($ch, CURLOPT_URL, $url);

 $fp = fopen("adminArea/folder1/".$arr[$i], 'w+');
 curl_setopt($ch, CURLOPT_FILE, $fp);
 curl_exec ($ch);

}
fclose($fp);
curl_close($ch);

Любая идея помощь ссылку или просмотр будет высоко ценится.

Ответы [ 2 ]

3 голосов
/ 13 октября 2011

Большинство из них говорят сами за себя, но я могу попытаться свести их к вам.

  • max_execution_time: максимальное время выполнения скрипта. Если вы загружаете файл объемом 1 ГБ и сценарий выполняется все время, увеличьте это значение с 30 до, возможно, 300.
  • max_input_time: не относится к вашей проблеме.
  • memory_limit: объем оперативной памяти, которую может использовать процесс PHP. ОЗУ не является дисковым пространством, поэтому, если ваш сценарий не выполняет таких операций, требующих большого объема памяти, как обработка изображений, операции с базами данных или чтение всего 1 ГБ файла в ОЗУ, все в порядке.
2 голосов
/ 13 октября 2011

memory_limit - это максимальный объем данных, которые скрипт может загрузить в память в любой момент времени.Это означает, что если вы попытаетесь прочитать все содержимое файла объемом 1 ГБ в переменную , да, у вас возникнут проблемы.

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

Вы также можете прочитатьчтобы разделить фрагмент на части, используя такие вещи, как fread(), чтобы не превышать лимит памяти в любой момент времени.

...