Je cours PHP 5.2 sur Fedora, et je continue à recevoir cet avertissement après environ 1000 itérations de ma boucle, ce qui signifie que le programme a cessé de fonctionner et doit être redémarré. Je pourrais régler cela pour sortir après 1000 itérations et redémarrer par l'intermédiaire d'un cron peu de temps après, mais cela ressemble à l'issue lâche. La boucle suit; Je devrais ajouter que get_load()
préforme un appel file_get_contents()
.PHP Attention: Trop de fichiers ouverts - des idées?
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);
}
}
Edit: Après avoir lu les deux premières réponses, je me suis rendu qu'en prenant le code de téléchargement de fichier qui n'a pas été utile à mon problème, je pris ma déclaration pclose()
. Mettez dans le pclose()
tel qu'il apparaît dans mon code.
plus modifier: Posté get_load()
comme l'a demandé
function get_load()
{
$load = explode(" ", file_get_contents("/proc/loadavg"));
return $load[0];
}
PHP 5 a déjà une fonction 'sys_getloadavg': http://docs.php.net/sys_getloadavg – Gumbo
Je n » Je sais que - merci! –
En outre: je doute que vos appels 'convert' fonctionnent. Ou sont $ filename et $ tmp_file des chemins de système de fichiers vraiment absolus? – Gumbo