Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试写入文本文件时出错_Php - Fatal编程技术网

Php 尝试写入文本文件时出错

Php 尝试写入文本文件时出错,php,Php,我正在尝试制作一个独特的点击计数器。我从网络上“借用”了一些代码,但就是不能让它工作。(顺便说一句,我是一个自学成才的黑客。)即使在这里的人的帮助下,我也无法让它工作。因此,我从零开始编写自己的代码,重新学习“f”语句。我现在有了它,它将读取文本文件中的所有ip地址,并将每个地址与用户ip进行比较,如果已经输入了,则退出循环 现在我试图打开count文件,读取一个条目,将其递增一,然后将其写回文件。但它就是不起作用。我在这里找到了更多的帖子,并尝试了他们建议的“cmod”命令和所有可能的数字,但

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

现在我试图打开count文件,读取一个条目,将其递增一,然后将其写回文件。但它就是不起作用。我在这里找到了更多的帖子,并尝试了他们建议的“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);
ini_集('display_errors','On');
错误报告(E_全部);
//读取count.txt的内容
$handle=fopen($count_file,“r”);
$old_count=fgets($handle);
echo“Old count=”$老伯爵。“

”; fclose($handle); //写入count.txt的内容 chmod($count_文件,0777); $fp=fopen($count_file,'ab'); 如果(false==$fp){ 抛出新的RuntimeException('无法打开日志文件进行写入'); } $handle=fopen($count_file,“w”); $new_count=$old_count+1; echo“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堆栈跟踪:#0{main}在第53行的/home/users/tecitout/counter/fullarray1.php中抛出消息“无法打开日志文件进行写入”的未捕获异常“RuntimeException”


我真的不明白这些错误。这是我朋友的服务器的问题还是我写代码太差了。我非常感谢您的帮助。

删除
count.txt
,只要Web服务器有权限写入您要放置
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>";
$c=0;
$count_file='count.txt';
如果(文件存在($count\u文件)){
$c=(int)文件\u获取\u内容($count\u文件);
echo“旧计数=$c

”; } 文件内容($count\u file,$c++); 回显“新计数=$c

”;
如果要写入文件,需要对其具有写入权限。此外,要对文件进行chmod,您需要拥有该文件,或者以root用户身份登录

因此,您的错误消息顺序如下:

Warning: chmod() [function.chmod]: Operation not permitted in /home/users/tecitout/counter/fullarray1.php on line 50
对应于
chmod($count\u文件,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_文件'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)
而导致的,并且是预期的,鉴于上述情况。

先生,感谢您的帮助。我将所有文件复制到我租用的web空间,并获得了成功。不幸的是,Abracadver提供的令人印象深刻的代码读取并增加了文件中的数字,但它既没有写入新的数字,也没有给我任何错误。然而,我上面写的糟糕的脚本代码实际上可以在我的服务器上运行。整个问题实际上是服务器上的权限问题。至少我在拔完头发之前得到了帮助

只是权限问题。您好友的服务器没有授予您修改该文件的适当权限。谢谢@jszobody。如果我可以问的话,这是在他的php.ini文件中还是在服务器设置中?这是一个与他合作的另一家公司共享的服务器,但另一个人控制着服务器。谢谢。更可能是linux文件系统权限,不允许Apache进程对该文件或文件夹进行写访问。
$count\u file
位于服务器上的何处?有可能你可以把它放在别的地方,在那里你可以写。他有一个网站目录,这显然是我能访问的全部。上次我去寻找PHP.INI文件,但找不到它,但我的PHP脚本确实有效。(就像我为他的联系人页面编写的mailto脚本一样。)我在主目录和名为“counter”的子文件夹中都试过了,两个文件夹中的问题似乎都一样。这不是PHP.INI问题。操作系统没有给你写权限。我对你的代码感到敬畏。谈论整洁和简洁。我希望有一天我能做到这一点的十分之一。不幸的是,这也行不通。它会递增,但不会写入文件。我认为上面的乔伯德和下面的汤姆·麦克唐纳一针见血。除非我的好友能给我权限,否则我们不能在他的网站上有一个唯一的点击计数器。谢谢。汤姆,非常感谢你对错误代码的解释。我“有点”有一个想法,但你简洁的描述给了我一个更好的画面。你和上面的@jszobody都告诉我一件事,那就是我没有权限。我已经为自己租用了网络空间,所以我想我会在那里尝试代码,看看它是否有效。