这里发生了什么?我有一个表格可以正常地用于较小的文件,但是当我尝试上传更大的文件时,表单就会失败。我不知道这个大小限制是什么,但它肯定不适用于40MB文件。
普通文件返回错误0,表示他们已成功上传,但是对于大文件,我甚至不会收到错误。好像表单中没有任何内容通过,并且包含表单中每个其他输入的值。关于大型文件的某些内容可以完全阻止表单中的任何内容。
我已经通过我的php.ini来确保upload_max_filesize和post_max_size值足够高,它们是(每个200M)。由于此服务器是本地服务器,我测试的文件已上传'瞬间,但我也确保max_execution_time也足够高(1200)。
表单使用POST,enctype是multipart / form-data,我已经尝试使用只有文件输入和提交按钮的表单。
这是上传代码(即表单重定向到的操作页面中的代码):
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/resources/recaptchalib.php');
$privatekey = "abc123";
$resp = recaptcha_check_answer($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
echo "<h1>" . $content['UploadError'] . "</h1>"
. $content['UploadCaptcha'] . "<br><br>"
. $content['UploadReturn'];
} else {
$name = $_POST['name'];
$email = $_POST['email'];
if (empty($name)) {
echo "<h1>" . $content['UploadError'] . "</h1>" .
$content['UploadName'] . "<br><br>" .
$content['UploadReturn'];
} elseif (empty($email)) {
echo "<h1>" . $content['UploadError'] . "</h1>"
. $content['UploadEmail'] . "<br><br>"
. $content['UploadReturn'];
} else {
$url = $_POST['url'];
$notes = $_POST['notes'];
$timedate = date('YmdHis');
$dbHandle = new PDO("mysql:host=localhost;dbname=upload;", "user", "pass",
array(PDO::ATTR_EMULATE_PREPARES => false));
$dbHandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $dbHandle->prepare("INSERT INTO `data` "
. "(approved,name,email,fileid,url,notes,timedate,viewcount) "
. "VALUES(?,?,?,?,?,?,?,?)");
$types = array(
'jpg', 'jpeg', 'gif', 'png',
'mp3', 'wma', 'wav', 'ogg', 'aac', 'flac',
'avi', 'wmv', 'mov', 'ogg', 'webm', 'mpg', 'mpeg', 'mp4'
);
$filechk = (isset($_FILES['file']) && !empty($_FILES['file']['name']));
$urlchk = (isset($url) && !empty($url));
if (!$filechk ^ $urlchk) {
echo "<h1>" . $content['UploadError'] . "</h1>"
. $content['UploadFileURL'] . "<br><br>"
. $content['UploadReturn'];
} elseif ($filechk) {
$filesize = (75 * 1024 * 1024);
$up_path = $_SERVER['DOCUMENT_ROOT'] . '/resources/uploads/';
$filename = $timedate . $_FILES['file']['name'];
$ex = explode(".", $filename);
$ext = strtolower(end($ex));
if (file_exists($up_path . $filename)) {
$filename = $timedate . 'Duplicate.' . $ext;
}
if (!in_array($ext, $types)) {
echo "<h1>" . $content['UploadError'] . "</h1>"
. $content['UploadFileType'] . "<br><br>"
. $content['UploadReturn'];
} elseif (filesize($_FILES['file']['tmp_name']) > $filesize) {
echo "<h1>" . $content['UploadError'] . "</h1>"
. $content['UploadFileSize'] . ($filesize / 1024 / 1024) . " MB<br><br>"
. $content['UploadReturn'];
} elseif (!is_writable($up_path)) {
echo "<h1>" . $content['UploadError'] . "</h1>"
. $content['UploadWriteError'] . "<br><br>"
. $content['UploadReturn'];
} elseif (move_uploaded_file($_FILES['file']['tmp_name'], $up_path . $filename)) {
$fileid = $filename;
$url = null;
$query->execute(array('N', $name, $email, $fileid, $url, $notes, $timedate, '0'));
echo "<h1>" . $content['UploadSuccess'] . "</h1>"
. $content['UploadHomepage'];
} else {
echo "<h1>" . $content['UploadUnknownError'] . "</h1>"
. $content['UploadReturn'];
}
} else {
$fileid = null;
$query->execute(array('N', $name, $email, $fileid, $url, $notes, $timedate, '0'));
echo "<h1>" . $content['UploadSuccess'] . "</h1>"
. $content['UploadHomepage'];
}
}
}
?>
var_dump($ _ FILES)导致数组(0){}
所以我的php.ini看起来很好,我的代码似乎很好(因为我可以上传较小的文件)...我在这里缺少什么?
答案 0 :(得分:2)
检查php.ini中的限制,有多个设置要查找 -
upload_max_filesize = 64M
post_max_size = 64M
确保重启apache以使设置更改生效。
答案 1 :(得分:0)
您是否更改了脚本可以运行的时间限制?处理大图像可能需要一段时间,如果最大时间限制未从默认值(通常为30秒)更改,则脚本可能会超时。您可以使用:
ini_set('max_execution_time', [seconds]);
其中seconds是停止脚本之前等待的最大秒数。
对不起,刚刚注意到你已经完成了这件事。
error_log
中有什么内容吗?