- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
希望这里有人可以回答我的问题。
我有一个包含简单字段(如姓名、电话号码、电子邮件地址等)和 1 个文件上传字段的基本表单。
我正在尝试在我的脚本中添加一些验证,以检测文件是否太大,然后拒绝用户返回表单以选择/上传较小的文件。
我的问题是,如果用户选择的文件大于我的验证文件大小规则并且大于 php.ini POST_MAX_SIZE/UPLOAD_MAX_FILESIZE 并推送提交,那么 PHP 似乎尝试处理表单只是在 POST_MAX_SIZE 设置上失败然后清除整个 $_POST 数组并且不向表单返回任何内容。
有解决办法吗?当然,如果有人上传的内容大于 php.ini 中配置的最大大小,那么您仍然可以获得其余的 $_POST 数据???
这是我的代码。
<?php
function validEmail($email)
{
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex)
{
$isValid = false;
} else {
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen < 1 || $localLen > 64)
{
// local part length exceeded
$isValid = false;
}
else if ($domainLen < 1 || $domainLen > 255)
{
// domain part length exceeded
$isValid = false;
}
else if ($local[0] == '.' || $local[$localLen-1] == '.')
{
// local part starts or ends with '.'
$isValid = false;
}
else if (preg_match('/\\.\\./', $local))
{
// local part has two consecutive dots
$isValid = false;
}
else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
{
// character not valid in domain part
$isValid = false;
}
else if (preg_match('/\\.\\./', $domain))
{
// domain part has two consecutive dots
$isValid = false;
}
else if
(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local)))
{
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local)))
{
$isValid = false;
}
}
}
return $isValid;
}
//setup post variables
@$name = htmlspecialchars(trim($_REQUEST['name']));
@$emailCheck = htmlspecialchars(trim($_REQUEST['email']));
@$organisation = htmlspecialchars(trim($_REQUEST['organisation']));
@$title = htmlspecialchars(trim($_REQUEST['title']));
@$phone = htmlspecialchars(trim($_REQUEST['phone']));
@$location = htmlspecialchars(trim($_REQUEST['location']));
@$description = htmlspecialchars(trim($_REQUEST['description']));
@$fileError = 0;
@$phoneError = "";
//setup file upload handler
$target_path = 'uploads/';
$filename = basename( @$_FILES['uploadedfile']['name']);
$max_size = 8000000; // maximum file size (8mb in bytes) NB: php.ini max filesize upload is 10MB on test environment.
$allowed_filetypes = Array(".pdf", ".doc", ".zip", ".txt", ".xls", ".docx", ".csv", ".rtf"); //put extensions in here that should be uploaded only.
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // Get the extension from the filename.
if(!is_writable($target_path)) die('You cannot upload to the specified directory, please CHMOD it to 777.'); //Check if we can upload to the specified upload folder.
//display form function
function displayForm($name, $emailCheck, $organisation, $phone, $title, $location, $description, $phoneError, $allowed_filetypes, $ext, $filename, $fileError)
{
//make $emailCheck global so function can get value from global scope.
global $emailCheck;
global $max_size;
echo '<form action="geodetic_form.php" method="post" name="contact" id="contact" enctype="multipart/form-data">'."\n".
'<fieldset>'."\n".'<div>'."\n";
//name
echo '<label for="name"><span class="mandatory">*</span>Your name:</label>'."\n".
'<input type="text" name="name" id="name" class="inputText required" value="'. $name .'" />'."\n";
//check if name field is filled out
if (isset($_REQUEST['submit']) && empty($name))
{
echo '<label for="name" class="error">Please enter your name.</label>'."\n";
}
echo '</div>'."\n". '<div>'."\n";
//Email
echo '<label for="email"><span class="mandatory">*</span>Your email:</label>'."\n".
'<input type="text" name="email" id="email" class="inputText required email" value="'. $emailCheck .'" />'."\n";
// check if email field is filled out and proper format
if (isset($_REQUEST['submit']) && validEmail($emailCheck) == false)
{
echo '<label for="email" class="error">Invalid email address entered.</label>'."\n";
}
echo '</div>'."\n". '<div>'."\n";
//organisation
echo '<label for="phone">Organisation:</label>'."\n".
'<input type="text" name="organisation" id="organisation" class="inputText" value="'. $organisation .'" />'."\n";
echo '</div>'."\n". '</fieldset>'."\n".'<fieldset>'. "\n" . '<div>'."\n";
//title
echo '<label for="phone">Title:</label>'."\n".
'<input type="text" name="title" id="title" class="inputText" value="'. $title .'" />'."\n";
echo '</div>'."\n". '</fieldset>'."\n".'<fieldset>'. "\n" . '<div>'."\n";
//phone
echo '<label for="phone"><span class="mandatory">*</span>Phone <br /><span class="small">(include area code)</span>:</label>'."\n".
'<input type="text" name="phone" id="phone" class="inputText required" value="'. $phone .'" />'."\n";
// check if phone field is filled out that it has numbers and not characters
if (isset($_REQUEST['submit']) && $phoneError == "true" && empty($phone)) echo '<label for="email" class="error">Please enter a valid phone number.</label>'."\n";
echo '</div>'."\n". '</fieldset>'."\n".'<fieldset>'. "\n" . '<div>'."\n";
//Location
echo '<label class="location" for="location"><span class="mandatory">*</span>Location:</label>'."\n".
'<textarea name="location" id="location" class="required">'. $location .'</textarea>'."\n";
//check if message field is filled out
if (isset($_REQUEST['submit']) && empty($_REQUEST['location'])) echo '<label for="location" class="error">This field is required.</label>'."\n";
echo '</div>'."\n". '</fieldset>'."\n".'<fieldset>'. "\n" . '<div>'."\n";
//description
echo '<label class="description" for="description">Description:</label>'."\n".
'<textarea name="description" id="queryComments">'. $description .'</textarea>'."\n";
echo '</div>'."\n". '</fieldset>'."\n".'<fieldset>'. "\n" . '<div>'."\n";
//file upload
echo '<label class="uploadedfile" for="uploadedfile">File:</label>'."\n".
'<input type="file" name="uploadedfile" id="uploadedfile" value="'. $filename .'" />'."\n";
// Check if the filetype is allowed, if not DIE and inform the user.
switch ($fileError)
{
case "1":
echo '<label for="uploadedfile" class="error">The file you attempted to upload is not allowed.</label>';
break;
case "2":
echo '<label for="uploadedfile" class="error">The file you attempted to upload is too large.</label>';
break;
}
echo '</div>'."\n". '</fieldset>';
//end of form
echo '<div class="submit"><input type="submit" name="submit" value="Submit" id="submit" /></div>'.
'<div class="clear"><p><br /></p></div>';
} //end function
//setup error validations
if (isset($_REQUEST['submit']) && !empty($_REQUEST['phone']) && !is_numeric($_REQUEST['phone'])) $phoneError = "true";
if (isset($_REQUEST['submit']) && $_FILES['uploadedfile']['error'] != 4 && !in_array($ext, $allowed_filetypes)) $fileError = 1;
if (isset($_REQUEST['submit']) && $_FILES["uploadedfile"]["size"] > $max_size) $fileError = 2; echo "this condition " . $fileError;
$POST_MAX_SIZE = ini_get('post_max_size');
$mul = substr($POST_MAX_SIZE, -1);
$mul = ($mul == 'M' ? 1048576 : ($mul == 'K' ? 1024 : ($mul == 'G' ? 1073741824 : 1)));
if ($_SERVER['CONTENT_LENGTH'] > $mul*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) echo "too big!!";
echo $POST_MAX_SIZE;
if(empty($name) || empty($phone) || empty($location) || validEmail($emailCheck) == false || $phoneError == "true" || $fileError != 0)
{
displayForm($name, $emailCheck, $organisation, $phone, $title, $location, $description, $phoneError, $allowed_filetypes, $ext, $filename, $fileError);
echo $fileError;
echo "max size is: " .$max_size;
echo "and file size is: " . $_FILES["uploadedfile"]["size"];
exit;
} else {
//copy file from temp to upload directory
$path_of_uploaded_file = $target_path . $filename;
$tmp_path = $_FILES["uploadedfile"]["tmp_name"];
echo $tmp_path;
echo "and file size is: " . filesize($_FILES["uploadedfile"]["tmp_name"]);
exit;
if(is_uploaded_file($tmp_path))
{
if(!copy($tmp_path,$path_of_uploaded_file))
{
echo 'error while copying the uploaded file';
}
}
//test debug stuff
echo "sending email...";
exit;
}
?>
PHP 在日志中返回这个错误:[2010 年 4 月 29 日 10:32:47] PHP 警告:57885895 字节的 POST 内容长度超过第 0 行未知中 10485760 字节的限制
请原谅所有调试的东西:)
FTR,我在 IIS 上运行 PHP 5.1.2。
最佳答案
PHP 丢弃所有 POST 数据,因为没有空间放置它。仅从部分数据中获得的信息是不可靠的。
我会通过在一个单独的步骤中以不同的形式上传必要的文件来解决这个问题。您可以存储 session 中已经获得的值,确保它们不会因为过多的 POST 数据而丢失。
关于php - 当 header 大于 POST_MAX_SIZE 时,$_POST 数据返回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2733256/
我应该如何以理智的方式处理超过 post_max_size 的 http 上传? 在我的配置中,post_max_size 比 upload_max_filesize 大几 MB我遇到的问题是: 如果
在我的网站主机中,我已经看到(通过 phpinfo) post_max_size = 8Mb upload_max_filesize = 16Mb 这让我想到我应该能够上传最大 16Mb 的文件。但是
我正在尝试通过 Adminer 上传一个 gzip 压缩的 Mysql 备份 (71,2mb),它抛出了这个错误: Too big POST data. Reduce the data or incr
当尝试通过为此创建的管理区域上传 15mb 的 PDF 文件时,没有任何反应。没有成功或错误消息,但 PDF 没有上传。 然后我认为这可能是 php.ini 设置的问题。果然,我看文件的时候,发现限制
我有一个托管在 Amazon EC2 服务器上的 WordPess 网站,我有一些大小高达 50-60 MB 的文件。 那么建议将 post_max_size 保持为 64M 吗?或者建议最多多少?
我正在尝试更改 Apache 中的文件上传设置 我输入了以下命令: sudo nano /etc/php5/apache2/php.ini (文件打开成功) Ctrl + W "post_max_si
我在 php.ini 中将 upload_max_filesize 和 post_max_size 设置为 32Mb。 我正在使用 Symfony2。我创建了一个包含文件变量的实体,以便人们可以上传文
我了解如果 POST 请求超过 post_max_size,$_POST 和 $_FILES 超全局变量将变为空。 我见过很多关于如何检测这种情况的讨论,但从来没有解释过为什么超全局变量是空的。清除
我在通过 PHP(通过 Drupal,尽管这不是问题所在)上传大文件时遇到了一个奇怪的问题。 基本上,由于达到 post_max_size 限制,我的文件上传失败,即使本地指令设置为 96M,而文件为
我正在开发一个将文件附加到电子邮件的 PHP 表单,并试图优雅地处理上传文件过大的情况。 我了解到 php.ini 中有两个设置会影响文件上传的最大大小:upload_max_filesize 和 p
我正在开发一个将文件附加到电子邮件的 PHP 表单,并尝试优雅地处理上传文件太大的情况。 我了解到 php.ini 中有两个设置会影响文件上传的最大大小:upload_max_filesize 和 p
我正在上传文件但无法找到此问题的答案。有时我的文件上传在 move_uploaded_file() 失败所以有人告诉我这可能是内存问题。不幸的是,我找不到可以回答这个问题的文档。 我上传的文件是 40
我正在尝试上传 的文件17569997 字节 (~16.7MB) . 在我的脚本中执行错误检查时,我检查了 $_FILES['file']['error']设置为 1( UPLOAD_ERR_INI_
我目前正在处理文件上传,并尝试不同的方法将更大的文件传输到我的服务器。 但是我发现this answer并且不明白为什么这会忽略 php.ini 的 post_max_size/upload_max_
我有一个 Web 应用程序,它将对虚拟主机的所有请求重定向到 Controller ,然后 Controller 根据 URL 决定要包含和运行哪些文件。有一个 Web 服务可以通过 POST 接受大
我在 ubuntu (14.04) 上通过 fastcgi 通过 nginx (1.6.2) 运行 hhvm (3.6)。 调用 ini_get('post_max_size') 或 ini_get(
我正在尝试增加服务器上的最大帖子大小限制。 这是 .htaccess 文件: php_value upload_max_filesize 20M php_value post_max_size 20M
请记住,我不是系统管理员,我只是一名开发人员。我找不到像我一样有确切问题的人,只是相似,而且他们的“修复”似乎都不起作用。 我目前正在运行一个 Amazon EC2 实例。 CentOS 6.2 Ng
希望这里有人可以回答我的问题。 我有一个包含简单字段(如姓名、电话号码、电子邮件地址等)和 1 个文件上传字段的基本表单。 我正在尝试在我的脚本中添加一些验证,以检测文件是否太大,然后拒绝用户返回表单
ini_set('post_max_size', '200M') 在 php 5.4 中不起作用我曾使用以下方法。.htaccess , user.ini , php.ini , php5.ini 但
我是一名优秀的程序员,十分优秀!