我有以下简单的脚本来测试PHP中的mkdir()函数:
<?php
$id = rand();
$targetPath = $_SERVER['DOCUMENT_ROOT'] . '/sample_folder/' . $id .'/';
mkdir(str_replace('//','/',$targetPath), 0755, true);
?>
理想情况下,每次在我的web目录/ sample_folder下运行脚本时,这将创建一个随机文件夹. Sample_folder具有755个权限.
我面临的问题是,我一直在运行PHP:mkdir()权限被拒绝的问题.我的sample_folder权限当前设置为chmod 755.
一切我读过的状态不是chmod到777所以请不要建议.
出于测试目的,chmod 777的’sample_folder’目录解决了这个问题,但这又引发了安全问题.关于如何使这项工作还有其他我想念的东西吗?
值得注意的是:我系统上的PHP用户是“apache”;
我在Media Temple专用虚拟服务器上运行PHP 5.3.*和CentOS 5.5以供参考.我还查看了几乎所有关于SO的chmod问题,似乎无法找到符合我的问题的解决方案(除了777个建议).
编辑
在我的服务器上运行ls -la返回:
drwxr-xr-x 2 ftphiddenname psacln 4096 Jan 26 11:24 sample_folder
最后更新
提供的答案非常有用.对于任何寻找其他信息的人,我都会看到这篇知识库文章,虽然它在Media Temple上列出,但我认为这些原则适用于任何最相似的配置:
(dv):Resolve Apache permission errors
解决方法:
原因是脚本需要在sample_folder中写入权限.
我不知道你的实际设置,但我猜你的脚本要么是在世界权限下运行,要么是组权限是5(读4执行1),因为你当前的权限是755(所有者为7,组为5) 5为世界).要将目录写入该文件夹,您的脚本将需要写访问权限.如果您有权访问chown目录,则可以比777更安全地设置它.我的建议是创建一个名为“webgroup”或类似组的组,并将您的webserver用户放入该组.然后,在设置完成后,给予组写权限(770)是合适的.如果您对权限的工作方式有点模糊,最终的设置将是:
sample_folder:由root,group webgroup,770权限拥有
添加正在运行的任何用户apache(或其他Web服务器)作为webgroup
编辑:
在初始帖子中提供了更多详细信息,这意味着您将向webgroup添加用户“apache”.如果您发现设置太困难,或者您没有在服务器上设置完全权限,那么使用其他地方建议的chown让apache拥有该目录也可以.
例如:chown apache sample_folder
这将使apache成为该文件夹的所有者,使其能够访问写入权限(假设它仍然是755)