我有以下PHP代码:
$filename = '/front/style.css';
$cssfile='#h1{font-size:12px}';
if($id_file=fopen($filename, "w+"))
{
echo'file exist';
$id_file=fopen($filename, "w+");
flock($id_file,1);
fwrite($id_file,$cssfile);
flock($id_file,3);
fclose($id_file);
}
else
{
echo "file don t exist";
}
我的文件是空的,但有空间。我的文件存在并且是可写的。我的apache日志中没有任何内容。我正在使用Mamp与php 5.3.2。
有什么想法吗?Thx
我能看到的一些错误是:
-
您正在使用
fopen
检查文件是否存在。这行不通。在w+
模式下,如果文件不存在,PHP将尝试创建该文件。使用file_exits
函数检查文件是否存在 -
打开同一个文件两次。
对于flock
的第二个参数也使用PHP常量(LOCK_SH
, LOCK_UN
)。这将使您的程序更具可读性。
更新
您是否检查了它是否写入了与您期望的不同的目录?检查您的路径,看看它的默认位置,或者甚至只是搜索文件,看看它还会出现在哪里。Getcwd()将显示当前的工作目录。
您是否检查了fwrite的返回值以查看写入是否实际工作?如果fwrite成功,则尝试使用相同的$id_file读取代码中的文件,并在程序仍在运行时查看那里是否有任何内容。
你调用了两次fopen。W +截断文件,你正在写到第二个$id_file,所以我的猜测是,当第一个$id_file被关闭时,它被截断。
如果使用fopen w+选项后文件为空,则可以使用此方法。
// only read
$filename = '/path/to/blah.txt';
$myfile = fopen($filename, "r");
$mydata = fread($myfile, filesize($filename));
$mynewdata = $mydata + 'abc';
fclose($myfile);
// only write
$myfile = fopen($filename, "w");
fwrite($myfile, $mynewdata);
fclose($myfile);