我正在学习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!');
?>
答案 0 :(得分:1)
我会将file_put_contents
与FILE_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();
?>