我们在公司使用Linux专用服务器。
每当我们使用php脚本创建一个文件夹时,apache都拥有该文件夹,每次我必须通过root连接到服务器才能将所有者更改为用户和权限
但我不知道为了解决这个问题我应该改变哪种设置。
我试图打开/关闭安全模式,但它不起作用。
如果有人能帮助我,我会很高兴
提前致谢
答案 0 :(得分:3)
您是否尝试过使用chown PHP command和chmod PHP command?
答案 1 :(得分:2)
有 2 方法:
chown()
您可以通过执行该功能来更改文件权限。
或者如果您能够使用FTP移动文件,则可以将文件拖到文档根目录(public_html/
)之外,然后右键单击 - >更改文件的文件权限。
CHMOD是你想要看的东西。 777
将为您的文件提供任何访问权限,您可以将其用作测试以确保您拥有文件权限。我建议不要在777
上保留权限。
答案 2 :(得分:1)
这是一个可移植性问题,取决于您的服务器配置(即mod_php或带SuExec的FCGI)。
您可以在创建文件后立即尝试使用chown
功能,但这只有在您知道实际所有者应该是谁时才会起作用(情况并非总是如此)。要解决此问题,I wrote a simple method试图找到最佳的文件模式,始终确保读取和写入(以及目录的执行),而不会给予过多的权限:
function xChmod($path, $chmod = null) // adapted from phunction
{
if (file_exists($path) === true)
{
if (is_null($chmod) === true)
{
$chmod = (is_dir($path) === true) ? 777 : 666;
if (extension_loaded('posix') === true)
{
$user = posix_getpwuid(posix_getuid());
if (array_key_exists('name', $user) === true)
{
$chmod -= (in_array($user['name'], explode('|', 'apache|httpd|nobody|system|webdaemon|www|www-data')) === true) ? 0 : 22;
}
}
}
return chmod($path, octdec(intval($chmod)));
}
return false;
}
基本上,如果省略第二个$chmod
参数,默认情况下它将使用0777
作为文件夹而0666
作为文件,但是,如果PHP是在非标准下运行的话用户,它会将模式减少22,对文件夹产生0755
,为文件产生0644
。请记住,这只适用于已存在的文件,因此如果您要创建目录you'll need to have additional precautions。