Я использую PHP 5.2 на Fedora и продолжаю получать это предупреждение после примерно 1000 итераций моего цикла, что означает, что программа перестала работать и ее необходимо перезапустить. Я мог бы настроить его на выход после 1000 итераций и вскоре после этого перезапустить через cron, но это похоже на выход труса. Цикл следует; Я должен добавить, что get_load()
преформует file_get_contents()
вызов.
while ($row = select_row($sql))
{
while (($load = get_load()) > 10)
{
echo "Going to sleep (load: ".$load.")\n";
sleep(60*3);
}
$id = $row['id'];
foreach ($sizes as $abbr=>$size)
{
if($row[$size] != "yes")
{
continue;
}
$filename = "/images/".$abbr."/".$id.".jpg";
$tmp_file = "/tmp/".$id.".jpg";
if ($size == "large")
{
//We want to progressively interlace our large bookcovers because it saves on filesave above 10K.
$cmd = "convert -strip -interlace Plane ".$filename." ".$tmp_file;
}
else
{
$cmd = "convert -strip ".$filename." ".$tmp_file;
}
$convert = popen($cmd." 2>&1", "r");
if (is_resource($convert))
{
echo fgets($convert);
if(pclose($convert) == 0)
{
//Upload converted file to remote server
}
unlink($tmp_file);
}
}
Редактировать: Прочитав первые два ответа, я понял, что, извлекая код загрузки файла, не относящийся к моей проблеме, я вынул свое утверждение pclose()
. Введите pclose()
, как показано в моем коде.
Дальнейшее редактирование: Опубликовано get_load()
по запросу
function get_load()
{
$load = explode(" ", file_get_contents("/proc/loadavg"));
return $load[0];
}