2012-01-03 70 views
0

我正在制作一个图片上传器,但我遇到了2个错误。它们是:PHP:上传问题

Warning: move_uploaded_file(upload/Corgi 007.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/stationr/public_html/admin/doupload.php on line 12 

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/chroot/tmp/phpMvRSbS' to 'upload/Corgi 007.jpg' in /home/stationr/public_html/admin/doupload.php on line 12 

当我调用move_uploaded_file()方法时发生错误。这里是我的代码(注意这没有错误检查什么,所以只有裸机上传)。

<?php 
error_reporting(E_ALL); 
error_reporting(-1); 
ini_set('error_reporting', E_ALL); 

$filename = $_FILES["file"]["name"]; 
$filesize = $_FILES["file"]["size"]; 

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/$filename"); 

?> 

回答

1

你没有检查如果上传成功可言:

if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { 
    move file ... 
} else { 
    die("Upload failed with error code " . $_FILES['file']['error']); 
} 

的错误代码记录在这里:http://www.php.net/manual/en/features.file-upload.errors.php

同时,有没有“上传”子目录无论脚本的当前工作目录是什么? Web服务器进程是否具有该目录的写入权限?

作为一个主要的安全漏洞,盲目使用上传的['name']参数作为目标文件名允许恶意用户在服务器上的任意文件上涂鸦。永远不要盲目使用该文件名。如果上传文件名是作为(比如说)../../../../../../etc/passwd提供的,那么你现在允许有人替换你的系统密码文件。

+0

呵呵,这是令人尴尬的..在我急匆匆地完全忘了给目标文件夹添加“../”。而且,我知道所有关于上传的安全方面(上传只能通过管理员登录访问,这也是安全的)。谢谢您的帮助。 – 2012-01-03 01:58:31

+0

不要默默无闻地与安全同行。如果有人设法破解/绕过登录,你仍然不应该向他们提供垃圾你的服务器的工具。让他们为获得的每一块土地而战。 – 2012-01-03 02:00:58