【问题标题】:PHP Uploading IssuePHP 上传问题
【发布时间】:2010-10-30 01:33:45
【问题描述】:

我已经使用了一些脚本来开始在我的开发机器上上传文件。问题是,尽管此操作预期很容易,但每当我尝试上传图像时,Apache 似乎都会超时。上传设置为On,tmp目录设置为php.ini。

我尝试从 Google 上传主要的 gif,一个 8.36KB 图像。它应该很好,并且在 PHP 上传功能的限制范围内。

这是脚本的副本。应该有一个简单的解决方法。根据要求,我将波浪号更改为实际目录。

<?php 

if (!isset($_GET['upload'])) { ?>
  <form method="post" action="index.php?upload=true" enctype="multipart/form-data"> 
  <input type="file" name="file" class="form">
  <input name="submit" type="submit">
  </form>
<? } else  if (isset($_GET['upload']) && $_GET['upload'] == 'true') {
  $url = $_FILES['file']['name'];
    $move = move_uploaded_file($_FILES['file']['tmp_name'], "/Users/<username>/Sites/file.jpg");
    if ($move) {
        echo "Success!";
    } else { 
        echo "Err..."
    } 
} ?>

谢谢, 丹

编辑:

在一些答案的帮助下,我修复了它,我将标记其中一个。

这里有几件事导致了这种行为。

  1. images 目录的权限未设置为允许_www 用户访问它。 chmod -R 777 images 和 sudo chown _www images 似乎可以修复它。

  2. 表单输出可能损坏了 PHP 脚本本身。正如建议的那样,我认为ECHO &lt;&lt;&lt; ...END 有所帮助。

【问题讨论】:

  • 尝试使用小图像对其进行测试,以便我们确定是文件大小问题还是代码和/或配置问题。发布你的结果。
  • 我使用 Google 徽标进行了测试。还是不行。

标签: php file upload uploading


【解决方案1】:

是什么让您相信 Apache 正在超时,而不是说,以某种方式彻底失败?因为让我大吃一惊的是您正试图将文件移动到~/file.jpg,我几乎可以肯定这是行不通的; ~ 是一个通常只在 shell 中有意义的构造,除非 PHP 的一个怪异晦涩的特性是在这样的上下文中处理它。无论如何,尝试放置实际目录。

【讨论】:

  • 不知道,除了请求需要 FOREVER 才能完成。事实上,它并没有完成。我上次尝试并停止它已经有几分钟了。 Apache 中也没有记录有关此操作的日志。
【解决方案2】:

这很可能是文件大小问题和/或 Apache 用户与指定目录之间的权限问题。例如,确保 Apache 实例未在用户 (nobody) 下运行。

评论混乱: 他是对的,波浪号(~)可能会导致问题,但可能不会导致超时;它会显示警告。即使它确实可以在您的系统上运行,它也可能会将文件存放到意外的目录中,或者如果 Apache 用户(即 www)没有设置有效的主目录,则可能会遇到一些问题。

【讨论】:

  • 你是对的,images 目录设置了错误的权限。谢谢!
【解决方案3】:

如果问题是文件大小,请将以下几行添加到您的 php.ini 文件中,它应该可以工作:

upload_max_filesize = 500M ;
post_max_size = 500M ;

【讨论】:

  • 不是,我尝试在上面上传一个很小的(8.36KB)文件,40分钟后还是没有。
【解决方案4】:

默认情况下,PHP 在页面上有 30 秒的超时时间。因此,如果您的上传时间超过 30 秒,它将失败。在您的 php.ini 中设置超时或将以下代码放在文件顶部。

ini_set(max_execution_time, 90);

第二个参数表示页面超时之前的时间(以秒为单位)。将其设置为您认为合适的任何时间。此外,混乱是正确的,因为“~”是一个通常只在壳内有意义的结构。

回复:http://ca2.php.net/manual/en/ini.list.php

编辑: 问题是您在条件中间重新打开了标记。尝试您的代码时出现语法错误。奇怪的是,您能够看到任何 Web 表单。这是固定代码(对我有用)。

<?php 
if (!isset($_GET['upload'])) { 
ECHO <<<END
  <form method="post" action="index.php?upload=true" enctype="multipart/form-data"> 
  <input type="file" name="file" class="form">
  <input name="submit" type="submit">
  </form>
END;
 } else  if (isset($_GET['upload']) && $_GET['upload'] == 'true') {
    $url = $_FILES['file']['name'];
    $move = move_uploaded_file($_FILES['file']['tmp_name'], "/Users/<username>/Sites/file.jpg");
    if ($move) {
        echo "Success!";
    } else { 
        echo "Err...";
    } 
} ?>

【讨论】:

  • 即使设置了超时,Safari 仍然说页面正在加载。这是 with 您在我的脚本顶部建议的行。
猜你喜欢
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 2010-09-26
  • 2019-11-07
  • 2014-03-11
相关资源
最近更新 更多