2
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)
}

这将在我的上传目录中创建一个新目录,如果我将 putty 放到服务器上并执行 ls -la,则该目录已创建并具有权限/所有权:

drwxr-xr-x 阿帕奇阿帕奇

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

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

好的,所以我知道错误是如何发生的 - 新文件夹的创建者和组设置为“apache”(我猜是用户 48),用户“root”无法访问它(用户 0 是 root , 正确的?)。而且我想安全模式也阻止了我将目录创建为 777,并以其无限的智慧决定不按照我的要求去做。

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

4

1 回答 1

0

根据 PHP 文档:

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

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

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

于 2012-03-12T17:58:22.703 回答