- 这是我正在开发的一个用户登录系统的php脚本
- 我需要它来读取和写入/students/students.txt文件,但它甚至无法读取文件中已经包含的内容
<?php
//other code
echo "...";
setcookie("Student", $SID, time()+43200, "/");
fopen("/students/students.txt", "r");
$content = fread("/students/students.txt", filesize("/students/students.txt"));
echo $content;
fclose("/students/students.txt");
fopen("/students/students.txt", "w");
fwrite("/students/students.txt", $content."'n".$SID);
fclose("/students/students.txt");
//other code
?>
您没有正确使用fopen()
。该函数返回一个句柄,然后用于读取或编辑文件,例如:
//reading a file
if ($handle = fopen("/students/students.txt", "r"))
{
echo "info obtained:<br>";
while (($buffer = fgets($handle))!==false)
{ echo $buffer;}
fclose($handle);
}
//writing/overwriting a file
if ($handle = fopen("/students/students.txt", "w"))
{
fwrite($handle, "hello/n");
fclose($handle);
}
如果这对你有用,请告诉我。
p。S.:感谢评论员的建设性反馈
正如其他人所展示的那样,有很多读取/写入文件的方法。我只是想说明一下你这种特殊做法的错误。
fread
采用文件句柄作为参数,而不是表示文件路径的字符串。
所以你的线路:
$content = fread("/students/students.txt", filesize("/students/students.txt"));
不正确。
应该是:
$file_handle = fopen("/students/students.txt", "r");
$content = fread($file_handle, filesize("/students/students.txt"));
使用fwrite
将内容写入文件时也是如此。它对文件的引用是使用fopen
而不是文件路径打开的File Handle
。当使用fopen()
打开文件时,还可以检查返回的$file_handle是有效资源还是false。如果为false,则表示fopen操作未成功。
所以你的代码:
fopen("/students/students.txt", "w");
fwrite("/students/students.txt", $content."'n".$SID);
fclose("/students/students.txt");
需要重写为:
$file_handle = fopen("/students/students.txt", "w");
fwrite($file_handle, $content."'n".$SID);
fclose($file_handle);
您可以看到fclose
也对文件句柄进行操作。
文件句柄(根据php.net):
A file system pointer resource that is typically created using fopen().
这里有几个诊断函数,允许您验证文件是否存在并且可读。如果是权限问题,它会为您提供需要权限的用户的名称。
function PrintMessage($text, $success = true)
{
print "$text";
if ($success)
print " [<font color='"green'">Success</font>]<br />'n";
else
print(" [<font color='"red'">Failure</font>]<br />'n");
}
function CheckReadable($filename)
{
if (realpath($filename) != "")
$filename = realpath($filename);
if (!file_exists($filename))
{
PrintMessage("'$filename' is missing or inaccessible by '" . get_current_user() . "'", false);
return false;
}
elseif (!is_readable($filename))
{
PrintMessage("'$filename' found but is not readable by '" . get_current_user() . "'", false);
return false;
}
else
PrintMessage("'$filename' found and is readable by '" . get_current_user() . "'", true);
return true;
}
我用(IMO)重新编写了您的代码,这是一个更干净、更高效的代码:
<?php
$SID = "SOMETHING MYSTERIOUS";
setcookie("Student", $SID, time()+43200, "/");
$file = "/students/students.txt"; //is the full path correct?
$content = file_get_contents($file); //$content now contains /students/students.txt
$size = filesize($file); //do you still need this ?
echo $content;
file_put_contents($file, "'n".$SID, FILE_APPEND); //do you have write permissions ?
文件集内容
file_get_contents()
是读取文件转换为字符串。如果支持,它将使用内存映射技术通过您的操作系统来提高性能。
文件输出内容
此函数与调用
fopen()
、fwrite()
和CCD_ 12连续地将数据写入文件。如果文件名没有存在,则创建文件。否则,现有文件为重写,除非设置了FILE_APPEND
标志。
注意:
- 确保完整路径
/students/students.txt
正确 检查您是否拥有
/students/students.txt
的read/write
权限了解更多关于linux文件/文件夹权限的信息,或者,如果你不能访问shell,如何通过ftp 更改文件或目录权限
尝试这样做:
fopen("students/students.txt", "r");
并检查是否有读取该文件的权限。