<?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]:无法打开流:没有这样的文件或目录
警告:文件大小() [函数.文件大小]:统计失败。/顶部.txt
警告:fread():提供的参数不是有效的流资源
警告:fclose():提供的参数不是有效的流资源
CHMOD 在所有文件和文件夹中设置为 777
服务器上存在所有文件
PHP5 安装在服务器上
我做错了什么?
使用整个路径,而不是 ../top.txt
用 /path/to/top.txt
或
你也使用 $top = $_SERVER['DOCUMENT_ROOT'] . "/../top.txt";
$top = "../top.txt";
意味着它会从您当前的位置向上移动一个文件夹,并搜索文件top.txt
.$middle = "../middle.txt";
和$bottom = "../bottom.txt";
都一样.对于这两个:
$end = "/st.txt";
$data = "/dt.txt"
它从根目录搜索。请确保您将文件位于您引用它们的位置。我可能认为您希望在最后两个变量中这样做:
$end = "./st.txt";
$data = "./dt.txt"
其中./
表示当前目录。
所以,给你更详细的例子。假设您的PHP文件位于/var/www/httpdocs/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"
希望这能解释它。是的,请查看答案中其他人提到的功能。
来自 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,包含最终将签入调用脚本自己的 目录和失败前的当前工作目录。这 包含构造如果找不到文件将发出警告;这 与 require 的行为不同,这将发出致命错误。
如果定义了路径 — 是否绝对(以驱动器号开头) 或 '' 在 Windows 上,或/在 Unix/Linux 系统上)或相对于 当前目录(以 . 或 ..) 开头 — include_path将是 完全忽略了。例如,如果文件名以 .. 开头。/这 解析器将在父目录中查找请求的文件。
我假设您不使用安全模式,因为它现已弃用。