【问题标题】:PHP - failed writePHP - 写入失败
【发布时间】:2009-07-04 16:13:11
【问题描述】:

我被困住了,需要帮助。希望有人能帮忙?

有人知道为什么我在这段代码中“写入失败”吗?

$write_file = "/usr/home/public_html/php/users_v2.sql";
$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");

if (is_writeable($write_file)) {
    if ($write_handle === FALSE) echo 'Failed handle?!';
    if (fwrite($write_handle, "Hi\n") === FALSE) echo "Failed write!\n";
}

fclose($write_handle);

提前致谢。

【问题讨论】:

  • 不确定,但你能检查一下程序是否有必要的权限来写入文件吗?
  • 是的,我查过了。 777全线。太奇怪了。
  • 您检查过服务器的错误日志吗?

标签: php file-io fwrite


【解决方案1】:

通过在创建文件句柄时使用 OR 运算符,您将根据操作返回一个布尔值。所以 $write_handle 将包含 true 或 false,而不是文件资源。打开文件进行写入并测试它是否成功的更好方法是:

$write_handle = fopen($write_file, 'w');
if ($write_handle === false)
{
    die('Could not open file ' . $write_file);
}

此外,您可以使用file_put_contents() 函数为您处理 fopen()、fwrite() 和 fclose()。如果您只对同一个文件执行一次写入,我只建议这样做,因为这会产生很多开销,并且除非您传递 FILE_APPEND 标志,否则每次写入都会清空文件。

【讨论】:

    【解决方案2】:

    我看到它到处都在使用,但问题是 || die("无法打开 users_v2!");

    首先我添加了:

    error_reporting(E_ALL);
    

    查看 php 报告的错误。

    $write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");
    fclose($write_handle);
    

    返回一个无效的流句柄错误和文件句柄 1。没有它返回的文件句柄是“Resource id #x”。

    将行改为:

    $write_handle = fopen($write_file, "w"); // || die("Couln't open users_v2!");
    

    并且您的代码运行良好。现在就去 php.net 上发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2020-09-29
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多