【问题标题】:PHP fopen returning null on files that work fine with include and get_file_contentsPHP fopen 在与 include 和 get_file_contents 一起正常工作的文件上返回 null
【发布时间】:2011-01-26 05:19:54
【问题描述】:

我在 Windows 2000 服务器上安装了 XAMPP。除了 PHP fopen 函数外,一切都很好。我既不能用它创建也不能打开文件。奇怪的是我可以包含/require/file_get_contents/其他文件相关的功能; fopen 也不会产生任何错误或通知它只是返回 NULL。

我已经将文件和所有封闭文件夹的完全控制权授予所有人,但我仍然得到 NULL 而不是文件指针。

我在 php 5.2.9、5.2.13 和 5.3.1 上试过这个,效果相同。我浏览了 php.ini 文件,寻找破坏它的东西;我什至尝试从 fopen 工作的 linux 机器中删除和使用基本的 ini 文件,但仍然没有。

我知道我必须在更改我的 ini 和所有这些之后重新启动 apache(我什至重新启动了服务器)所以不是这样。

我在这里假设这是一个 apache 配置问题,明天我将通过 php-cli 运行测试以确保。

我真的不想再为此伤脑筋了,一些 apache/php 向导可以帮助我吗?


感谢您的回复。你是对的,不是任何配置问题。问题必须与我的一个 dll 或我包含的文件之一有关。我刚刚尝试了在没有任何包含的新文件中不起作用的相同代码。我禁用了我的自定义库,它工作正常。

为了记录,我正在做的事情不起作用:

$test_file = 'c:\\test.csv';//everybody has full control. is very large.
    if(file_exists($test_file) && is_readable($test_file)){
        $fp = fopen($test_file, 'r');
        echo var_export($fp, true);//outputs NULL. on my linux box this is a number.
        if($fp !== false){
            //do the work
            fread($fp, 10);//throws the error that $fp is not a valid file handle
        }
    }

我所包含的东西一定会以某种方式破坏 fopen。在没有包含的新文件中按预期工作。

【问题讨论】:

  • 它不能是 apache/php 配置使用,因为 file_get_contents 使用与 fopen 相同的程序。提供重现代码而不是冗长的解释会非常好
  • 是的,一些示例代码会很好。你如何测试NULL?您如何引用 fopen 和 include/etc 的文件?
  • 发布一个例子。我希望这是一个文件路径字符串问题:)

标签: php apache null xampp fopen


【解决方案1】:

感谢您的回复。你是对的,因为这不是任何配置问题。问题必须与我的一个 dll 或我包含的文件之一有关。我刚刚尝试了在没有任何包含的新文件中无法使用的相同代码,并且我禁用了我的自定义库并且它起作用了。

为了记录,我正在做的事情不起作用:

$test_file = 'c:\\test.csv';//everybody has full control. is very large.
    if(file_exists($test_file) && is_readable($test_file)){
        $fp = fopen($test_file, 'r');
        echo var_export($fp, true);//outputs NULL. on my linux box this is a number.
        if($fp !== false){
            //do the work
            fread($fp, 10);//throws the error that $fp is not a valid file handle
        }
    }

我所包含的东西一定会以某种方式破坏 fopen。在没有包含的新文件中按预期工作。

【讨论】:

  • 您应该更新问题,而不是发布更新作为答案。
  • 您应该将此作为评论发布,而不是作为答案。
【解决方案2】:

所以我们假设您正在使用这种代码:

$fp = fopen( "my_file.txt", "r" );
$contents = fread($fp, filesize( "my_file.txt" ) );
fclose($fp);

我可以假设 filesize() 函数返回 null 吗?也可以试试 stat($filename) 函数,看看能不能得到一个比较完整的数组。

让我知道你的结果。

【讨论】:

  • 您应该将此作为评论发布,而不是作为答案发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2014-04-27
相关资源
最近更新 更多