2

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

我尝试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用户访问它。Achmod -R 777 images似乎修复了它,以及sudo chown _www images.

  2. 表单输出可能已经破坏了 PHP 脚本本身。正如建议的那样ECHO <<< ...END,我认为有帮助。

4

4 回答 4

3

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

于 2009-05-30T04:59:27.970 回答
2

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

upload_max_filesize = 500M ;
post_max_size = 500M ;
于 2009-05-30T04:58:44.770 回答
2

默认情况下,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...";
    } 
} ?>
于 2009-05-30T05:55:12.720 回答
2

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

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

于 2009-05-30T05:55:46.680 回答