如何设置PHP上传文件大小限制

 更新时间:2016年11月25日 17:29  点击:1275
使用php的同学都会知道上传文件我们默认情况在php只会支持2MB文件上传大小了,如果超过了就无法上传了,下面我来给大家介绍如何设置PHP上传文件大小限制吧。

一,如果php没有限制我们可以在上传时就限制上传大小,如

 

 代码如下 复制代码
$maxattachsize=5097152;//最大上传大小,默认是2m
$temppath=$upfile['tmp_name'];
$filesize=filesize($temppath);
if($filesize > $maxattachsize)$err='文件大小超过'.$maxattachsize.'字节';

这样就限制了文件只能上传2MB大小的文件了


二,修改php.ini中的post_max_size和upload_max_filesize

1、memory_limit内存设置限制

2、max_execution_time程序执行时间限制

3、post_max_size最大POST数据限制

4、upload_max_filesize最大上传文件大小限制

 代码如下 复制代码

max_execution_time = 30     ; Maximum execution time of each script, in seconds
max_input_time = 60    ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M      ; Maximum amount of memory a script may consume (128MB)

; Maximum size of POST data that PHP will accept.
post_max_size = 105M

; Maximum allowed size for uploaded files.
upload_max_filesize = 100M

小提示,如果你是上传大文件我们最好在页面加上执行时间set_time_limit

 代码如下 复制代码

set_time_limit(0);

这样就不会超时了

本文章给家收集了大量的关于html标签的去除方法,很多朋友可能会想到使用strip_tags函数,但这个函数会把所有的html标签全部删除了,下面我来给大家介绍去掉指定的html标签及内容方法,有需要了解的朋友可参考。

string strip_tags ( string str [, string allowable_tags] )

弊端 :

这个函数只能保留想要的html标签,就是参数string allowable_tags。
在yizero的评论中我知道了这个函数的参数allowable_tags的其他的用法。

 代码如下 复制代码

strip_tags($source, ”); 去掉所以的html标签。

strip_tags($source, ‘<div><img><em>’); 保留字符串中的div、img、em标签。

如果想去掉的html的指定标签。那么这个函数就不能满足需求了。于是乎我用到了这个函数。

 

 代码如下 复制代码
<?php
/**
* 删除指定的HTML标签及其中内容,暂时只支持单标签清理
*
* @param string $string -- 要处理的字符串
* @param string $tagname -- 要删除的标签名称
* @param boolean $clear -- 是否删除标签内容
* @return string -- 返回处理完的字符串
*/
function replace_html_tag($string, $tagname, $clear = false){
$re = $clear ? '' : '1';
$sc = '/<' . $tagname . '(?:s[^>]*)?>([sS]*?)?</' . $tagname . '>/i';
return preg_replace($sc, $re, $string);
}


以下是测试代码

 代码如下 复制代码

// 百度首页内容

$string = file_get_contents('http://www.111cn.net/');

// 去掉 style 及包含内容
$string = replace_html_tag($string, 'style', true);
$string = replace_html_tag($string, 'script', true);

// 去掉 a 标签,并保存其中内容
$string = replace_html_tag($string, 'a');

// 去掉 span 标签,并保存其中内容
$string = replace_html_tag($string, 'span');

echo $string;
?>

如果我们要删除指定两者之间的数据

 

 代码如下 复制代码
