【问题标题】:Why can't PHP see the text file I want to fopen() in the same directory?为什么 PHP 在同一目录下看不到我要 fopen() 的文本文件?
【发布时间】:2014-08-27 08:16:24
【问题描述】:

我想要做的只是fopen() 我的 PHP 脚本中的一个文本文件。这是我正在构建的模块中最重要的部分。不幸的是,在测试脚本时,我发现脚本看不到我要打开的文本文件。我将脚本与文本文件放在同一目录中,但我一直遇到同样的错误。我在下面发布脚本代码 sn-p 和命令行提示/响应。

代码

$membersfile = fopen('./members.txt', 'r');
print_r($membersfile);
fclose($membersfile);

命令行

507 elersong:~$ php /Users/elersong/Desktop/SS2014/register_member.php

警告:fopen(./members.txt):打开流失败:没有这样的文件 或目录 /Users/elersong/Desktop/SS2014/register_member.php 在第 11 行

警告:fclose() 期望参数 1 是资源,布尔值在 /Users/elersong/Desktop/SS2014/register_member.php 在第 13 行

我不知道为什么 PHP 看不到该文件,因为它肯定存在,并且与脚本位于同一目录中。请帮助我理解这一点。

【问题讨论】:

  • 你确定文件夹/Users/elersong/Desktop/SS2014/中有一个文件members.txt吗?
  • 使用 fopen('members.txt', 'r');
  • 文件所有者/权限?
  • @wumm,我愿意为此赌上性命。
  • 尝试echo '<pre>';var_dump(glob('*')); 应该显示当前目录中的文件

标签: php


【解决方案1】:

一些 PHP 设置的相关部分有问题,所以试试这个:

fopen(__DIR__ . '/members.txt', 'r');

__DIR__ 包含当前正在执行的 PHP 文件所在文件夹的路径。

您目前正在做的事情:

$membersfile = fopen(__DIR__ .'/members.txt', 'r');
print_r($membersfile); 
fclose($membersfile);

但是$membersfile 只包含句柄,一个数字,以便 PHP 现在知道您所指的是哪个打开的文件。如果您打印它,您只会看到句柄编号。您需要告诉 pHP 使用以下命令读取文件:

$file = __DIR__ .'/members.txt';
$membersfile = fopen($file, 'r');
echo fread($membersfile, filesize($file))
fclose($membersfile);

或者使用php速记函数:

echo file_get_contents( __DIR__ .'/members.txt');

【讨论】:

  • 我在命令行得到如下结果,但是看不懂。请指教。 Resource id #5512 elersong:~$
  • @elersong 那是因为你在做print_r($membersfile);,它会打印句柄。
  • @elersong 你想要的很可能是echo fread($membersfile, filesize($filename)) 而不是print_r($membersfile);
  • @elersong 是的 wumm 说了什么或使用file_get_contents 而不是fopen
【解决方案2】:

在尝试了这里发布的一些建议后,我终于能够弄清楚 PHP 脚本没有使用基于 PHP 脚本所在目录的文本文件的相对路径。

用户@andrew 建议我在脚本中添加以下行,以便了解脚本使用哪个目录作为起点。

echo '<pre>';var_dump(glob('*'));

从这一行的输出中,我可以看到脚本在我的 OSX 机器上使用用户的根文件夹作为 fopen() 的起点。我只需要在文件名前面加上文件路径的其余部分,PHP 就可以读取它。修改后的脚本如下:

$membersfile = fopen('Desktop/SS2014/members.txt', 'r');

非常感谢@andrew 和其他所有提交建议的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    相关资源
    最近更新 更多