2010-01-17 54 views
0

下面是一個簡單的數據庫類,也是它的一部分,除了與我的問題相關的部分外,我將所有內容全部刪除。無法讓PHP寫入文件

基本上,它允許我創建一個文件,其中包含在頁面上運行的所有查詢,包括它們的時間,順序,總數以及實際運行的SQL。這是非常好的,但我有麻煩。我無法將它寫入文件,您可以在下面看到我打印的是$ sss的值,這是應寫入文件的值。在PHP中,我有錯誤報告設置顯示一切,我沒有寫入錯誤或任何東西,它只是不寫入文件,可能我可能有文件在錯誤的文件夾,但我不知道。

那麼將文件路徑設置爲日誌文件並將其寫入的好方法是什麼?如果它現在找不到該文件,我是否應該看到某種錯誤?

所有的
<?PHP 
class Database 
{ 
    public $debug = true; 
    public $query_count = 0; 
    public $debug_file = "debug.sql"; 

    public function query($sql){ 
     //start timer stuff for debug logger 
     list($usec, $sec) = explode(" ",microtime()); 
     $time_start = ((float)$usec + (float)$sec); 

     //run mysql query 
     $result = mysql_query($sql); 


     ///debug  
     list($usec, $sec) = explode(" ",microtime()); 
     $time_end = ((float)$usec + (float)$sec); 
     $time = $time_end - $time_start; 
     if($this->debug){ 
      $this->query_count ++; 
      $f = fopen($this->debug_file, "a"); 
      $sss = "# ".$this->query_count."\n ".$time." sec \n\n".$sql."\n#-------------------------------------------------------------------------\n\n"; 

      // I print to screen just for test to see what should be wrriten to the file 
      echo $sss; 

      fputs($f, $sss, strlen($sss)); 
      fclose($f); 
     } 
     //end debug 
    } 
} 
?> 
+0

代碼看起來不錯。如果文件無法找到或打開,您應該會收到警告。你的error_reporting設置爲什麼?你有權寫入當前目錄嗎? – 2010-01-17 22:04:25

回答

3

首先,我會用file_put_contents(http://php.net/manual/en/function.file-put-contents.php),它本質上捆綁了所有的呼叫到一個,可以幫助避免錯誤。

如果echo聲明真的有效,我會檢查是否有任何錯誤被寫入到php日誌文件中,然後仔細檢查php.ini中的設置並記錄警告。

此外,檢查fopen()調用的返回值(它不應該是false)...也許它的失敗?

+0

謝謝,更好,也是寫作,似乎文件是在一個不同的文件夾,然後我預期,我需要設置一個文件路徑來保存,否則它會保持建立文件在新directorys – JasonDavis 2010-01-17 22:13:35

+0

啊 - 是啊有過類似事情發生在我自己面前,很酷,祝你好運。 – 2010-01-17 22:16:43