gpt4 book ai didi

php - 文件上传表单不适用于大文件

转载 作者:行者123 更新时间:2023-12-04 20:53:19 25 4
gpt4 key购买 nike

我有一个非常标准的上传表单。一些文本输入、一个文件上传输入、一个 reCAPTCHA 和一个提交按钮。

正常使用下,上传一个小文件就可以了。表单数据被重定向到 action 属性中的页面,并且在处理上传的 PHP 和 SQL 中完成了一些事情。

但是,当尝试上传 40 MB 的文件时,它根本不起作用。起初,我以为是验证码问题,因为它让我无法输入正确的单词。禁用验证码后,我发现定义我所有 $_POST['input'] 的变量都没有被传递。我会收到 PHP 错误,例如:

Notice: Undefined index: name in /var/www/upload.php on line 18

第18行是$name=$_POST['name'];

对于表单中的每个输入,我都会得到其中一个。

这告诉我没有设置 POST,因为表单在发送大文件时不工作,所以我的问题很简单......为什么?当然,解决方案是什么?

编辑:相关代码:

提交表单:

<form action="/upload.php" method="post" enctype="multipart/form-data">
<ul>
<li>
<input class="text" type="text" name="name">
</li>
<li>
<input class="text" type="email" name="email" placeholder="<?php echo $content['SubmitFormEmailPlaceholder'];?>">
</li>
<li>
<input type="file" name="file">
<input class="text" type="text" name="url" placeholder="http://">
</li>
<li>
<textarea class="text" name="notes" rows="5"></textarea>
</li>
<li>
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/resources/recaptchalib.php');
$publickey = "key";
echo recaptcha_get_html($publickey);
?>
</li>
<li>
<input type="submit">
</li>
</ul>
</form>

上传代码:

<?php
date_default_timezone_set('UTC');
//echo $_FILES['file']['error'];
require_once($_SERVER['DOCUMENT_ROOT'].'/resources/recaptchalib.php');
$privatekey="key";
$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","password",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'];
}
}
}
?>

最佳答案

尝试增加 php.ini 文件中的 upload_max_filesizepost_max_size。将它们都设置为 50M 以确保。

你也应该在更改后重新启动 apache。这取决于您的设置,因此请将 pathToApache 替换为您服务器上的 apache 路径;

sudo /etc/pathToApache/apache2 restart

Apache start/restart/stop docs.

关于php - 文件上传表单不适用于大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22519421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com