阅读与PHP文件 - 的fopen/FREAD
<?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;
?>
我得到这些错误为他们每个人:阅读与PHP文件 - 的fopen/FREAD
警告:的fopen(../ top.txt)[function.fopen]:未能打开流:没有这样的文件或目录
警告:文件大小()[function.filesize]:STAT失败../top.txt
警告:的fread():提供的参数是不是一个有效流资源
警告:FCLOSE():提供的参数是不是一个有效的流资源
文件模式中的所有文件和文件夹,并设置为777
存在于服务器上的所有文件
PHP5安装在服务器上
我在做什么错?
$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"
希望这可以解释它。是的,看看答案中提到的其他人的职能。
使用全路径,而不是 ../top.txt
使用 /path/to/top.txt
OR
你一个也使用 $top = $_SERVER['DOCUMENT_ROOT'] . "/../top.txt";
如果PHP认为filename指定一个本地文件,那么它会 试图打开该文件的流。该文件必须可供PHP, 访问,因此您需要确保文件访问权限允许访问此 。如果您启用了安全模式,或者open_basedir进一步 限制可能适用。
我建议你检查open_basedir和include path。
下面是一些代码来帮助你做到这一点:
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处理(如一些其他的答案似乎表明),那么read this(也由手动)的解释:
文件包括基于给定的文件路径,或者如果没有给出,则指定include_path。如果文件在 include_path中找不到,include将最终在失败之前检入调用脚本自己的 目录和当前工作目录。包含构造的 如果找不到文件将发出警告;这个 与require的行为不同,它会发出致命错误。
如果路径定义 - 无论是绝对的(从驱动器盘符 或\ Windows上,或/在Unix/Linux系统),或相对于 当前目录(开始或...) - include_path中将完全忽略 。例如,如果文件名以../开头,则解析器将在父目录中查找以查找所请求的文件。
我假设你没有使用安全模式,因为它是now deprecated。
['file_get_contents()'](http://php.net/file_get_contents)可能是你感兴趣的。 – mario 2012-08-08 22:08:05
检查[include_path](http://us2.php.net/manual/en/function.get-include-path.php)和[open_basedir](http://www.php.net/manual/en/ini .core.php#ini.open-BASEDIR) – ghbarratt 2012-08-08 22:08:52