鉴于:
function upload($file_id, $destination) {
$folder = "/uploads";
$types = "jpg, jpeg, gif, tiff, png";
if (! $_FILES [$file_id] ['name'])
return false;
$fileName = $_FILES [$file_id] ['name'];
if (! testExtensions ( $fileName, $types )) {
echo ("<p>FAILED TEST EXTENSIONS</p>");
return false;
}
$uniqer = substr ( md5 ( uniqid ( rand (), 1 ) ), 0, 5 );
$fileName = $uniqer . '_' . $fileName; // Get Unique Name
$path = getPath ( $destination ) . "/";
$uploadFile = $path . $fileName;
if (! move_uploaded_file ( $_FILES [$file_id]['tmp_name'], $uploadfile )) {
return false;
} else {
if (! $_FILES [$file_id] ['size']) { // Check if the file is made
@unlink ( $uploadfile ); // Delete the Empty file
$file_name = '';
return false;
} else {
chmod ( $uploadfile, 0777 ); // Make it universally writable.
}
}
return $file_name;
}
function getPath($destination) {
$path = getcwd ();
$pathParts = explode ( "/", $path );
array_pop ( $pathParts );
array_push ( $pathParts, $destination );
$path = implode ( "/", $pathParts );
return $path;
}
function testExtensions($fileName, $types) {
$extensions = split ( "\.", basename ( $fileName ) );
$extension = strtolower ( $extensions [count ( $extensions ) - 1] ); // Get the last extension
$all_types = explode ( ",", strtolower ( $types ) );
if ($types) {
if (! in_array ( $extension, $all_types ))
return false;
}
return true;
}
有没有办法测试为什么move_uploaded_file失败?我已经生成了一些跟踪输出以确保一切都有意义,但所有输出似乎都表明move_uploaded_file应该正常工作。但是,该函数始终返回false。
答案 0 :(得分:1)
只有可能的原因我知道 move_uploaded_file
失败是您文件的目的地。它可以是dir的权限,也可以不存在(除了语法错误)。
要解决此问题,您必须编辑目标目录的权限。最小特权原则适用。只为用户提供他们需要的权利,而不是更多。
在这种情况下,如果Apache仅提供页面,请为用户提供无权编辑的权限。可能存在的风险包括:更改文件内容或上传新内容;将可执行代码添加到文件等。无论是单个站点的倍数,这些风险都存在。如果应用程序需要编辑特定文件,请将权限更改限制为该文件。
[me@linuxbox me]$ chmod 600 some_file
理想情况下,您需要权限代码
766
- 文件的所有者可以读取,写入和执行该文件。但其他人只能读写。
但为了安全起见,您可以使用:
755
- 文件的所有者可以读取,写入和执行该文件。所有其他人都可以阅读并执行该文件。此设置适用于所有用户使用的程序..
<强>更新强>
您可以使用以下命令更改整个目录的权限:
find /opt/lampp/htdocs -type d -exec chmod 755 {} \;
假设该位置为/opt/lampp/htdocs
正如Barmar所引用的那样,如果文件已上传,您可以检查该文件的大小。我提到的修复是你自己移动文件的时候。