PHP: açmadan bir dosyanın içeriğini silebilirsiniz bir komut var mı?

5 Cevap

Php bir dosyanın içeriğini kaldırmak için herhangi bir yolu var mı, biz yerine ben sadece içeriğini kaldırmak istiyorum ben unlink biliyorum, bunu yapar ama ben dosyayı silmek istemediğiniz herhangi bir php komutu var mı o dosyanın.

Ben bir getCurrentDBSnap işlevi çağrıldığında ise ben /home/test/incoming klasöründen dosya alır ve kullanarak dosyaya CurrentDB masa devleti doldurur, geçmek bir dosyayı fputcsv ve /home/test/outgoing dosyayı geri koyar.

Şu anda gelen klasöründe kalır ve işlevini çağırabilirsiniz zaman getCurrentDBSnap onu içine DB son durumu ile dosya almak ve geçersiz olacaktır dosya.

Q: Benim soru, bunun yerine dosyanın üzerine yazma, biz gelen klasöre dosya hep boş olacağını hiç getCurrentDBSnap gibi sonra dosyanın içeriğini kaldırmak mümkün mü?

Mantıklı umut :)

5 Cevap

Ben dosyaya içeriğini yazmak var bilmiyorum, ama fopen kullanmak ve ilk dosyayı boş ise, temelde w modu zaten ne yaptığını yapıyoruz.

Kimden documentation:

Sadece yazmak için 'w': Aç; Dosyanın başında dosya işaretçisi yerleştirin ve truncate the file to zero length. Dosya yoksa, bunu oluşturmak için çalışır.

Yani ben gerçekten muhtemelen yine w modunu kullanmak gibi ilk önce boşalma gerek bakın.

Kodunuzu Bu dosya boş ya da bir şekilde güvenlik alakalı olup olmadığını gerçeğine dayanır eğer sadece boş olmalıdır.

ftruncate - belirli bir uzunlukta bir dosya keser

Örnek

$handle = fopen('/path/to/file', 'r+');
ftruncate($handle, 0);
fclose($handle);

Ama dosyayı açmak zorunda.

Exec linux üzerinde ex .. izin verilirse belki bu iş civarı olduğunu:

<?
shell_exec("rm -rf " . $filename " && touch ".$filename);
?>

Bu dosyayı kaldırın ve daha sonra yeniden oluşturmak, bu nedenle içeriği boşaltılmış olduğunu "görünür" olacaktır, bu sadece benim başının üstünde değil, Linux kullanırken olası .. Yoksa eğer kullanılması gereken bir şey olduğunu ve erişim I awk veya sed kullanmak istiyorum exec komutu (daha iyi) dosyasını boşaltmak için

Bunu açmadan bir dosyayı değiştiremezsiniz. Bunu yapmanın basit yolu açmak ve bu şekilde görünecektir PHP, hangi açmak iken onu kesecek için:

fclose(fopen($filename, "w+"));

: Eğer, basit yolu PHP olacağını, böylece dosyaya null / dev / yönlendirmek için (sistem () çağrısı ne olduğu) bir unix çağırmak için gidiyoruz

system(">$filename </dev/null");

Orada bir sürü bu yaklaşıma daha fazla yük var ama yaygın ve bir kabuğa sahip herhangi bir dil veya çevreye tercüme edilebilir. Eğer sistemi () rm ve sonra dosyayı yeniden dokunmak için çağrı var bu konu hakkında başka bir cevap vardır - atomik olmayan olmasının yanı sıra, bu yaklaşım da beni çok daha fazla korkutuyor.