错误通过PHP上传文件

时间:2011-03-05 09:20:38

标签: php

我正在使用此脚本上传文件。自从我第一次尝试以来,我没有对文件类型进行任何检查。我正在使用Ubuntu并在php.ini文件中将文件上传设置为'on'。但我仍然无法上传文件。

<?php
if(isset($_POST['send']))
{
$uploaddir = "/home/harbhag/Desktop/";
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo $uploadfile;

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

}
?>

<html>
<form enctype="multipart/form-data" action="upload.php" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="hidden" name="send" value="send" />
    <input type="submit" value="Send File" />
</form>
</html>

2 个答案:

答案 0 :(得分:4)

您应该使用$uploaddire$uploadfile两个变量来为文件创建有效路径。

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$uploadfile)) {

还要注意要点

  1. 目标目录应具有写入权限
  2. 要上传的文件大小必须符合php的upload_max_filesize(默认值为2MB)限制

答案 1 :(得分:1)

使用move_uploaded_file时要格外小心。它不会在partitios之间移动文件,而hostng公司可能会将你的上传临时目录放在你的php文件的其他地方。

使用它是一个更安全的选择:

$tempname = $_FILES['userfile']['tmp_name'];
if (is_uploaded_file($tempname)) {
    copy($tempname, $uploadfile);
}