OOP类无法写入文件,因为is_writable返回false

时间:2015-10-17 13:13:15

标签: php oop

我正在学习PHP面向对象编程,并尝试从文件中读取和写入数据。但它根本没有创建文件并给我一个错误信息:

  

将您的chmod更改为test.txt

这是我的代码:

<?php 
class log
{
    public function Write($strFileName, $strData)
    {
        if (!is_writable($strFileName))
        die("Change your chmod to ".$strFileName);

        $handle = fopen($strFileName,'a+');
        fwrite($handle,"\r".$strData);
        fclose($handle);
    }
    public function Read($strFileName)
    {
        $handle = fopen($strFileName,'r');
        return file_get_contents($strFileName);
    }
}
$log = new log();
$log->Write('test.txt','Hello World!');
?>

1 个答案:

答案 0 :(得分:1)

我会将file_put_contentsFILE_APPEND | LOCK_EX标记一起使用,简化代码并确保文件已正确锁定和解锁。

此外,您不需要用于打开文件的句柄,因为file_get_contents会自行处理打开和关闭。

<?php 
class log
{
    public function Write($strFileName, $strData)
    {
        file_put_contents($strFileName, $strData, FILE_APPEND | LOCK_EX);
    }
    public function Read($strFileName)
    {
        return file_get_contents($strFileName);
    }
}
$log = new log();
$log->Write('test.txt','Hello World!');
?>

虽然我们正在学习OOD,但是文件名应该包含在类中,因为它对于创建的日志对象是不变的,在使用对象和读/写时会保持混乱:

<?php 
class log
{
    public $logFilePath;
    public function __construct($logFilePath) {
        $this->logFilePath = $logFilePath;
    }
    public function Write($strData)
    {
        file_put_contents($this->logFilePath, $strData, FILE_APPEND | LOCK_EX);
    }
    public function Read()
    {
        return file_get_contents($this->logFilePath);
    }
}
$log = new log('test.txt');
$log->Write('Hello World!');
echo $log->Read();
?>