【问题标题】:PHP move_uploaded_file not working into public serverPHP move_uploaded_file 无法进入公共服务器
【发布时间】:2012-03-24 04:07:10
【问题描述】:

我正在尝试将我的 php 项目上传到公共服务器。 我在创建产品或编辑产品时制作了图像上传文件。 它在本地主机中工作,但是当我移动到公共服务器时,它不起作用。 我认为 move_uploaded_file 部分不起作用。 如何更改链接?还是我必须改变什么? 当我看到 Filzilla 时,我可以看到远程站点是“/www/eshopProject/inventory_images”。 索引文件是“/www/eshopProject/storeAdmin”。 我必须像这样更改链接吗? 不知道怎么改链接。 你可以帮帮我吗?将图像上传到公共服务器不起作用.. 有什么安全问题吗?或者其他的东西? 请帮我。谢谢。

--index.php--

$pid = mysql_insert_id();
//Place image in the folder
$newname = "$pid.jpg";
move_uploaded_file($_FILES['fileField']['tmp_name'], "../inventory_images/product_$newname");

【问题讨论】:

  • 文件夹的权限是什么?
  • ... 必须是 777 或更少,具体取决于用户
  • 几乎可以肯定完整路径不是“/www/eshopProject/inventory_images”,但是您使用的是相对路径,如果您以相同的方式运行脚本应该没问题..启用错误报告看看有什么问题.. 这可能是由很多原因引起的,例如:写入权限、文件大小的服务器限制、该服务器上禁用的上传等等

标签: php image upload


【解决方案1】:

首先检查 cmets 中提到的目录的权限。 如果你有 shell 访问权限,“chmod 777 target_dir”或“chmod 707 target_dir”就足够了。

第二次尝试使用 if 和 file_exists 函数(http://php.net/manual/en/function.file-exists.php)对其进行调试。

类似的东西。

$uploadedFile = $_FILES['fileField']['tmp_name'];
$destination = "../inventory_images/product_$newname";

if(file_exists($uploadedFile))
{
   echo "file uploaded to temp dir";
}
else
{
   echo "file upload failed";
   exit();
}

if(move_uploaded_file($uploadedFile, $destination))
{
   echo "upload complete";
}
else
{
   echo "move_uploaded_file failed";
   exit();
}

您还可以使用 FILEDIR 常量 (http://php.net/manual/en/language.constants.predefined.php) 检查您当前的工作目录。

试试这个。

echo __FILE__;
echo dirname(__FILE__);
echo __DIR__;

【讨论】:

  • 哦。我将此文件夹的权限更改为777,它可以工作。谢谢!
【解决方案2】:

确保您也为尝试上传的文件夹设置了写入文件权限。

【讨论】:

    【解决方案3】:

    我建议将文件夹设置为“755”权限并重试。这将使权限更严格。

    【讨论】:

      【解决方案4】:

      使用copy() 方法。对我来说它有效。

      copy($tmp_file, Destination) or
      copy($tmp_image, IMAGE_DIRECTORY . SAM . $product_image); 
      

      【讨论】:

        【解决方案5】:

        这个问题有点老了,但我最近遇到了一个类似的问题,即使上传文件夹的权限为 777,它也不起作用。 问题是 SELinux (https://wiki.centos.org/HowTos/SELinux) 处于强制模式,所以我不得不将其更改为许可模式,然后上传工作完美。 我希望这可以帮助面临这个问题的人。

        【讨论】:

        • 当然,正确配置 SELinux 比禁用它更好(“许可模式”)。它的存在是有原因的(在您的服务器上强制执行安全性)。例如,可以为所有 /upload/ 目录及其内容添加 httpd_sys_rw_content_t 上下文:semanage fcontext -a -t httpd_sys_rw_content_t "/home/([^/]+)/([^/]+)/upload(/.*)?"
        猜你喜欢
        • 1970-01-01
        • 2020-01-18
        • 2022-01-25
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 2011-06-28
        • 1970-01-01
        相关资源
        最近更新 更多