<?php
/**  
* PHP去掉特定的html标签
* @param array $string  
* @param bool $str 
* @return string
*/ 
function _strip_tags($tagsArr,$str) {  
    foreach ($tagsArr as $tag) { 
        $p[]="/(<(?:/".$tag."|".$tag.")[^>]*>)/i"; 
    } 
    $return_str = preg_replace($p,"",$str); 
    return $return_str; 

 
$str = "<b>您好</b><input type='text' name='' /><a href='http://www.baidu.com'>百度一下,你就知道</a>"; 
echo _strip_tags(array("b", "input", "a"),$str); #去掉 B 标签和 INPUT 标签 
?>
有很多朋友都不知道怎么把数组中元素给删除,下面我来总结各种数组删除元素方法给各位,有需要了解的朋友可进入参考。

删除数组指定元素

 代码如下 复制代码

<?php
$a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
print_r(array_slice($a,1,2));
?>

输出

Array ( [0] => Cat [1] => Horse )


几个函数用下来觉得array_search()比较实用

array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false

 代码如下 复制代码


$array = array('1', '2', '3', '4', '5');

$del_value = 3;
unset($array[array_search($del_value , $array)]);//利用unset删除这个元素

print_r($array);

输出

array('1', '2', '4', '5');


从数组头删除值

array_shift()函数删除并返回数组中找到的元素。其结果是,如果使用的是数值健,则所有相应的值都会下移,而使用关联键的数组不受影响。其形式为:


mixed array_shift(array array)

下面的例子删除了$fruits数组中的第一个元素apple:

 代码如下 复制代码

$fruits = array("apple","banana","orange","pear");
$fruit = array_shift($fruits);
// $fruits = array("banana","orange","pear")
// $fruit = "apple";

从数组尾删除元素
array_pop()函数删除并返回数组的最后一个元素。其形式为:


mixed array_pop(aray target_array);

下面的例子从$states数组删除了最后的一个州:

 代码如下 复制代码

$fruits = array("apple","banana","orange","pear");
$fruit = array_pop($fruits);
//$fruits = array("apple","banana","orange");
//$fruit = "pear";


删除数组中间的元素

 代码如下 复制代码

function deleteElementFromArr($arr, $index){
if($index < count($arr)-1){
unset($arr[$index]);
reset($arr);
}
return $arr;
}

我封装成了一个函数,方便大家使用:

 代码如下 复制代码


<?php

function array_remove(&$arr, $offset)
{
array_splice($arr, $offset, 1);
}

$arr = array('apple','banana','cat','dog');

array_remove($arr, 2);
print_r($arr);
?>

删除数组重复元素

 代码如下 复制代码


<?php
function assoc_unique($arr, $key) {
$tmp_arr = array();
foreach($arr as $k => $v) {
if(in_array($v[$key], $tmp_arr)) {
unset($arr[$k]);
} else {
$tmp_arr[] = $v[$key];
}
}
sort($arr);
return $arr;
}

$aa = array(
array('id' => 123, 'name' => '张三'),
array('id' => 123, 'name' => '李四'),
array('id' => 124, 'name' => '王五'),
array('id' => 125, 'name' => '赵六'),
array('id' => 126, 'name' => '赵六')
);
$key = 'name';
assoc_unique(&$aa, $key);
print_r($aa);
?>

本文章结合Codigniter框架与jquery 的ajax实现PHP POST提交到两个地址实现代码,有需要了解的朋友可进入参考。

Codigniter框架使用jquery+ajax/" target="_blank">jquery ajax代码如下:

 代码如下 复制代码

 <form action="<?php echo @htmlspecialchars($url['login_url']) ?>"  method="post" enctype="application/x-www-form-urlencoded" name="form1" id="form1">
        <p><label>工资号:</label>
            <input name="Login.Token1" class="text" type="text" id="token1" />
        </p>
        <p><label>密 码:</label>
            <input name="Login.Token2" class="text" type="password" id="token2" />
        </p>
        <p>
            <input name="登录" type="submit" id="user_login" value="登录" />
            <input type="reset" value="重置" />
        </p>
        <b style="color:red"><?php echo $this->session->flashdata('error'); ?></b>
    </form>
<script>
    $(function(){
        $("#user_login").click(function(){
            var username = $("#token1").val();
            var salary_no = $("#token2").val();
            $.ajax({
                type: "POST",
                data: "username="+username+"&salary_no="+salary_no,
                url: "<?php echo site_url('home/ajax_check_username')?>",
                dataType: "text",
                cache: false,
                error: function(){alert('error');},
                success: function(data){
                    if(data == 'yes'){
                        location.href="<?php echo site_url('home/index')?>";
                    }else{
                        form1.submit();
                    }
                }
            });
            return false;
        });
    });
</script>

ajax提交到home控制器代码:

 代码如下 复制代码


    #提交到本地
    function ajax_check_username(){
        //redirect('home/index');
        $username = $this->input->post("username");
        $salary_no = $this->input->post("salary_no");
        if($this->user_mdl->check_ajax_user($username,$salary_no)){
            $this->session->set_userdata('salary_no', $salary_no);
            $this->session->set_userdata('username', $username);
            echo "yes";
        }else{
            echo "no";
        }
    }

本文章来给大家介绍PHP ajax 统计当前在线用户数程序代码,有需要的朋友可参考。

我们要统计在一段时间内访问站点的人数,有多种解决方案,你可以使用cookie,session结合文本或者数据库来记录用户访问数。本文将使用PHP,结合Mysql以及jQuery,展示一个统计在线人数以及访客地区分布的示例。

通常,当访客访问网站时,页面记录用户的cookie信息,当cookie过期即认为用户不在线。本文中我们使用PHP记录访客IP,并在客户端记录cookie及过期时间,同时通过新浪IP地址接口,获取访客的地理位置(本例只记录省份),一并写入mysql表中,即可统计一段时间内的访客总数,也可以查看访客的地区分布。

HTML

我们在页面上放置一个显示当前在线人数的div#total以及一个用于展示访客地区分布的列表#onlinelist,默认我们在列表中放置一张与加载动画图片,后面我们用jQuery控制当鼠标滑向时展示详细列表。

 代码如下 复制代码

<div class="demo"> 
      <div id="total">当前在线:<span id="onlinenum"></span></div> 
    <ul id="onlinelist"> 
        <li><img src="loader.gif"></li> 
    </ul> 
</div> 

CSS

我们用CSS来渲染显示效果,为了就是不让我们的示例很难看,下面的代码中,我们使用了CSS3,时代在进步啊,所以建议使用现代浏览器预览效果。

.

 代码如下 复制代码
demo{width:150px; margin:20px auto; font-size:14px} 
#total{padding:6px 10px; background:#090 url(arr.png) no-repeat right top; color:#fff;  
cursor:pointer; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;  
-moz-box-shadow:0 0 3px #ccc; -webkit-box-shadow:0 0 3px #ccc;box-shadow:0 0 3px #ccc;} 
#onlinelist{background:#f7f7f7; border:1px solid #d3d3d3; display:none; -moz-border-radius:5px;  
-webkit-border-radius:5px; border-radius:5px; -moz-box-shadow:0 0 3px #ccc;  
-webkit-box-shadow:0 0 3px #ccc;box-shadow:0 0 3px #ccc;} 
#onlinelist li{height:20px; line-height:20px;padding:4px 6px;border-bottom:1px dotted #d9d9d9} 
#onlinelist li span{float:right} 
#onlinelist li:hover{background:#fff} 

Mysql

我们要准备一张数据表online,用来记录访客IP、地区及访问时间。整个示例统计过程都依赖这张表,其结构如下:

 代码如下 复制代码

CREATE TABLE IF NOT EXISTS `online` ( 
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `ip` varchar(30) NOT NULL, 
  `province` varchar(64) NOT NULL, 
  `addtime` int(10) NOT NULL DEFAULT '0', 
  PRIMARY KEY (`id`) 
) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 

 

PHP

online.php用来记录访客信息,包括IP地址和地区。首先检测数据表中是否有访客IP记录,如果有,则只更新访问时间,否则,获取用户省份区域,并将用户IP即省份区域插入到表中。在此,可以判断是否存在访客的cookie记录,如果不存在则向新浪IP地址库请求获取访客的区域信息,并设置cookie值和过期时间。最后,我们删除表中已经过期的记录,统计总记录数并输出,详细请看代码注释。

 代码如下 复制代码

include_once('connect.php'); //连接数据库 
 
$ip = get_client_ip(); //获取客户端IP 
$time = time(); 
//查询表中是否有ip为当前访客IP的记录 
$query = mysql_query("select id from online where ip='$ip'"); 
if(!mysql_num_rows($query)){//如果不存在访客IP 
    if($_COOKIE['geoData']){//如果存在cookie,则获取用户的区域 
        $province = $_COOKIE['geoData']; //区域(省份) 
    }else{ 
        $api = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=$ip"; 
        $json = file_get_contents($api);//调用新浪IP地址库 
        $arr = json_decode($json,true);//解析json 
        $province = $arr['province'];//获取省份 
        setcookie('geoData',$province,$time+600); //设置cookie,设置过期时间为10分钟 
    } 
    //将访客信息插入到数据表中 
    mysql_query("insert into online (ip,province,addtime) values ('$ip','$province','$time')"); 
}else{//如果存在,则更新该用户访问时间 
    mysql_query("update online set addtime='$time' where ip='$ip'"); 

//删除已过期的记录 
$outtime = $time-600; 
mysql_query("delete from online where addtime<$outtime"); 
//统计总记录数,即在线用户数 
list($totalOnline) = mysql_fetch_array(mysql_query("select count(*) from online"));  
echo $totalOnline;//输出在线总数 
mysql_close(); 

 

关于新浪IP地址库的调用,您也可以参阅helloweba.com文章根据IP定位用户所在城市信息的介绍。

函数get_client_ip()用来获取用户真实IP。

 代码如下 复制代码

function get_client_ip() { 
    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) 
        $ip = getenv("HTTP_CLIENT_IP"); 
    else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"),  
"unknown")) 
        $ip = getenv("HTTP_X_FORWARDED_FOR"); 
    else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) 
        $ip = getenv("REMOTE_ADDR"); 
    else if (isset ($_SERVER['REMOTE_ADDR']) &&  
$_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) 
        $ip = $_SERVER['REMOTE_ADDR']; 
    else 
        $ip = "unknown"; 
    return ($ip); 

 

