无法让PHP写入文件

时间:2010-01-17 22:01:32

标签: 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
    }
}
?>

1 个答案:

答案 0 :(得分:3)

首先,我会使用file_put_contents(http://php.net/manual/en/function.file-put-contents.php),它实际上将所有这些调用捆绑成一个,可以帮助避免错误。

如果echo语句确实有效,我会检查是否有任何错误写入php日志文件,并仔细检查php.ini中的设置并让你记录警告。

另外,检查fopen()调用的返回值(它不应该是假的)......也许它失败了?