Ben açıkça bu dosyayı kapatmak zorunda mıyım?

4 Cevap

Ben bir logging script bu gibi bulunabilir:

/** 
 * Logging class: 
 * - contains lopen and lwrite methods 
 * - lwrite will write message to the log file 
 * - first call of the lwrite will open log file implicitly 
 * - message is written with the following format: hh:mm:ss (script name) message 
 */  
class Logging{  
  // define log file  
  private $log_file = '/tmp/logfile.txt';  
  // define file pointer  
  private $fp = null;  
  // write message to the log file  
  public function lwrite($message){  
    // if file pointer doesn't exist, then open log file  
    if (!$this->fp) $this->lopen();  
    // define script name  
    $script_name = pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME);  
    // define current time  
    $time = date('H:i:s');  
    // write current time, script name and message to the log file  
    fwrite($this->fp, "$time ($script_name) $message\n");  
  }  
  // open log file  
  private function lopen(){  
    // define log file path and name  
    $lfile = $this->log_file;  
    // define the current date (it will be appended to the log file name)  
    $today = date('Y-m-d');  
    // open log file for writing only; place the file pointer at the end of the file  
    // if the file does not exist, attempt to create it  
    $this->fp = fopen($lfile . '_' . $today, 'a') or exit("Can't open $lfile!");  
  }  
} 

Ben burada herhangi bir dosya kapanış kod göremiyorum. O sadece iyi mi? Değilse, hangi noktada olduğunu uygun olur? Script tamamen (koşuyoruz) yürütülür veya PHP en kısa sürede zaten dosyayı kapatmak mı?

4 Cevap

Insanlar söylediler, PHP otomatik olarak dosya kapanacak. Ancak, dosyayı kapatmak için en iyi uygulamadır.

  1. Çoğu dilde açıkça dosyaları kapatmak zorunda ve bunu yapmak için başarısızlık veri kaybına yol açabilir. Yani olmak iyi bir alışkanlıktır, ve yardımcı Hiç portu uygulama eğer.

  2. Veri yakın olur kadar diske kızardı olmayabilir. Script (PHP komut dosyası muhtemelen olmayacak gibi, verilen) herhangi bir süre için çalışır o zaman işler yazılır zaman daha açık denetime isteyebilirsiniz. Benim log bir kaza durumunda kaydedilir, böylece benim "tipik" günlük uygulama için, ben açın ve her satırda dosyayı kapatın

  3. En önemli ve göz ardı: Yine bu soruyu sormak zorunda sonraki kişiye durur! Bu kod netlik konudur; Eğer doğru olmadığını sormak varsa, bunu doğru görünüyor ki onu yeniden düşünmelisiniz.

Işlem sona erdiğinde en C çalıştırmalar otomatik olarak kapanacak beri bir dosyayı kapatmadan kesinlikle gerekli değildir. Ancak, bazı C çalıştırmalar bunu yaparken önbellek verileri temizleme değil, bu nedenle size veri kaybını önlemek için açık tüm dosyaları kapatmak için tavsiye edilir.

PHP aslında close the files it's handling after execution script olacak.

Bu açıkça bunu yapmak için "en iyi uygulama", ama çoğu durumda farketmez. Ben bir unhanded istisna olmadığını, bir 'açık' dosyası ile sol olabilir varsayalım, ve gerçekten zaten kapatmak için sadece bir satır alır - neden olmasın?

Sorun bu kadar çok dosya kapama, dosya kapatılmadan önce çıktı kızarma gibi değildir. Bir dosya sadece kapalı ise, o zaman, işte bu - kapalı. Bu çıkış tamponunda kalan veri varsa, o potansiyel kaybetti.

Bu dosyayı kapatır Şimdi, PHP bilmiyorum ki, iyi "yakın floş ve" olabilir. Ama bu açıkça bir dosyayı kapatma ile değil sorunları açısından yaylar akla ilk şey.