geo.php用来统计各省份(区域)访客人数分布。通过查询数据库,并按省份分组排序即可,注意我们将最终的数据集以JSON的形式输出,便于前端ajax交互。

 代码如下 复制代码

include_once('connect.php');//连接数据库 
//查询区域统计 
$sql = "select province,count(*) as total from online group by province order by total desc"; 
$result = mysql_query($sql); 
while($row=mysql_fetch_array($result)){ 
    $list[] = array( 
        'province' => $row['province'], 
        'total' => $row['total'] 
    );     

echo json_encode($list);//以json格式输出 

 

jQuery

前端页面需要做的是,页面加载时展示访客总数,即使用ajax请求online.php即可。然后当鼠标滑向统计箭头时,通过ajax请求geo.php获取各区域省份的在线人数,并以下拉的方式展现效果。

 代码如下 复制代码

$(function(){ 
    $("#onlinenum").load("online.php"); 
     
    $(".demo").hover(function(){ 
        $("#onlinelist").slideDown("fast"); 
        var str = ''; 
        $.getJSON("geo.php",function(json){ 
            $.each(json,function(index,array){ 
                str = str + "<li><span>"+array['total']+"</span>"+array['province']+"</li>"; 
            }); 
            $("#onlinelist").html(str); 
        }); 
    },function(){ 
        $("#onlinelist").slideUp("fast"); 
    }); 
}); 

完整实例

 代码如下 复制代码

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>PHP+MySQL+jQuery统计当前在线用户数</title>
<link rel="stylesheet" type="text/css" href="../css/main.css" />
<style type="text/css">
.demo{width:150px; margin:20px auto; font-size:14px; position:relative}
#total{padding:6px 10px; background:#090 url(arr.png) no-repeat right top; color:#fff; cursor:pointer; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; -moz-box-shadow:0 0 3px #ccc; -webkit-box-shadow:0 0 3px #ccc;box-shadow:0 0 3px #ccc;}
#onlinelist{background:#f7f7f7; border:1px solid #d3d3d3; display:none; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; -moz-box-shadow:0 0 3px #ccc; -webkit-box-shadow:0 0 3px #ccc;box-shadow:0 0 3px #ccc; position:absolute; top:30px; width:150px}
#onlinelist li{height:20px; line-height:20px; padding:4px 6px; border-bottom:1px dotted #d9d9d9}
#onlinelist li span{float:right}
#onlinelist li:hover{background:#fff}
</style>
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript">
$(function(){
 $("#onlinenum").load("online.php");
 
 $(".demo").hover(function(){
  $("#onlinelist").slideDown("fast");
  var str = '';
  $.getJSON("geo.php",function(json){
   $.each(json,function(index,array){
    str = str + "<li><span>"+array['total']+"</span>"+array['province']+"</li>";
   });
   $("#onlinelist").html(str);
  });
 },function(){
  $("#onlinelist").slideUp("fast");
 });
});
</script>
</head>

<body>


<div id="main">
  <h2 class="top_title"><a href="blog-206.html" title="点击看教程">PHP+MySQL+jQuery统计当前在线用户数</a></h2>
  <div class="demo">
   <div id="total">当前在线:<span id="onlinenum"></span></div>
    <ul id="onlinelist">
     <li><img src="loader.gif"></li>
    </ul>
  </div>
  <br/><br/><br/><br/><br/>
 
</div>

</body>
</html>

[!--infotagslink--]

相关文章

  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • PHP判断上传文件类型的解决办法

    分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
  • Vue使用formData格式类型上传文件的示例

    这篇文章主要介绍了Vue使用formData格式类型上传文件的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • 怎么限制Apache日志文件大小(error.log、access.log)

    如何删除error.log、access.log文件以及限制Apache日志文件大小的方法介绍,Apache服务器下access.log以及error.log日志文件一直没有没有动过,今天wordpress 的MYSQL数据库连...2016-01-28
  • c# FTP上传文件实例代码(简易版)

    下面小编就为大家分享一篇c# FTP上传文件的实例代码,超简单哦~希望对大家有所帮助。一起跟随小编过来看看吧,...2020-06-25
  • C++获取文件大小的4种常见技巧分享

    这篇文章主要介绍了C++获取文件大小的4种常见技巧分享,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • php 上传文件并生成缩略图代码

    if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
  • yii实现使用CUploadedFile上传文件的方法

    这篇文章主要介绍了yii实现使用CUploadedFile上传文件的方法,结合具体的前端与后端处理代码实例分析了CUploadedFile类的使用方法,需要的朋友可以参考下...2015-12-31
  • 阿里云OSS 通过表单直接上传文件 Post Policy例子

    本文章为各位简单介绍阿里云OSS 通过表单直接上传文件 Post Policy例子,这个例子非常的简单只需要简单的像php一样就可以了,具体如下。 代码如下 复制代...2016-11-25
  • IIS 7 中设置文件上传大小限制设置方法

    有时候我们需要限制上传文件的大小,那么可以参考下面的方法...2016-01-27
  • PHP响应post请求上传文件的方法

    这篇文章主要介绍了PHP响应post请求上传文件的方法,涉及php针对post传输数据处理的相关技巧,需要的朋友可以参考下...2015-12-21
  • asp.net fileupload控件上传文件与多文件上传

    这篇文章主要介绍了asp.net fileupload控件上传文件的方法,fileupload控件多文件上传,以及fileupload上传时实现文件验证的方法,需要的朋友可以参考下...2021-09-22
  • php ckeditor上传图片文件大小限制修改

    ckeditor编辑器在上传图片或文件时是没有大小限制的,下面我们来给大家介绍两种ckeditor上传图片文件大小限制问题解决办法。 一种可以通过修改PHP.INI配置文件上传...2016-11-25
  • 解决ASP.NET Core Mvc文件上传限制问题实例

    本篇文章主要介绍了解决ASP.NET Core Mvc文件上传限制问题,具有一定的参考价值,有需要的可以了解一下。...2021-09-22
  • asp.net FileUpload控件实现文件格式判断与文件大小限制

    这篇文章主要介绍了有关asp.net fileupload控件判断文件格式,以及进行文件大小限制的方法,可以在web.config中配置,也可以在.cs文件中实现,需要的朋友参考下...2021-09-22
  • php上传文件中文文件名乱码

    可能会有不少朋友碰到一些问题就是上传文件时如果是英文倒好原文名不会有问题,如果是中文可能就会出现乱码了,今天我来给大家总结一下导致乱码php上传文件中文文件名乱...2016-11-25
  • php上传文件与图片重命名方法总结

    上传文件或图片进行重命名是我们在php上传中会碰到的一个问题了,在重命名无非就是对你上传的文件生成一个随机的字符串了,包括有Md5,随机,或按时间日期来重命名了,下面我...2016-11-25
  • PHP fastcgi模式运行的PHP上传文件MaxRequestLen错误解决

    在fastcgi模式下上传文件比较大时都会提示mod_fcgid: HTTP request length 135024 (so far) exceeds MaxRequestLen (131072)错误了,看意思是长度限制了,下面来给各位介...2016-11-25
  • PHP上传文件代码之入门代码

    在php中文件上传我们都是利用表单的post来实例了,注意: 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 \"mult...2016-11-25
  • android通过http上传文件到web服务器端

    本文章介绍了一个关于android通过http来实现文件上传功能,在服务器端我们是用php来实现的,有需要的朋友可以参考一下 代码如下 复制代码 <?...2016-09-20