2009-05-30 94 views
2

我已经使用了几个脚本开始在我的开发机器上上传文件。问题是,尽管此操作有预期的缓解,但每当我尝试上载映像时,Apache似乎都会超时。上传设置为Ontmp目录设置为php.iniPHP上传问题

我尝试上传谷歌的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..." 
    } 
} ?> 

感谢, 丹

编辑:

我固定它,以帮助从几个答案,对其中之一,我会庆祝。

这里有几件事导致了这种行为。在images目录

  1. 权限未设置为允许用户_www访问它。 A chmod -R 777 images似乎修复它,以及sudo chown _www images

  2. 表单输出可能已经破坏了PHP脚本本身。正如所暗示的那样,ECHO <<< ...END帮助,我想。

+0

尝试使用小图片进行测试,以便确定是由于文件大小还是代码和/或配置的问题。发布你的结果。 – 2009-05-30 04:56:56

+0

我使用Google徽标进行了测试。仍然是一个不行。 – 2009-05-30 14:45:09

回答

2

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

对混沌的评论: 他是正确的代字号(〜)可能会导致问题,但可能不会导致超时;它会显示一个警告。即使它在你的系统上工作,它也可能将文件存入一个意想不到的目录,或者如果Apache用户(即www)没有有效的主目录集,就会遇到一些问题。

2

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

upload_max_filesize = 500M ; 
post_max_size = 500M ; 
+0

这不是,我尝试上传一个非常小的(`8.36KB`)文件,40分钟后,还是什么都没有。 – 2009-05-30 14:41:19

3

是什么导致你相信,阿帕奇已超时,而不是说,以某种方式彻底失败?因为跳到我身上的是你试图将文件移动到~/file.jpg,我几乎肯定不会工作; ~是一个通常只在shell中有意义的构造,除非PHP的一些奇特的晦涩特性正在像这样的上下文中处理它。无论如何,尝试把实际的目录。

+0

不知道,除了请求需要FOREVER完成。事实上,它并没有完成。最后一次尝试并停止它已经过了几分钟。 Apache中没有记录有关此操作的记录。 – 2009-05-30 14:22:25

2

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

ini_set(max_execution_time, 90); 

第二个参数表示页面超时之前的秒数。将它设置为任何你认为合适的时间。另外,混沌是正确的,因为'〜'是一种通常仅在壳内具有意义的构造。

回复: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..."; 
    } 
} ?> 
+0

即使设置了超时,Safari仍然表示正在加载页面。这是在我脚本顶部的提示行。 – 2009-05-30 14:46:14