2012-08-15 46 views
1

麻烦移动图片我想设置一些图片处理为我创建的网页,但我无法得到move_uploaded_file()正常工作...我不断收到这些错误:与move_uploaded_file()

Warning: move_uploaded_file(/htdocs/PHP/Pictures/picture.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /opt/lampp/htdocs/PHP/useredit.php on line 17 

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpY0KKxH' to '/htdocs/PHP/Pictures/picture.jpg' in /opt/lampp/htdocs/PHP/useredit.php on line 17 

我的代码如下所示:

if(isset($_FILES['image_file'])) 
{ 
    $img_tmp_name = $_FILES['image_file']['name']; 
    $img_dir = "/htdocs/PHP/Pictures/"; 
    $img_name = $img_dir . $img_tmp_name; 
    if(move_uploaded_file($_FILES['image_file']['tmp_name'],$img_name)) 
    { 
     list($width,$height,$type,$attr) = getimagesize($img_name); 
     switch($type) 
     { 
      case 1: 
       $ext = ".gif"; 
       break; 
      case 2: 
       $ext = ".jpg"; 
       break; 
      case 3: 
       $ext = ".png"; 
       break; 
      default: 
       echo "Image format not accepted"; 
     } 
     $query = "UPDATE profile_pic SET img_path=$img_name WHERE uid='$uid'"; 
     $img_id = mysql_insert_id(); 
     $new_img_name = $img_dir . $img_id . $ext; 
     rename($img_name, $new_img_name); 
    } 
} 
if(mysql_query($query)or die('Error: ' . mysql_error())) 
{ 
    header("Refresh:0; url='control.php'"); 
} 

文件夹PHP /图片存在。我该如何解决?

+1

我怀疑'htdocs'是*根级别*文件夹。将该路径更改为相对于此脚本的目录。 – DCoder 2012-08-15 18:38:53

+0

是的,像DCoder说的修复$ img_dir =“/ htdocs/PHP /图片/”;/htdocs应该在根级 – Skatox 2012-08-15 18:41:02

+0

因此,如果lampp /同时包含tmp /和htdocs /我应该将目录更改为“../htdocs/PHP/Pictures”? – Psyberion 2012-08-15 19:19:15

回答

0

你已经有了这个代码的一些重大的安全和后勤方面的问题:

a)你不检查,如果上传成功,并继续执行,如果有。上传成功的方法有很多,失败的原因有很多。

if ($_FILES['image_file']['error'] !== UPLOAD_ERR_OK) { 
    die("Upload failed with error code {$_FILES['image_file']['error']}"); 
} 

b)您正在使用用户在路径中提供的文件名来保存在您的服务器上。恶意用户可以将路径数据嵌入到该文件名中,并指定他们想要的服务器上的任何位置。例如

$_FILES['image_file']['name'] = '../../../../../../etc/passwd'; 
+0

感谢您为我提供上传错误的信息,包括您的代码。至于文件名的安全风险,我很清楚这一点,我很快就会解决这个问题,但我一次只想做一件事。另外,我现在只是在本地服务器上。 – Psyberion 2012-08-15 19:12:23

0

$ img_dir应该包含一个相对于你当前文件而不是根文件夹的路径。

如果当前目录包含upload_file.php(我们的代码)和文件夹层次结构喜欢你的服务器上的PHP /图片/

然后$img_dir="/PHP/Pictures/";