我已经使用一些脚本开始在我的开发机器上上传文件。问题是,尽管预期此操作很容易,但每当我尝试上传图像时,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..."
}
} ?>
谢谢, 丹
编辑:
我在一些答案的帮助下修复了它,其中一个我将标记。
这里有一些事情导致了这种行为。
images
目录的权限未设置为允许_www
用户访问它。 chmod -R 777 images
似乎解决了这个问题,以及sudo chown _www images
。
表单输出可能破坏了PHP脚本本身。正如所建议的,我认为ECHO <<< ...END
有所帮助。
答案 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)没有设置有效的主目录,则会遇到一些问题。