【问题标题】:PHP Script is not Properly Uploading ImagesPHP 脚本未正确上传图像
【发布时间】:2012-08-07 21:15:45
【问题描述】:

我正在开发一个由用户维护的小型在线商店,并试图让我的最终用户(商店管理员)上传产品图形。但是,当我运行此脚本时,它实际上并没有存储图像。我根据此处的各种提示和教程构建了这个脚本,并且除了图片上传部分之外的所有内容都可以正常工作。

// Set the image target directory here
$target = "itemImages/";
$target = $target . basename($_FILES["image"]["name"]);

// Variables get POSTed here - just tack new ones on at the end.
// Various POSTs omitted for brevity

$pic=($_FILES["image"]["name"]);

// Places the picture in the folder
if(move_uploaded_file($_FILES["image"]['tmp_name'], "itemImages/")) 
{
echo "The file " . basename($_FILES['uploadedfile']["name"]) . " has been         uploaded.<br />";
}else {
    echo "There was an issue adding this item. Please try again.<br />";
}

// Writes variables to the database
mysql_query("INSERT INTO tbl_item   (itemNAME,itemDESC,itemCOST,itemHCOL,itemHSIZ,itemIMG)
VALUES ('$itemName','$itemDesc','$itemCost','$hasColor','$hasSize','$pic')");

mysql_close($con);
?>

非常感谢任何帮助、提示、建议、见解等。

【问题讨论】:

  • mysql更新成功消息OK了吗?
  • 您的form 标签上的enctype 是否正确?
  • 你能给我们看看
    标签吗?

标签: php mysql image upload


【解决方案1】:

确保 .php 文件和您正在写入的文件夹具有相同的“所有者”。或者尝试将 itemImages 文件夹的权限设置为 777(不建议这样做,只是一种调试策略)

【讨论】:

    【解决方案2】:

    move_uploaded_files 需要一个文件名作为其目标。它不会盲目移动到目录,所以

    move_uploaded_files($_FILES..., 'somedir/somefile.txt');
    

    有效,但是

    move_uploaded_file($_FILES..., 'somedir/');
    

    不会。

    另外,请注意您的数据库操作容易受到SQL injection attacks 的攻击。您盲目地插入了上传文件的远程名称(['name'] 通过 $pic),并且该名称完全在远程用户的控制之下。

    【讨论】:

    • 谢谢,在您的帮助下,我已经完成了这项工作。我也感谢您对 SQL 注入的意见,并将进行一些研究以纠正它。我并不太担心,因为整个事情都是公司员工内部的事情,但使用最佳实践总是好的。
    • 即使它是内部使用并且不太可能受到攻击,在某些时候有人会上传一个包含' 或其他 SQL 元字符的文件并将事情搞砸。
    • 不正确的转义是一个错误,如果出现安全漏洞,通常会导致您被解雇。
    【解决方案3】:

    确保 itemImages 文件夹具有您的网络服务器(例如Apache)运行的用户(例如www-data)的写入权限

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      相关资源
      最近更新 更多