PHP正在创建一个无法写入的目录

时间:2012-03-12 17:51:30

标签: php apache upload permissions safe-mode

if ( !is_writable( $save_path ) ){
    mkdir( $save_path, 0777, true );
}
$uploadfile = $save_path . basename($_FILES[$form_field_name]['name']);
if ( is_writable( $save_path ) ){
    move_uploaded_file($_FILES[$form_field_name]['tmp_name'], $uploadfile)
}

这将在我的uploads目录中创建一个新的目录,如果我把putty放到服务器上并执行ls -la,那么dir已经创建了权限/所有权:

  

drwxr-xr-x apache apache

大。但是将上传的文件移动到新的目录中会失败:

  

安全模式限制有效。 uid为0的脚本不是   允许访问   /var/www/vhosts/domain.com/httpdocs/media/uploads/DE   由uid 48拥有

好的,我知道错误发生了 - 新的文件夹创建时所有者和组设置为“apache”(我猜是用户48),用户“root”无法访问它(用户) 0是root,对吗?)。而且我认为安全模式也阻止我创建d77作为777,并决定以其无限的智慧不做我要求的。

但是......我的PHP脚本如何创建目录为“apache”,并尝试以root身份将内容移入其中?如何在不使用斧头进入安全模式的情况下绕过它?

1 个答案:

答案 0 :(得分:0)

根据PHP文档:

http://php.net/manual/en/function.mkdir.php

  

注意:启用安全模式后,PHP会检查脚本运行的目录是否与正在执行的脚本具有相同的UID(所有者)。

为什么不检查以确保您的东西在正确的用户下运行。在我看来,鉴于您的错误,您的PHP脚本在不同的用户下运行。 (注意:apache倾向于以root身份运行)