PHP 基础 一些常用的函数 和方法(二) 持续更新中

本文介绍PHP中用于防止SQL注入、XSS攻击的安全函数,如mysql_real_escape_string、addslashes、htmlentities等,同时讲解了intval在处理浮点数时的精度问题及解决方法。此外,还提供了使用ZipArchive类压缩文件和目录的详细步骤。

续上之前的一 太长怕大家 浏览的 烦躁 再开一篇吧 欢迎各位大佬评论 讨论 谢谢

PHP安全函数 关注一下 

1. mysql_real_escape_string()

这个函数对于在PHP中防止SQL注入攻击很有帮助,它对特殊的字符,像单引号和双引号,加上了“反斜杠”,确保用户的输入在用它去查询以前已经是安全的了。但你要注意你是在连接着数据库的情况下使用这个函数。

但现在mysql_real_escape_string()这个函数基本不用了,所有新的应用开发都应该使用像PDO这样的库对数据库进行操作,也就是说,我们可以使用现成的语句防止SQL注入攻击。

2. addslashes()

这个函数和上面的mysql_real_escape_string()很相似。但要注意当设置文件php.ini中的Magic_quotes_gpc 的值为“on”时,不要使用这个函数。默认情况下, magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据 自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致 双层转义。你可以通过PHP中get_magic_quotes_gpc()函数检查这个变量的值。

3. htmlentities()

这个函数对过滤用户输入数据非常有用,它可以把字符转换为 HTML 实体。比如,当用户输入字符“<”时,就会被该函数转化为HTML实体<,因此防止了XSS和SQL注入攻击。

4. htmlspecialchars()

HTML中的一些字符有着特殊的含义,如果要体现这样的含义,就要被转换为HTML实体,这个函数会返回转换后的字符串,比如,‘&’amp会转为‘&’。

5. strip_tags()

这个函数可以去除字符串中所有的HTML,JavaScript和PHP标签,当然你也可以通过设置该函数的第二个参数,让一些特定的标签出现。

6. md5()

一些开发者存储的密码非常简单,这从安全的角度上看是不好的,md5()函数可以产生给定字符串的32个字符的md5散列,而且这个过程不可逆,即你不能从md5()的结果得到原始字符串。

7. sha1()

这个函数和上面的md5()相似,但是它使用了不同的算法,产生的是40个字符的SHA-1散列(md5产生的是32个字符的散列)。

8. intval()

不要笑,我知道这不是一个和安全相关的函数,它是在将变量转成整数类型。但是,你可以用这个函数让你的PHP代码更安全,特别是当你在解析id,年龄这样的数据时。

9.intval 转换浮点数精度丢失问题

在 PHP 和其他一些语言都会存在这个问题,转换浮点数为整数的时候会出现精度丢失,如下:

<?php $n="19.99"; print intval($n*100); // prints 1998

1

2

3

<?php

$n="19.99";

print intval($n*100); // prints 1998

解决办法:

1.转换成字符串再 intval

print intval(strval($n*100)); // prints 1999

1

print intval(strval($n*100)); // prints 1999

2.使用 round 函数替代 floatval

php -r "echo round(19.99*100);"

1

php -r "echo round(19.99*100);"

3.先转换成字符串再取整

print intval(strval($n*100)); // prints 1999

1

print intval(strval($n*100)); // prints 1999

压缩一个文件
我们将一个文件生成一个压缩包。

<?php
$path = "c:/wamp/www/log.txt";
$filename = "test.zip";
$zip = new ZipArchive();
$zip->open($filename,ZipArchive::CREATE);   //打开压缩包
$zip->addFile($path,basename($path));   //向压缩包中添加文件
$zip->close();  //关闭压缩包
上述代码将c:/wamp/www/log.txt文件压缩生成了test.zip,并保存在当前目录。

压缩多个文件
压缩多个文件,其实就是addFile执行多次,可以通过数组的遍历来实现。

<?php
$fileList = array(
    "c:/wamp/www/log.txt",
    "c:/wamp/www/weixin.class.php"
);
$filename = "test.zip";
$zip = new ZipArchive();
$zip->open($filename,ZipArchive::CREATE);   //打开压缩包
foreach($fileList as $file){
    $zip->addFile($file,basename($file));   //向压缩包中添加文件
}
$zip->close();  //关闭压缩包
压缩一个目录
<?php
function addFileToZip($path,$zip){
    $handler=opendir($path); //打开当前文件夹由$path指定。
    while(($filename=readdir($handler))!==false){
        if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
            if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path."/".$filename, $zip);
            }else{ //将文件加入zip对象
                $zip->addFile($path."/".$filename);
            }
        }
    }
    @closedir($path);
}
$zip=new ZipArchive();
if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){
    addFileToZip('rsa/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    $zip->close(); //关闭处理的zip文件
}

压缩并下载zip包
我的时候,我们需要打包之后,提供下载,然后删除压缩包。

可以分为以下几步:

判断给出的路径,是文件夹,还是文件。文件夹还需要遍历添加文件。
设置相关文件头,并使用readfile函数提供下载。
使用unlink函数删除压缩包
<?php
function addFileToZip($path,$zip){
    $handler=opendir($path); //打开当前文件夹由$path指定。
    while(($filename=readdir($handler))!==false){
        if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
            if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path."/".$filename, $zip);
            }else{ //将文件加入zip对象
                $zip->addFile($path."/".$filename);
            }
        }
    }
    @closedir($path);
}
$zip=new ZipArchive();
if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){
    $path = 'rsa/';
    if(is_dir($path)){  //给出文件夹,打包文件夹
        addFileToZip($path, $zip);
    }else if(is_array($path)){  //以数组形式给出文件路径
        foreach($path as $file){
            $zip->addFile($file);
        }
    }else{      //只给出一个文件
        $zip->addFile($path);
    }
 
    $zip->close(); //关闭处理的zip文件
}

无限极分类

private function actionGettree($arr,$pid,$step){
    global $tree;
    foreach($arr as $key=>$val) {
        if($val['parent_id'] == $pid) {
            $flg = str_repeat('└―',$step);
            $val['lm_name'] = $flg.$val['lm_name'];
            $tree[] = $val;
            $this->actionGettree($arr , $val['id'] ,$step+1);
        }
    }
    return $tree;
}

最后在另一个方法中:

$newarr = $this->actionGettree($arr, 0, 0);

这样调用就可以了
 

windows 计划任务

C:
"C:\phpStudy\PHPTutorial\php\php-5.6.27-nts\php.exe" -f "C:\phpStudy\PHPTutorial\WWW\demo\file.php"

 

sort  对数组排序 一般适用于一维索引数组,不会保持索引

rsort  对数组逆向排序 和sort用法一致

asort  对数组进行排序并保持索引关系对值进行排序,一般适用于一维数组,保持索引关系

arsort  对数组进行逆向排序并保持索引关系和asort用法一致

ksort  对数组按照键名排序

krsort  对数组按照键名逆向排序
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值