PHP Uyarı: Çok fazla dosya açık -

4 Cevap php

Ben Fedora üzerinde PHP 5.2 çalıştırıyorum ve ben program çalışmayı durdurdu ve yeniden başlatılması gerekiyor demektir, benim döngü yaklaşık 1000 yineleme sonra bu uyarıyı almaya devam. Ben 1000 yineleme sonra çıkmak için bu kurmak ve kısa bir süre sonra bir cron vasıtasıyla yeniden, ama bu dışarı korkak yolunda gibi hissediyor olabilir. Döngü şöyle; O get_load() bir file_get_contents() çağrısı preforms eklemek gerekir.

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: İlk iki cevapları okuduktan sonra, benim sorun ile alakalı değildi yükleme dosyası kodunu alarak, benim pclose() bildirimde çıkardı fark etti. Benim kodda göründüğü gibi pclose() koyun.

Ek düzenleme: get_load() olarak istenen gönderildi

function get_load()
{
    $load = explode(" ", file_get_contents("/proc/loadavg"));
    return $load[0];
}

4 Cevap

Eğer pclose () ile bunu yazdıktan sonra işlemini her zaman kapatmayı deneyin.

popen sadece iki şey, bir kaynak veya YANLIŞ dönebilirsiniz. Belki yerine is_resource YANLIŞ karşı test etmelisiniz? Bu dosya tanıtıcısı sızıntı konum, bu yüzden kontrol etmek için bariz şey bunu açık kez her zaman bir dosyayı kapatma emin yapıyor, ve kolları dosyasını açıyoruz belirgin yeri popen çağrıdır. Mantık yoluyla iz ve bir şekilde bir mantık hatası veya bir istisna ya, bu borular kapanış atlama değil emin olun.

Sana get_load() kullanımları file_get_contents(), ama emin olun ... o düzgün açar tüm dosyaları kapatın söyledi biliyor musun? Eğer bu işlevi kodunu gönderebilir misiniz?

Düzenleme: yerleşik bir fonksiyon olmasına rağmen, file_get_contents() dosyasını okuyun ve ne olacağını görmek için başka bir şey kullanmayı deneyin.