我正在尝试为我的网站制作评论系统,但是当我按下发布按钮时,它会给我错误。
错误是:
警告:fopen(comments.txt):无法打开流:没有这样的文件或 / Applications / XAMPP / xamppfiles / htdocs / bikereport / new中的目录 第11行设计v1 / Denmark.php
警告:fread()期望参数1为资源,布尔值为 / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design 第12行的v1 / Denmark.php
警告:fopen(posts.txt):无法打开流:权限被拒绝 / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design 第15行的v1 / Denmark.php
警告:fwrite()要求参数1为资源,布尔值为 / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design 第17行的v1 / Denmark.php
警告:fclose()要求参数1为资源,布尔值为 / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design 第18行的v1 / Denmark.php
警告:fclose()要求参数1为资源,布尔值为 / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design 第19行的v1 / Denmark.php
BUT !!我认为所有的错误都是由第一个错误触发的,第11行是
我的HTML表单:
<form class='' action='' method='POST'>
First and last name:<br>
<input required class='font2 i' style='width: 262px;' type='search' name='name' value=''><br><br>
City or state:
<input required class='font2 i' type='search' name='city' value=''> Phone number:<br>
<input class='font2 i' type='search' name='phone' value=''><br><br>
E-mail:<br>
<input required class='font2 i' type='search' name='email' value=''> Bike serial number:<br>
<input class='font2 i' type='search' name='serial' value=''><br><br>
Information about the bike:<br>
<textarea required class='font2 info' name='info'></textarea><br>
<input type='submit' name='Submit' value='Post'>
</form>
我的PHP代码
<?php
if($_POST){
$name = $_POST['name'];
$city = $_POST['city'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$serial = $_POST['serial'];
$info = $_POST['info'];
#Get old comments
$old = fopen("posts.txt", "r+t");
$old_comments = fread($old, 1024);
#Delete everything, write down new and old comments
$write = fopen("posts.txt", "w+");
$string = "<div class='font2 post'>".$name."<br><br>".$city."<br>".$phone."
<br>".$email."<br><br>".$serial."<br><br>".$info."<br>\n".$old_comments;
fwrite($write, $string);
fclose($write);
fclose($old);
}
?>
答案 0 :(得分:0)
我很确定你不能同时打开同一个文件两次。您需要在读写模式下一次打开它或关闭文件,然后重新打开它以进行写入。
答案 1 :(得分:0)
您无法两次打开文件。如果再次打开它,在关闭它之前,它将返回FALSE
而不是文件处理程序。因此,错误消息包含消息
警告:fclose()要求参数1为资源,布尔在...中给出
所以,首先关闭它,然后重新打开它。
答案 2 :(得分:0)
您的代码存在很多问题 - 不仅仅是报告为错误和警告的问题;我希望您在考虑向任何用户公开tis之前了解一些安全性,更不用说在互联网上了。您可能想在codereview.stackexchange.com上寻求一些指导
您向我们展示的代码并未产生您向我们展示的错误和警告。假设代码是相似的 ...你试图从一个不存在的文件中读取。第一次打开文件时,您可以通过读取和写入来执行此操作 - 但是您永远不会使用该文件句柄进行编写。你是第二次打开文件而没有关闭第一个句柄 - MSWindows是非常沉重的文件锁定 - 但不是你不会遇到令人讨厌的竞争条件。使用file_get_contents()和file_put_contents()读取和写入文件更加清晰:
#Get old comments
$old_comments = file_get_contents("posts.txt");
#Delete everything, write down new and old comments
$string = "<div class='font2 post'>".$name."<br><br>".$city."<br>".$phone."
<br>".$email."<br><br>".$serial."<br><br>".$info."<br>\n".$old_comments;
file_put_contents("posts.txt", $string);
或者,如果你想继续使用fopen()并为自己发现痛苦,那么在追加模式下打开一次(如果文件不存在则创建文件)并寻找({{1在阅读之前,在写作之前再次开始。