我在PHP中遇到mkdir
的一些权限问题。我试图简单地移动一些文件(并创建一个文件夹将它们放入),但我收到此错误:
mkdir() [function.mkdir]: Permission denied in
在我的旧网站上,我将文件夹设置为755,事情似乎工作正常。它似乎就像我唯一可以获得mkdir
或相关功能在这个服务器上运行的时候文件夹中有777作为模式。
网络浏览器是否被视为“其他”?我不想在777离开我的文件夹是个好主意,对吗?
答案 0 :(得分:1)
Web浏览器不是被视为“其他”的对象,而是运行Web服务器的用户,例如httpd
或apache
。
一种常见的方法是选择文件以将用户和/或组设置为Web服务器用户,从而允许诸如755之类的权限。
示例:
chown apache:apache ./example/
答案 1 :(得分:1)
这可能适用也可能不适用,具体取决于您运行Web服务器的操作系统,您可能有其他安全机制干扰您尝试执行的操作。一个明显的例子(一时困扰我)是SELinux安全系统。试着看看你是否可以写入/ tmp。如果你不能寻找其他问题。作为一般规则,爆破777权限可能导致安全漏洞。
答案 2 :(得分:1)
如果您需要在服务器上创建可以从Web浏览器写入的文件夹,则可能需要使用至少775.请注意,创建文件的情况不一定如此。实际上,您可能根本不希望您的文件是777。
如果您希望避免让您的服务器(也就是www-data)创建目录,您仍然可以在php代码中使用bash命令,但是您仍然需要在文件夹上放置正确的权限以允许www-data然后将文件写入目录。
检查您的所有权。以上内容基于由www-data拥有的某个用户和组所拥有的文件夹。您还可以尝试将文件夹所有权设置为www-data,但该特定用户的权限仍然是rwx。
我希望这不是一个令人费解的方法。
可以帮助您找出服务器上运行apache的命令:
#top
寻找类似的东西:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20610 www-data 20 0 36772 10m 4380 S 4 0.1 0:04.03 apache2
或
#ps aux | grep "apache"
寻找像
这样的东西www-data 26898 0.0 0.0 34248 4076 ? S 17:59 0:00 /usr/sbin/apache2 -k start
答案 3 :(得分:0)
你确定问题不在于文件夹所有权吗?
也许chown是解决这个问题的正确命令