IIS修改php.ini最有效的重启方法

在命令行下输入 iisreset

CentOS7 重启php

kill -SIGUSR2 `cat /yjdata/www/tmp/php-fpm.pid`

php log输出文件调试

方便正在运行的网站进行调试
@file_put_contents(“log文件存放路径”, var_export(数组,true));

PHP防注入

// 过滤_GET_POST_COOKIE_SESSION_FILES过来变量
    foreach ($_GET as $get_key=>$get_var)
    {
        if (is_numeric($get_var)) {
        $get[strtolower($get_key)] = get_int($get_var);
        }else{
        $get[strtolower($get_key)] = get_str($get_var);
        }
    }
    /* 过滤所有POST过来的变量 */
    foreach ($_POST as $post_key=>$post_var)
    {
        if (is_numeric($post_var)) {
        $post[strtolower($post_key)] = get_int($post_var);
        } else {
        $post[strtolower($post_key)] = get_str($post_var);
        }
    }
    foreach ($_POST as $post_key=>$post_var)
    {
        if (is_numeric($post_var)) {
        $post[strtolower($post_key)] = get_int($post_var);
        } else {
        $post[strtolower($post_key)] = get_str($post_var);
        }
    }
    /* 过滤函数 */
    //整型过滤函数
    function get_int($number)
    {
        return intval($number);
    }
    //字符串型过滤函数
    function get_str($string)
    {
        if (!get_magic_quotes_gpc()) {
        return addslashes($string);
        }
        return $string;
    }

保存会话技术之session

基本概念,session是一项服务器端的技术,利用这个技术,服务器在运行时可以为每一个用户的的浏览器创建一个其独享的session文件。

一个会话对应一个session,打个比方说:当你在网上购物的时候,小明在和你一起买东西,你买了4样商品,小明买了2样,但是当你们各自点击购物车的时候,都会只看到自己所选的商品,这个就是因为你们两个所选择的物品被分别储存在各自属于你们的session文件里,这个文件储存在服务器里。

创建session

session_start()

$_SESSION[“name”]=”gengzhie”;

$_SESSION[“age”]=”23″;

session 可以储存很多数据类型string,integer,bool,array,object

获取session

$name = $_SESSION[“name”];

echo $name;

更新session

重新保存某一变量的属性

删除session

//⑴删除某一个特定的key<=>val

unset($_SESSION[‘name’]);

//⑵删除所有的key<=>val

session_destroy();

echo “删除成功”

session可以干什么

网上购物车、保存登录用户信息、设置访问权限、某些数据存放在session中,供其他页面使用。

 

PHP分页

分页是大多数网站都会用到的,所以我个人觉得理解分页的用法和原理是很重要的。下面是我做的分页。

<?php
$con = mysql_connect(“localhost”,”root”,””);
mysql_query(“set names utf8”, $con);
if(!$con)
{die(“Could not connect:”.mysql_error());
}
mysql_select_db(“db_log”,$con);//连接数据库

$pagesize = 2;//每页显示个数
if(isset($_GET[“page_value”])) //获取当前页
{    $current_page=$_GET[“page_value”];
$page = $current_page*$pagesize-$pagesize; //检索条件的开始位置
}
else{
$page = 0;
$current_page = 1;
}
$sql = “SELECT count(`id`) as `id_sum`  from `tab` “;//算出记录数
$result = mysql_query($sql,$con);
$num_arr = mysql_fetch_array($result);
$num = $num_arr[“id_sum”];//总记录数
$first=1;
$prev=$current_page-1;//上一页
$next=$current_page 1;//下一页
$sql=”SELECT * FROM tab limit $page,$pagesize “; //检索出从行$page开始的$pagesize行,$page为开始位置,$pagesize为行数
$result=mysql_query($sql,$con);
$begin_page=$current_page-3;//设置选中页左边留的页码个数
$finish_page=$current_page 3;//设置选中页右边边留的页码个数
if($num)         //求出总页数
{
if($num <= $pagesize)
{
$$total_pages = 1;      //当总记录数小于等于每页显示的个数时,那么只有一页
}

if ($num % $pagesize > 0)
{
$total_pages= (int)($num / $pagesize) 1;    //当有余数时,那么取$num / $pagesize得整数 1.为总页数
}
else
{
$total_pages= $num / $pagesize;   //或者,如果能整除的情况下,就等于$num / $pagesize 页
}

}

