在Mac OS X中,php fopen无法打开文件进行写入

3

我正在我的笔记本电脑上(使用Mac OS X 10.6.7)本地运行php脚本updreading.php。

以下是updreading.php的内容:

<?php
    $outFile = "examples-output.txt";
    $out = fopen($outFile, 'w') or die("can't open write file");
?>

当我运行它时,我收到“无法打开写入文件”的错误消息。我认为这应该与权限有关。我已将自己(arman)设置为/Library/WebServer/Documents/的所有者,并具有读写权限,并“应用于包含的项目”。我的脚本和我正在写入的文件(examples-output.txt)位于/Library/WebServer/Documents/wabun/中。以下是/Library/WebServer/Documents/wabun/中文件的权限:
-rw-r--r--@ 1 arman  admin         0 May  1 01:03 examples-output.txt
-rw-r--r--@ 1 arman  staff      1657 May  1 01:04 updreading.php

我已经尝试了不同的权限设置,但是在过去的4个小时里一直无法解决这个问题。大家有什么想法来解决这个问题吗?谢谢!


var_dump(is_writable($outFile)); 的输出是什么? - Charles
@Charles:无意义的问题,一定是错误的... - Alix Axel
@Alix,只有当世界不疯狂时,它才会是错误的。我曾经看到PHP在尝试写入文件时失败,但当你询问它文件是否可写时,它却返回true。最后发现这是一个奇怪的SELinux问题,尽管这个特定的问题是关于OS X的。 - Charles
3个回答

8

我曾经也遇到了这个问题。我不得不确保所有父级文件夹的权限都正确。例如,如果(在OSX中)尝试写入目录 ~/foo/bar/baz,我用命令 chmod -R 777 ~/foo 解决了这个问题。


1

我猜问题在于你的 Web 服务器或 PHP 实例没有在同一个用户 (arman) 下运行,你可以使用 get_current_user() 函数来检查这一点。你可以配置 Apache 以你的权限运行(在 ServerFault 上询问),或者给文件夹更宽松的权限,例如 0777

另外,你确定 $outFile 映射到了一个 绝对路径 吗?试试这样做:

var_dump(is_file($outfile));

0

你需要将 Apache(假设你使用的是 Apache 服务器)设置为所有者,或者将其放入组中(并赋予该组写入权限),或者授予所有人写入权限等。换句话说,Apache 实际上是执行脚本的人,而不是你本人。


你能测试并解释如何完成这个操作吗?假设你正在使用Apache服务器,你需要将其设置为所有者或加入组(并授予该组写入访问权限)。如果你能提供帮助,那将非常有帮助! - Paul Mason
chmod 用于更改文件的读/写/执行权限,chown 用于更改文件的所有者,chgrp 用于更改文件的组。最简单(也是最不安全)的解决方法是对所有相关文件使用 chmod 777 [目标文件/目录] 命令。这将为所有所有者/组提供读/写/执行权限。还有更安全的方法,但这取决于设置/需求。例如,可以使用 chown 将所有者更改为 apache。或者创建一个包含 apache 的组,并使用 chgrp 更改组(可能还需要使用 chmod 更改用户和/或组权限,具体取决于您的操作)。OP 中当前的权限仅显示所有者的读/写权限。 - CrayonViolent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接