php fopen 无法打开文件以在 Mac OS X 中写入
Posted
技术标签:
【中文标题】php fopen 无法打开文件以在 Mac OS X 中写入【英文标题】:php fopen fails to open a file for writing in Mac OS X 【发布时间】:2011-08-16 08:12:28 【问题描述】:我正在笔记本电脑上本地运行 php 脚本 updreading.php(使用 Mac OS X 10.6.7)。 这是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:不必要的问题,一定是假的......
@Alix,只有在这个世界不疯狂的情况下,它才会是假的。我见过 PHP 无法打开文件进行写入,但当您询问文件是否可写时返回 true。它最终变成了一些奇怪的 SELinux 问题,尽管这个特殊问题是关于 OS X 的。
【参考方案1】:
您需要将 apache(假设 apache 是您正在使用的服务器)设为所有者或放入组(并授予组写入权限)或授予 all 或等等的写入权限。IOW apache 是实际执行脚本的那个,不是你。
【讨论】:
你能测试并解释如何做到这一点“你需要让apache(假设apache是你正在使用的服务器)所有者或放入组(并给予组写入权限)” 这将非常有帮助!chmod
更改文件的读/写/执行权限,chown
更改文件所有者,chgrp
更改文件组。 最简单的(也是最不安全的)修复方法是chmod 777 [target file/dir]
所有有问题的文件。这将为所有所有者/组提供读/写/执行权限。有更安全的方法,但这取决于设置/需要。但有些前:chown
将所有者更改为 apache。或者创建一个包含 apache 的组并使用 chgrp
更改组(可能还需要 o chmod
来更改用户和/或组权限,具体取决于您的操作。OP 中的当前权限仅显示读/写所有者)【参考方案2】:
我敢打赌,问题是您的网络服务器或 PHP 实例未在同一用户 (arman
) 下运行,您可以使用 get_current_user()
函数进行检查。您可以将 apache 配置为使用您的权限运行(在 ServerFault 中询问)或授予文件夹更多的权限,例如 0777
。
另外,你确定$outFile
映射到一个绝对 路径吗?尝试做:
var_dump(is_file($outfile));
【讨论】:
【参考方案3】:我遇到了同样的问题。我还必须确保所有 parent 文件夹的权限都是正确的。例如,如果(在 OSX 中)试图写入目录
~/foo/bar/baz
,我用命令chmod -R 777 ~/foo
解决了。
【讨论】:
以上是关于php fopen 无法打开文件以在 Mac OS X 中写入的主要内容,如果未能解决你的问题,请参考以下文章
function.fopen:无法打开流:PHP 中的权限被拒绝
PHP的datelog localhost在mac权限被拒绝
无法使用模式 r 打开:fopen():AWS Elastic Beanstalk
install_name_tool 更新可执行文件以在 Mac OS X 中搜索 dylib