我尝试fwrite到文本文件时出错

时间:2013-12-03 16:24:29

标签: php

我正在尝试制作一个独特的点击计数器。我从网上“借用”了一些代码,但却无法让它发挥作用。 (顺便说一下,我是一个自学新手黑客。)即使在这里的人们的帮助下,我也无法让它工作。所以我从头开始编写自己的代码重新学习'f'语句。我现在拥有它,以便它将读取文本文件中的所有IP地址,并将每个地址与用户ip进行比较,如果已经输入,则退出循环。

现在我正在尝试打开计数文件,读取一个条目,将其递增1并将其写回文件。但它不会起作用。我在这里发现了几个帖子并尝试了他们建议的'cmod'命令和所有可能的数字,但没有。然后我找到了如何打开更好的错误报告。 (之前有些建议,但我不知道怎么做。)现在我得到了一堆错误,我认为服务器上有一些东西不让我写文件。这是我正在使用的代码,仅用于增量部分:

ini_set('display_errors', 'On');
error_reporting(E_ALL);

//  read contents of count.txt

$handle = fopen($count_file, "r");
$old_count=fgets($handle);

echo "Old count = " . $old_count . "<br><br>"; 

fclose($handle);

//  write contents of count.txt

chmod($count_file, 0777);
$fp = fopen($count_file, 'ab');
if (false === $fp) {
    throw new RuntimeException('Unable to open log file for writing');
}

$handle = fopen($count_file, "w");  
$new_count = $old_count +1;

echo "New count = " . $new_count;

fwrite($handle, $new_count);
fclose($handle);

旧计数和新计数显示正常,但新计数无法写入txt文件。以下是现在显示的错误消息:

  

警告:chmod()[function.chmod]:第50行/home/users/tecitout/counter/fullarray1.php中不允许操作

     

警告:fopen(count.txt)[function.fopen]:无法打开流:第51行/home/users/tecitout/counter/fullarray1.php中的权限被拒绝

     

致命错误:在/home/users/tecitout/counter/fullarray1.php:53中显示消息“无法打开日志文件以进行写入”的未捕获异常'RuntimeException':堆栈跟踪:#home {0}引入/ home /用户/ tecitout / counter / fullarray1.php第53行

我真的不明白错误。这是我的好友的服务器的问题,还是我在编写代码时表现不佳。我很感激你的帮助。

3 个答案:

答案 0 :(得分:1)

如果要写入文件,则需要具有写入权限。另外,要chmod一个文件,你需要拥有它,或者以root身份登录。

所以你的错误信息按顺序排列:

Warning: chmod() [function.chmod]: Operation not permitted in /home/users/tecitout/counter/fullarray1.php on line 50

对应chmod($count_file, 0777);。似乎运行php的用户不拥有该文件。

Warning: fopen(count.txt) [function.fopen]: failed to open stream: Permission denied in /home/users/tecitout/counter/fullarray1.php on line 51

这对应于$fp = fopen($count_file, 'ab');并且意味着该文件不可写,因为chmod不起作用。

Fatal error: Uncaught exception 'RuntimeException' with message 'Unable to open log file for writing' in /home/users/tecitout/counter/fullarray1.php:53 Stack trace: #0 {main} thrown in /home/users/tecitout/counter/fullarray1.php on line 53

是因为if (false === $fp)而且是预期的,如上所述。

答案 1 :(得分:0)

删除count.txt,只要网络服务器有权写入您要放置count.txt的目录,只需执行以下操作:

$c = 0;
$count_file = 'count.txt';

if(file_exists($count_file)) {
    $c = (int)file_get_contents($count_file);
    echo "Old count = $c<br><br>";
}
file_put_contents($count_file, $c++);
echo "New count = $c<br><br>";

答案 2 :(得分:0)

绅士,谢谢你的帮助。我将所有文件复制到我租用的网络空间并找到了成功。不幸的是,AbraCadaver提供的令人印象深刻的代码读取并增加了文件中的数字,但它既没有写新数字也没有给我任何错误。但是,我上面编写的编写糟糕的代码实际上在我的服务器上工作。整个问题实际上是服务器上的权限。至少我在拔掉头发之前得到了帮助!