因为我想要的效果是这样的

所选的页数前面有3个页码,后面有3个页码,但是就有两种特殊情况,当我选的当前页码数小于4的时候,前面留的数就会出现负数,所以我做了个判断,当它小于4的时候,所选页数-3的数为1,
$beginpage = $begin_page > 0 ? $begin_page : 1; //当前页数-3大于0时,选中页左移3个页码页数为当前页-3,否则为1,

同样的道理尾页时,假如一共有13页,我的判断不能让它超过13页,所以所选页数 3如果超过了尾页,那么它的值就是尾页的页数,
$finishpage = $finish_page < $total_pages? $finish_page :$total_pages;                  //这里用到了一个三元运算符,意思是当$finish_page(选中的页码数 3)<$total_pages(总页数)时,执行$finish_page,否则执行$total_pages;这么做是为了不让右边留的页码数超过总页数。

假如,一共有9页,一共可以显示7个页码,我当前选择的第六页,为了方便观察,我故意写成汉字,

【3】【4】【5】【六】【7】【8】【9】

我做这个判断是为了,当选择6以上的页数时该怎么办,正常会是这样:

【4】【5】【6】【七】【8】【9】【10】会出现第10页,之后报错。因为本身没有第10页,所以就让它选择6以上时,最后一页只显示‘9’

其实接下来的判断是我后发现的问题,因为一开始一心只想着要显示7个页码,所以忽略了页数小于7页的时候怎么办,试了一下,发现会变成这样

【-2】【-1】【0】【1】【2】【3】【4】

为了避免负数的出现,就要判断一下,当总页数小于‘7’时该怎么办。

if($total_pages>=7)
{
$page_count1 = 7;
$page_count2 = $total_pages-6;
}
else
{
$page_count1 = $total_pages;
$page_count2 = 1;
}

如果只是做上面的判断,会出现一个问题,就是当我选择的页码数小于4时,例如我选择第一页时,

他会变成这样【1】【2】【3】【4】,

选择最后一页时也是会逐渐减少页码个数。【9】【10】【11】【12】【13】,

但是中间的数会正常显示【2】【3】【4】【5】【6】【7】【8】,

其实我想要的就是页码个数始终是7个,

所以就得加一个判断:
if($current_page-3<=0)
{
$pages1 = 1;
$pages2 = $page_count1;
}

elseif($current_page>$total_pages-3)
{
$pages1 = $page_count2;
$pages2 = $total_pages;
}

else
{
$pages1 = $beginpage;      //其它情况就循环 $beginpage到$finishpage
$pages2 = $finishpage;
}
?>

<?php

//当前页不等于1时,显示首页和上一页,如果等于1,就不显示

if($current_page!=1)
{
?>
<a href = “http://www.ceshi1.com/user.php?page_value=<?php echo $first?>”>首页</a>
<a href = “http://www.ceshi1.com/user.php?page_value=<?php echo $prev ;?>”>上一页</a>

<?php
}

for($i=$pages1;$i<=$pages2;$i )
{
//这个判断是为了把我选中的页和其它页区分开
if($i==$current_page)
{
echo “[$i] “;
}
else
{
echo “<a href =”http://www.ceshi1.com/user.php?page_value=”.$i.””>[“.$i.”]  </a>”;
}

}

if($current_page!=$total_pages)
{
?>
<a href = “http://www.ceshi1.com/user.php?page_value=<?php echo $next ;?>”>下一页</a>
<a href = “http://www.ceshi1.com/user.php?page_value=<?php echo $total_pages?>”>尾页</a>
<?php
}
?>

根据字段进行排序

前一阵用PHP做了个工作日志系统用户名排序功能,首先在user表里增加reorder字段,通过reorder字段里的数字来进行排序。实现的方法先将遍历出来的用户表,每条数据对应用户ID和reorder字段的值,点击排序按钮后,将reorder值全部提交,并在数据库里更新。最后在查询时根据reorder排序即可。

<input type=”text” name=”<?=$r[“userId”]?>” id=”<?php echo $r[“userId”]; ?>” value=”<?php echo $r[“reorder”];?>” onkeyup=”value=value.replace(/[^\d]/g,””)” />

$reorder = $this->input->post();
foreach($reorder as $k=>$v)
{
$this->adduser_mdl->update1($k,$v);
}