我正在尝试制作一个独特的点击计数器。我从网上“借用”了一些代码,但却无法让它发挥作用。 (顺便说一下,我是一个自学新手黑客。)即使在这里的人们的帮助下,我也无法让它工作。所以我从头开始编写自己的代码重新学习'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行
我真的不明白错误。这是我的好友的服务器的问题,还是我在编写代码时表现不佳。我很感激你的帮助。
答案 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提供的令人印象深刻的代码读取并增加了文件中的数字,但它既没有写新数字也没有给我任何错误。但是,我上面编写的编写糟糕的代码实际上在我的服务器上工作。整个问题实际上是服务器上的权限。至少我在拔掉头发之前得到了帮助!