2016-12-20 27 views
8

Komut dizim bittikten sonra dosyayı silebilirim, ancak çalıştırılırken, fclose() numaralı telefondan sonra bile dokunamadım.PHP, fclose dosyasından sonra açılamıyor

$Files = glob("$_SERVER[DOCUMENT_ROOT]/files/*.csv"); 

    $File = fopen($Files[0], "r");   

    //while (($Data = fgetcsv($File)) !== false) {... 

    $i = 0; 
    while (is_resource($File)) { 
     $i && sleep(1); 
     echo "Closing handle.\n"; 
     fclose($File); 
     if (++$i > 5) 
      die("Could not close handle."); 
    } 

foreach ($Files as $File) { 
    $i = 0; 
    while (file_exists($File)) { 
     $i && sleep(1); 
     echo "Deleting file.\n"; 
     @unlink($File); 
     echo '[email protected]:~$ ', $Command = "rm -f '$File' 2>&1", "\n", shell_exec($Command); 
     if (++$i > 5) 
      die("Could not delete the file."); 
    } 
} 

ben unlink() aracılığıyla silmeye çalışırken ve kabuk komutlarını kullanarak ve ne çalışıyor görmüyor, hem bana bu hatayı verebilir gibi::

rm: cannot remove 'invincible-file.csv': Text file busy

İşte kod ı kullanmaya çalışıyorum edilir

Ayrıca, betiğin biraz aşırı olabileceğini fark ettim, ancak bu tamamen işe yaramayacağımı ve ek kodların bir kısmının sadece neler olduğunu denemek ve hata ayıklamak için çıktı amaçlı olduğunu anlıyorum.

+4

'$ Files' içeriği nedir? Ayrıca, okuma için "r" modlu 'fopen' kullanın ve daha sonra dosyayı silmeye çalışıyorsunuz. Kullanıcının silmeye izni olduğundan emin misiniz? Belki bir izin meselesidir. Diğer kodlardan hiçbirini kullanmadan bağlantıyı kaldırmayı deneyin. –

+2

'un' 'unlink'den önce kaldırın, böylece php'nin neden başarısız olduğunu söyleyebilmenize izin verebilirsiniz. Ayrıca, 'fclose'un dönüş değerini kontrol edin. – chiliNUT

+0

@KodosJohnson Şimdiye kadar bana yardım ettiğin için teşekkürler, 'bağlantısızlığı' hiç fopen olmadan denemeye çalışacağım, ve ben daha fazla kod ekledim, umarım daha önemli parçaları kaçırmıyorum –

cevap

5

önce Bu sorunla ve dosyayı kapattıktan sonra çöp toplama zorlayarak giderilmesi mümkün ve onu bağlantısını kaldırmakla önce ettik: Çok değil en iyi çözümü ile

gc_collect_cycles(); 

, ancak bir sorunu çözmek mi Önceden açılmış ve kapatılmış dosyaları siliyordum.

+0

Wow çalıştığı sorunu çözdüm, işe yaramazdı, bu işlevi fclose() 'dan sonra çalıştırmak için başka bir yer bulamadım ama bu işe yaramadı Bir hıçkırık, bu –

+0

için teşekkür ederim ek olarak bu önbellek ('clearstatcache') temizlemek bu tür aşma sorunu yardımcı olacağını düşünüyor musunuz? – Martin

+0

@BrianLeishman Lütfen gc_collect_cycles hack olmadan "fclose" den önce fflush'ı dener misiniz? – bishop