当前位置: 首页 > 知识库问答 >
问题:

使用PHP读取文件-f开/fread

洪梓
2023-03-14
<?php

$top = "../top.txt";
$middle = "../middle.txt";
$bottom = "../bottom.txt";
$end = "/st.txt";
$data = "/dt.txt";

$handle1 = fopen($top, "r"); 
$contents1 = fread($handle1, filesize($top)); 
fclose($handle1); 

$handle2 = fopen($end, "r"); 
$contents2 = fread($handle2, filesize($end)); 
fclose($handle2);

$handle3 = fopen($middle, "r"); 
$contents3 = fread($handle3, filesize($middle)); 
fclose($handle3);

$handle4 = fopen($data, "r"); 
$contents4 = fread($handle4, filesize($data)); 
fclose($handle4);

$handle5 = fopen($bottom, "r"); 
$contents5 = fread($handle5, filesize($bottom)); 
fclose($handle5);

echo $contents1;
echo $contents2;
echo $contents3;
echo $contents4;
echo $contents5;

?>

我得到了他们每个人的错误:

警告:fopen(../top.txt)[function.fopen]:无法打开流:没有这样的文件或目录

警告:文件大小()[function.filesize]:统计失败…/top.txt

警告:fread():提供的参数不是有效的流资源

警告:fclose():提供的参数不是有效的流资源

所有文件和文件夹中的CHMOD,设置为777

服务器上存在所有文件

PHP5 安装在服务器上

我做错了什么?

共有3个答案

赫连华皓
2023-03-14

从PHP手册中:

如果PHP决定文件名指定一个本地文件,那么它将尝试在该文件上打开一个流。PHP必须可以访问该文件,因此您需要确保文件访问权限允许这种访问。如果已启用安全模式或open_basedir,则可能会应用进一步的限制。

我建议您检查open_basedir和包含路径。

以下是帮助您实现这一点的一些代码:

echo 'open_basedir: '.ini_get('open_basedir')."\n";
echo 'Include path: '.get_include_path()."\n";
echo 'Current path: '.__DIR__."\n";

这样,您应该能够确认您能够访问open_basedir目录中或目录下的文件。如果open_basedir是“空白”的,那么PHP不应该强制执行任何限制。

如果您真正需要的只是解释PHP通常如何处理文件路径(正如其他一些答案似乎表明的那样),那么请阅读以下内容(也来自手册):

文件是根据给定的文件路径来包含的,如果没有给出,则指定include_path。如果在include_path中找不到文件,包含将在失败前最终检查调用脚本自己的目录和当前工作目录。如果找不到文件,包含构造将发出警告;这与要求不同,要求会发出致命错误。

如果定义了路径 - 无论是绝对路径(在Windows上以驱动器号或\开头,在Unix/Linux系统上以/开头)还是相对于当前目录(以.或..开头),则该include_path将被完全忽略。例如,如果文件名以 .. 开头。/,解析器将在父目录中查找请求的文件。

我假设你不使用安全模式,因为它现在已经过时了。

荣俊杰
2023-03-14
匿名用户

$top = "../top.txt";

意味着从您当前的位置向上移动一个文件夹,并搜索文件top.txt$中间="…/middle.txt";$底部="…/bottom.txt";。对于这两个:

$end = "/st.txt";
$data = "/dt.txt"

它正在从根目录搜索。请确保文件位于您引用它们的位置。我可能认为您希望在最后两个变量中使用它:

$end = "./st.txt";
$data = "./dt.txt"

其中<代码>。/表示当前目录。

所以,给你更详细的例子。假设你的PHP文件位于/var/www/http/docs/Project/phpFile.php,那么你的文件将像这样链接:

$top = "/var/www/httpdocs/top.txt";
$middle = "/var/www/httpdocs/middle.txt";
$bottom = "/var/www/httpdocs/bottom.txt";

$end = "/st.txt";
$data = "/dt.txt"

现在,请注意最后两个变量的差异-它们保持不变,因为您已将其设置为从根目录(/)查找。其中,好像您将使用带有的链接/,则路径为:

$end = "/var/www/httpdocs/project/st.txt";
$data = "/var/www/httpdocs/project/dt.txt"

希望这能解释它。是的,一定要看看其他人在答案中提到的功能。

祁鸿哲
2023-03-14

使用整个路径,而不是../top。txt使用/path/to/top.txt

您还可以使用$top=$_SERVER['DOCUMENT_ROOT'].“/../top.txt”

 类似资料:
  • 问题内容: 我正在尝试使用PHP读取mp4文件,而我现在正在做的是: 但是通过这种方式,我无法跳过甚至返回,直到视频未100%加载。当然,当我直接从文件(video.mp4)中读取内容时,一切都会顺利进行。 谢谢。 问题答案: 您需要自己在PHP中实现跳过功能。这是一个代码片段,可以完成此操作。 更高的性能 请注意,这不是最有效的方法,因为整个文件都需要通过PHP进行处理,因此您只需要尝试如何进行

  • 问题内容: 我正在尝试读取Excel文件(Office 2003)。有一个Excel文件需要上载并对其内容进行解析。 通过Google,我只能找到以下相关(且主题不足)的答案:生成Excel文件,读取Excel XML文件,读取Excel CSV文件或不完整的废弃项目。我拥有Office 2003,因此如果我需要那里的任何文件,都可以使用它们。它已安装在我的盒子上,但尚未安装,也无法安装在我的共享

  • 问题内容: 我正在建立一个供人们上传PHP中的.tar(和.tar.gz,.tar.bz2,.zip等)文件的系统。上载文件是可以的,但是在上载档案之后,我想列出档案中包含的文件。 有人可以推荐一个可以读取文件存档的优秀PHP库吗? 我在Pear上找到了File_Archive,但是几年来没有更新。ZipArchive非常适合.zip文件,但是我需要一些可以处理更多文件类型的文件。 更新 我在RH

  • 问题内容: 我的服务器中有一个包含此信息的文本文件: 如何使用PHP从文本文件中逐行读取所有信息? 问题答案: 这将使您逐行阅读..阅读php.net/fgets上有关Mac的行尾问题的注释。

  • 本文向大家介绍php 使用file_get_contents读取大文件的方法,包括了php 使用file_get_contents读取大文件的方法的使用技巧和注意事项,需要的朋友参考一下 当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可以使用PHP

  • 我使用OpenCSV进行CSV文件的读写。在I hsd安装早期版本的Java(即Java 6)之前,它工作得很好。安装完之后,我的代码就停止工作了: 线程“main”java.lang.UnsupportedClassVersionError:COM/OpenCSV/CSVReader:不支持Major.Minor版本51.0在java.lang.ClassLoader.DefineClass1(