【问题标题】:php fopen returns false but file is readable/writablephp fopen 返回 false 但文件是可读/可写的
【发布时间】:2011-04-09 17:01:24
【问题描述】:

有一个可读可写的文件,但 fopen 返回 false...

if(is_readable($file)) echo 'readable ';
if(is_writable($file)) echo 'writable ';
$fp = fopen($file, 'a+');
var_dump($fp);

结果是

readable writable bool(false)

有什么想法吗?

确定它必须是一个许可的东西,但在文件上尝试了 777 并得到相同的结果。

【问题讨论】:

  • 您是否 1000% 确定它是文件而不是目录? error_reporting(E_ALL); 说什么?
  • 1000% 似乎有点矫枉过正;P
  • 将错误报告设置为 E_WARNING 并查看错误消息是什么。
  • 我 1googol % 确定它是一个文件
  • 你用的是哪个版本的php?操作系统?该文件在本地文件系统中(不需要额外的 url_wrapper)?

标签: php


【解决方案1】:

让我们尝试获取更多信息。
是什么

$file = 'p:\muh';

error_reporting(E_ALL);
ini_set('display_errors', true);
echo 'phpversion: ', phpversion(), "\n";
echo 'uname: ', php_uname("s r"), "\n"; // name/release of the operating system
echo 'sapi: ', php_sapi(), "\n";

echo $file, file_exists($file) ? ' exists' : ' does not exist', "\n";
echo $file, is_readable($file) ? ' is readable' : ' is NOT readable', "\n";
echo $file, is_writable($file) ? ' is writable' : ' is NOT writable', "\n";

$fp = fopen($file, 'a+');
if ( !$fp ) {
  echo 'last error: ';
  var_dump(error_get_last());
}
else {
  echo "ok.\n";
}

打印?

另请参阅:http://docs.php.net/error_get_last

【讨论】:

  • 这是一个处理错误的插件 - 只是报告它无法访问文件 - 问题是权限,因为文件所有者不允许 php 进行 chmod - 并且该错误被抑制了......
【解决方案2】:

我遇到了同样的问题。在我的情况下,它就像确保文件是一样简单:

C:\route\to\file\filename.EXTENSION

在我的例子中,我只是缺少 .PDF 扩展名,因此它会将文件名解释为另一个子目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 2016-10-15
    • 2018-02-17
    • 1970-01-01
    • 2016-01-06
    • 2013-04-14
    • 2021-05-08
    • 2015-06-03
    相关资源
    最近更新 更多