【发布时间】:2011-02-19 21:50:58
【问题描述】:
php设置允许的文件上传大小如何用php脚本确定?
【问题讨论】:
标签: php
php设置允许的文件上传大小如何用php脚本确定?
【问题讨论】:
标签: php
上传受三个选项的限制:upload_max_filesize、post_max_size 和 memory_limit。您的上传只有在没有执行其中之一时才完成。
ini_get() 函数为您提供了限制的简写,应先进行转换。感谢AoEmaster。
function return_bytes($val) {
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
switch($last)
{
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
function max_file_upload_in_bytes() {
//select maximum upload size
$max_upload = return_bytes(ini_get('upload_max_filesize'));
//select post limit
$max_post = return_bytes(ini_get('post_max_size'));
//select memory limit
$memory_limit = return_bytes(ini_get('memory_limit'));
// return the smallest of them, this defines the real limit
return min($max_upload, $max_post, $memory_limit);
}
来源:http://www.kavoir.com/2010/02/php-get-the-file-uploading-limit-max-file-size-allowed-to-upload.html
【讨论】:
使用ini_get获取当前配置值:
ini_get('upload_max_filesize')
【讨论】:
function return_bytes($val)
{
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
switch($last)
{
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
function get_upload_max_filesize()
{
$max_upload = return_bytes(ini_get('upload_max_filesize'));
$max_post = return_bytes(ini_get('post_max_size'));
return min($max_upload, $max_post, $memory_limit);
}
【讨论】:
您也可以在运行时使用 .htaccess 文件更改该大小,而无需更改您的 php.ini 文件
php_value upload_max_filesize 1224M
php_value post_max_size 1224M
php_value max_execution_time 3000
php_value max_input_time 3000
复制该代码并放置您的文件,然后将该文件与索引文件一起存储,然后您运行您的项目,您还可以上传 1GB 文件
【讨论】:
这是一个单一的函数,实现了 AoEmaster 的原始想法。 该函数返回整数(字节数)。
function _GetMaxAllowedUploadSize(){
$Sizes = array();
$Sizes[] = ini_get('upload_max_filesize');
$Sizes[] = ini_get('post_max_size');
$Sizes[] = ini_get('memory_limit');
for($x=0;$x<count($Sizes);$x++){
$Last = strtolower($Sizes[$x][strlen($Sizes[$x])-1]);
if($Last == 'k'){
$Sizes[$x] *= 1024;
} elseif($Last == 'm'){
$Sizes[$x] *= 1024;
$Sizes[$x] *= 1024;
} elseif($Last == 'g'){
$Sizes[$x] *= 1024;
$Sizes[$x] *= 1024;
$Sizes[$x] *= 1024;
} elseif($Last == 't'){
$Sizes[$x] *= 1024;
$Sizes[$x] *= 1024;
$Sizes[$x] *= 1024;
$Sizes[$x] *= 1024;
}
}
return min($Sizes);
}
如果需要,可以将其与以下函数结合使用,将输出呈现为人类可读的文本。
function _Byte2Size($bytes,$RoundLength=1) {
$kb = 1024; // Kilobyte
$mb = 1024 * $kb; // Megabyte
$gb = 1024 * $mb; // Gigabyte
$tb = 1024 * $gb; // Terabyte
if($bytes < $kb) {
if(!$bytes){
$bytes = '0';
}
return (($bytes + 1)-1).' B';
} else if($bytes < $mb) {
return round($bytes/$kb,$RoundLength).' KB';
} else if($bytes < $gb) {
return round($bytes/$mb,$RoundLength).' MB';
} else if($bytes < $tb) {
return round($bytes/$gb,$RoundLength).' GB';
} else {
return round($bytes/$tb,$RoundLength).' TB';
}
}
这样使用:
echo 'Max allowed upload size: '._Byte2Size(_GetMaxAllowedUploadSize());
结果可能是:
最大允许上传大小:500 MB
【讨论】:
您可以使用 ini_set() 设置最大文件上传大小
ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');
或 使用 .htaccess 文件
php_value upload_max_filesize
php_value post_max_size
【讨论】: