PHP上传问题

时间:2009-05-30 04:48:52

标签: php file upload uploading

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

我尝试从Google上传主gif8.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 <<< ...END有所帮助。

4 个答案:

答案 0 :(得分:3)

是什么让你相信Apache正在超时,而不是说,在某种程度上彻底失败?因为跳出来的是你试图将文件移动到~/file.jpg,我几乎肯定不会这样做; ~是一个通常只有shell内部含义的构造,除非PHP的一个奇怪的模糊特征在这样的上下文中处理它。无论如何,请尝试放置实际目录。

答案 1 :(得分:2)

如果问题是文件大小,请将以下行添加到php.ini文件中,它应该有效:

upload_max_filesize = 500M ;
post_max_size = 500M ;

答案 2 :(得分:2)

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

ini_set(max_execution_time, 90);

第二个参数表示页面超时前的秒数。将其设置为您认为合适的任何时间。此外,混乱是正确的,因为'〜'是一个通常只在shell内部有意义的结构。

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

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

<?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...";
    } 
} ?>

答案 3 :(得分:2)

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

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