【发布时间】:2016-02-24 08:01:22
【问题描述】:
我正在尝试使用 PHP 制作一个简单的文件上传表单。这是我的代码:
<?php
$uploads_dir = '/uploads';
if(isset($_FILES['thefile'])){
$errors= array();
$file_name = $_FILES['thefile']['name'];
$file_size =$_FILES['thefile']['size'];
$file_tmp =$_FILES['thefile']['tmp_name'];
$file_type=$_FILES['thefile']['type'];
$tmp_name = $_FILES['thefile']["tmp_name"];
if($file_size > 2097152){
$errors[]='File size must be less than 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($tmp_name, "$uploads_dir/$file_name");
echo "Success";
}
else{
print_r($errors);
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Simple File Upload</title>
</head>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="thefile" />
<input type="submit"/>
</form>
</body>
</html>
我意识到我并没有限制文件类型,但是一旦我可以上传简单的 .jpg 或 .zip 文件,我会担心这一点。使用上面的代码,我转到位于
的本地服务器上的页面C:\wamp\www\simpleupload (this contains index.php, the file posted above)
当我选择一个小图像文件并单击提交时,我会看到以下错误:
警告:move_uploaded_file(/uploads/session_timeout_formatting_bug.png):无法打开流:第 18 行的 C:\wamp\www\project_fileshare\index.php 中没有这样的文件或目录
和
警告:move_uploaded_file(): Unable to move 'C:\wamp\tmp\phpEFDE.tmp' to '/uploads/session_timeout_formatting_bug.png' in C:\wamp\www\project_fileshare\index.php on line 18
第 18 行是调用 move_uploaded_file() 函数的行。
如何解决此错误?我有一个“uploads_dir”文件夹,位于与我的 index.php 文件相同的文件夹中。 (参考上面的文件路径)。我在这里做错了什么?我一定是误解了这个过程的一小部分,把我的目录放在了错误的地方,或者我在代码中做错了什么。
有人能发现我的错误并告诉我需要做什么来解决它吗?
【问题讨论】:
-
尝试完整的系统路径
/var/usr/public/uploads或相对路径../uploads。另外请确保如果该文件夹确实存在,则具有适当的写入权限。 -
仅供参考,第一个 if 语句在那里没有做任何事情,您不会以这种方式验证文件。 google for is_upload_ok.. 类似的东西...我不记得了,但我知道那条线在那里没有做任何事情
-
并且还从 DIR__ 中获取根目录,这将很容易找到文件的根目录
标签: php html forms file file-upload