【问题标题】:Upload a photo PHP上传照片 PHP
【发布时间】:2011-06-04 08:37:37
【问题描述】:

发生了最奇怪的事情...我用 PHP 创建了一个网上商店。一切正常,但是当我们将网站从我们的 ftp 转移到他们的网站时,我们遇到了问题。我们不能再上传图片了...

        if (file_exists("../productimages/" . $_FILES["picture"]["name"]))
    {
        $feedback = "<div class=\"voegproducttoefeedback\">Please change name of product<b><big> \"".$_FILES["picture"]["name"] . "\"
        </big></b>The name already occurs in the database</div> ";
    } else
        {

        $tmp_name = $_FILES["picture"]["tmp_name"];
        $name = $_FILES["picture"]["name"];
        move_uploaded_file($tmp_name, "../productimages/$name");


        if(file_exists("../productimages/$name")) {
         $feedback2 = "succeed";
        }
        else {
                $feedback2 = "failed";
        }

     if ($product->saveproduct($_DB)) {
        $feedback = "<div class=\"voegproducttoefeedback\">Product <b><big>\"".$product->naam."\"</big></b> created with succes</div>";
      } else {
        $feedback = "<div class=\"voegproducttoefeedback\">Not enough information to create product</div>";
      }
    }}}?>

【问题讨论】:

    标签: php upload photo


    【解决方案1】:

    尝试更改目标目录权限 (../productimages/)

    【讨论】:

    • 也许 Michiel 甚至无法访问另一台服务器上的 ../
    • 另外,请确保该目录存在于该相对位置。
    • 对 productimages 和根 (httpdocs) 的权利是 775。我希望已经足够了 :) @Phoenix,你是什么意思?
    • 确保目录结构相同。如果../productimages 相对于脚本的工作目录不存在,那么它就无法在那里生成图像。因此,如果有一个目录/html(web 根)、/html/script 和一个目录/html/productimages,那么如果脚本在/html/script 中运行,它将起作用,因为它会返回到/html,然后直到/productimages,但是,如果脚本是通过/html 中的脚本包含的,那么这就是它的工作目录,它将进入/html 下面的目录,然后尝试在那里找到/productimages。跨度>
    • 要解决这个问题,不要使用相对路径,而是使用绝对路径,例如 /home/user/public_html/productimages,这可以在文件中手动完成,也可以通过在某个位置设置的常量或变量配置文件包括$basepath = /home/user/public_html 然后move_uploaded_file($tmp_name, "$basepath/productimages/$name");file_exists($basepath . "/productimages/" . $_FILES["picture"]["name"]),或者可以使用$_SERVER['DOCUMENT_ROOT'] 超全局变量来完成。
    【解决方案2】:

    正如 Goo 所说,检查权限,但还要确保 PHP 配置为允许上传,并且最大上传大小设置正确。

    检查 file_uploads 是否设置为“on”,upload_max_filesize 是否设置为合理限制。

    【讨论】:

    • 但是同样的脚本在我的私人服务器上也能运行……只是在他们的服务器上不行……这正常吗?
    • 是的,这很常见 - 尽管脚本相同,但底层环境(PHP 和主机操作系统)可能不同。对于文件上传,您需要正确设置许多配置才能使其正常工作。甚至网络服务器的配置也可能不同,从而导致问题,但在您的实例中不太可能发生这种情况。
    • 好的,我试试看。提前致谢!
    • 我在哪里可以添加这个file_upload和upload_max_filesize? .htaccess?
    【解决方案3】:

    如果您可以访问它们,请检查您的 PHP 错误日志。

    您的主机很可能没有为负责 PHP 进程的帐户启用写入权限。你需要看看他们是否可以启用它。

    【讨论】:

    • 我如何访问它们?我可以访问服务器的根目录,但我想我刚刚收到了某种要上传到 ftp 的帐户。不是 root 访问权限本身
    • 取决于您的主机设置。您必须与他们取得联系,以了解他们为这些日志提供的访问权限(如果有)。
    【解决方案4】:

    好的,问题(部分)解决了。我更改了productimages的权限...但是该过程的成功需要777权限...虽然不是很安全。这是我的结构,也许你可以看到问题...

    以上脚本在products.php中

    http://img695.imageshack.us/i/schermafbeelding2011010kt.png/

    【讨论】:

      【解决方案5】:

      your own answer,你说:

      好的,问题(部分)解决了。我更改了productimages的权限... 但是这个过程的成功需要一个 777 的许可......虽然不是很安全

      解决此问题的最佳方法是将目录的所有权更改为运行网络服务器的用户。但是,这将需要对服务器(或 sudo 命令)的 root 访问权限,而您很可能没有。所以这里有一个解决方法:

      1. 重写您的脚本以检查productimages 是否存在,如果不存在,则创建它:

        if(!is_dir('../productimages/')) mkdir('../productimages/', 0755);

      2. 然后,删除productimages 目录。您将让脚本为您重新创建它。完成后,网络服务器的用户将拥有该脚本。

      3. 为了实现这一点,chmod 777 *父目录。 这只是暂时的,并允许脚本创建目录。

      4. 运行脚本。确保它创建了productimages 目录。如果是,chmod 755 返回父目录。

      这应该使您能够获得所需的权限并控制对目录的访问。

      【讨论】:

      • 听起来很有希望...但是由于某种原因,脚本无法运行...请您再写一点脚本吗?
      • 抱歉,mkdir('../productimages/'), 0755) 应该是 mkdir('../productimages/', 0755);
      猜你喜欢
      • 2017-02-18
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      相关资源
      最近更新 更多