繁体   English   中英

PHP Uploader,无法上传到指定路径,出现错误

[英]PHP Uploader, can't upload to specified path, getting error

我对PHP编码相当陌生,但是我正在尝试做一些非常简单的事情。 当我网站上的某人上传图片时,该图片将被重命名为随机数并移至我的目录“ uploads /”

在下面的脚本中,一切工作直到:

// Upload the file to your specified path.

if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_path . $filename))
    echo "Your file has been added. Redirecting in 3 seconds."; //it worked
else
    echo "There was a problem uploading your file. Please try again later."; // It failed :(.

我已经定义了所有变量。 不知道这里出了什么问题。 我应该为上传者发布整个脚本吗?

形式如下:

<form enctype="multipart/form-data" action="uploader.php" method="POST">
<p>
<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
Choose a file to upload:
<br>(Only .jpg, .png, & .gif are allowed. Max file size = 1MB)</br></p>
<input name="uploadedfile" type="file" />
<input type="submit" value="Upload File" />
</form>

这是我的“ uploader.php”

<?php
header('Refresh: 3; URL=index.html');
$path = $_FILES['uploadedfile']['name'];
$ext = pathinfo($path, PATHINFO_EXTENSION);

//This line assigns a random number to a variable. You could also use a timestamp here if you prefer. 
$ran = rand () ;

//This takes the random number (or timestamp) you generated and adds a . on the end, so    it is ready of the file extension to be appended.
$ran2 = $ran.".";

//This assigns the subdirectory you want to save into... make sure it exists!
$target = "uploads/";
//This combines the directory, the random file name, and the extension
$target = $target . $ran2.$ext;

$ext = ".".$ext;

$upload_path = "uploads/";

$filename = $target;

$allowed_filetypes = array('.jpeg','.jpg','.gif','.bmp','.png'); // These will be the  types of file that will pass the validation.
  $max_filesize = 1048576; // Maximum filesize in BYTES (currently 0.5MB).

$filename = $_FILES['userfile']['name']; // Get the name of the file (including file extension).

// Check if the filetype is allowed, if not DIE and inform the user.
if(!in_array($ext,$allowed_filetypes))
  die('The file you attempted to upload is not allowed.'.$ext);

// Now check the filesize, if it is too large then DIE and inform the user.
if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
  die('The file you attempted to upload is too large.');

// Check if we can upload to the specified path, if not DIE and inform the user.
if(!is_writable($upload_path))
  die('You cannot upload to the specified directory, please CHMOD it to 777.');

// Upload the file to your specified path.
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_path . $filename))
echo "Your file has been added. Redirecting in 3 seconds."; //it worked
else
echo "There was a problem uploading your file. Please try again later."; // It failed :(.

?>

您将$filename重置$filename的原始名称,撤消了所有随机名称的生成:

$filename = $target;

$allowed_filetypes = array('.jpeg','.jpg','.gif','.bmp','.png'); // These will be the  types of file that will pass the validation.
  $max_filesize = 1048576; // Maximum filesize in BYTES (currently 0.5MB).

// this line circumvents the random filename generation
$filename = $_FILES['userfile']['name']; // Get the name of the file (including file extension).

鉴于此,如果您两次上传相同名称的文件,我希望看到上述错误。 只需摆脱最后的$filename = ....行,看看您的错误是否消失了。

您尝试将$_FILES['userfile']['tmp_name']移至另一个目标,但是您的文件似乎存储在$_FILES['uploadedfile']['tmp_name'] (因为uploadfile是输入文件的名称形式,然后在脚本开始时正确检查它)。

另外,我强烈建议分配所有变量并在一个地方使用/修改它们,否则,您将很容易遇到如此简单的错误,这些错误很难追查。

这是我重新编写PHP代码的方式,我认为这更加清楚:

<?php
header('Refresh: 3; URL=index.html');

//check if file uploaded correctly to server
if ($_FILES['uploadedfile']['error'] != UPLOAD_ERR_OK) 
   die('Some error occurred on file upload');

$filename = $_FILES['uploadedfile']['name'];
$uploadedFile = $_FILES['uploadedfile']['tmp_name'];
$ext = '.' . pathinfo($filename , PATHINFO_EXTENSION);
$upload_path = "uploads/";

//prepare random filename
do {
   $newName = md5(rand().rand().rand().microtime()) . $ext;
} while (file_exists($upload_path . $newName));

$allowed_filetypes = array('.jpeg','.jpg','.gif','.bmp','.png'); // These will be the  types of file that will pass the validation.
  $max_filesize = 1048576; // Maximum filesize in BYTES (currently 0.5MB).

// Check if the filetype is allowed, if not DIE and inform the user.
if(!in_array($ext,$allowed_filetypes))
  die('The file you attempted to upload is not allowed.'.$ext);

// Now check the filesize, if it is too large then DIE and inform the user.
if(filesize($uploadedFile) > $max_filesize)
  die('The file you attempted to upload is too large.');

// Check if we can upload to the specified path, if not DIE and inform the user.
if(!is_writable($upload_path))
  die('You cannot upload to the specified directory, please CHMOD it to 777.');

// Upload the file to your specified path.
if(move_uploaded_file($uploadedFile, $upload_path . $newName))
   echo "Your file has been added. Redirecting in 3 seconds."; //it worked
else
   echo "There was a problem uploading your file. Please try again later."; // It failed 

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM