php知识点学习整理

PHPer 2020-04-22 2042 0 0

这里记录php知识点学习整理 20200422...

立即注册

更新于:2020-04-22 01:28:58
    您需要登录后才可以评论。 立即注册

    PHP的源代码BUG整理

    trim()函数的bug

    如果用trim($str,'。');

    用句号最为两端消除符,str为中文等3字节的特定字符,返回的结果会乱码,例如

    $str="倩女幽魂";
    $str=trim($str,'。');
    var_dump($str);die;
    //输出结果为
    string(11) "倩女幽�"
    

    可以看到,字符串长度11,有1个长度被截取掉了,所以是乱码 ...

    立即注册
    更新于:2022-05-01 12:13:02

    PHP 中英文混排截取字符串 (用php自带的函数,简单效果又好)

    在网上找了几种代码,测试了,这个是最好的,还是官方的函数mb_strwidth()和mb_strimwidth()厉害,O(∩_∩)O

    最后找到了笔记合适的

    我自己用php内置函数写了字符串截取函数

    //根据PHP内置函数写的截取字符串函数 20220423
    if ( ! function_exists('mb_str_cut')){
        function mb_str_cut($str,$length=20,$tailTag='...') {
            if(mb_strwidth($str, 'utf8')>$length){
                $str = mb_strimwidth($str, 0, $length, $tailTag, 'utf8');
            }
            return $str;
        }
    }

    O(∩_∩)O,20220423,下面是我参考的内容


    转~~~~~由于网上版本太多,不知道谁是原版,so~不标地址了

    mb_strwidth($str, $encoding) 返回字符串的宽度

    $str 要计算的字符串

    $encoding 要使用的编码,如 utf8、gbk

    mb_strimwidth($str, $start, $width, $tail, $encoding) 按宽度截取字符串

    $str 要截取的字符串

    $start 从哪个位置开始截取,默认是0

    $width 要截取的宽度

    $tail 追加到截取字符串后边的字符串,常用的是 ...

    $encoding 要使用的编码

    下边给大家实例演示:

    <?php
    /**
     * utf8 编码格式
     * 1个中文占用3个字节
     * 我们希望的是1个中文占用2个字节,
     * 因为从宽度上看2个英文字母占用的位置相当于1个中文
     */
    // 测试字符串
    $str = 'aaaa啊啊aaaa啊啊啊aaa';
    echo strlen($str); // 只用strlen输出为25个字节
    // 必须指定编码,不然会使用php的内码 mb_internal_encoding()可以查看内码
    // 使用mb_strwidth输出字符串的宽度为20使用utf8编码
    echo mb_strwidth($str, 'utf8'); 
    // 只有宽度大于10才截取
    if(mb_strwidth($str, 'utf8')>10){
        // 此处设定从0开始截取,取10个追加...,使用utf8编码
        // 注意追加的...也会被计算到长度之内
        $str = mb_strimwidth($str, 0, 10, '...', 'utf8');
    }
    // 最后输出 aaaa啊... 4个a算4个 1个啊算2个 3个点算3个 4+2+3=9
    // 是不是很简单啊,有的人说了为什么是9个不是10个吗?
    // 因为正好“啊”的后边还是“啊”,中文算2个,9+2=11 超出了设定,所以去掉1个就是9了
    

    下边再给大家介绍一些其它函数吧: ...

    立即注册
    更新于:2022-04-23 02:23:36

    php如何查看扩展是否开启

    用php -m命令查看PHP开启了那些扩展。php -m 在哪里运行?

    在命令行窗口,windows在cmd里,Linux直接在命令行运行

    不过如果没有配置php的路径的话,可以直接切换到php版本包含php.exe的目录下运行。

    一、总结

    一句话总结:php -m

    1、查看php已安装扩展命令 ?

    php -m

    2、phpinfo();这是最常用的方法,但那么多扩展一时还真不太好找。?

    533f3f93a6_normal.png

    3、extension_loaded()方法把想要知道是否开启的扩展传进去,他会返回布尔类型的值;?

    de6ca5226f_normal.pnga3faf79e2c_normal.png

    4、当然我们也可以通过判断扩展库下的方法是否存在,来判断库是否已经被加载这时我们要用到function_exists()方法来判断;?

    7a491198be_normal.png5151792e96_normal.png

    5、最后当然是直接调用函数,看看可以执行不;这里用gd_info()作为 测试?

    64762f9691_normal.png

    6、结尾教大家一个获取一个库下所有函数的方法get_defined_functions()?

    4b4cef222e_normal.png

    7、php快速查看扩展的版本信息?

    命令为:

    php --ri 扩展名。

    例如:

    php --ri memcached

    结果如下:

    php --ri memcached

    memcached

    memcached support => enabled

    Version => 2.2.0

    ...(这里是省略的n多的版本信息文字)

    8、比如查看php已安装扩展命令的语句:php -m 在哪里运行?

    在windows命令行窗口,这是windows命令

    不过如果没有配置php的路径的话,可以直接切换到php版本包含php.exe的目录下运行:

    比如:D:\software\code\phpStudy2018\PHPTutorial\php\php-5.6.27-nts>php -m

    f8485e0d49_normal.png

    9、PHP开启PDO和PDO_MySQL扩展的方法?

    PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。 ...

    立即注册
    更新于:2022-05-22 18:09:18

    CURL超时时间设置

    一次完整的http请求,一般包含三个步骤:

    1. 通过DNS把域名解析成IP
    2. 通过IP地址连接到目标主机
    3. 获取目标主机数据(1、给目标主机输出http请求头,以\r\n\r\n结尾;2、获取目标主机传过来的数据)

    php 的 curl 对以上三个步骤都有设置超时时间的方法

    1、保存DNS信息时间

    CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。

    2、连接超时时间

    CURLOPT_CONNECTTIMEOUT以秒为单位。如果设置为0,则无限等待。

    CURLOPT_CONNECTTIMEOUT_MS 以毫秒为单位。如果设置为0,则无限等待。

    3、执行超时时间(DNS解析+连接+提交请求数据+获取请求数据? 或是提交请求数据+获取请求数据 ?)

    CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。...

    立即注册
    更新于:2024-10-02 23:30:45

    PHP preg_quote() 函数

    https://www.runoob.com/php/php-preg_quote.html

    语法

    string preg_quote ( string $str [, string $delimiter = NULL ] )
    

    preg_quote() 需要参数 str 并向其中 每个正则表达式语法中的字符前增加一个反斜线。 这通常用于你有一些运行时字符串 需要作为正则表达式进行匹配的时候。

    正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

    参数说明:

    • $str: 输入字符串。
    • $delimiter: 如果指定了可选参数 delimiter,它也会被转义。这通常用于 转义 PCRE 函数使用的分隔符。 / 是最通用的分隔符。

    返回值

    返回转义后的字符串。

    实例

    实例 1

    <?php $keywords = '$40 for a g3/400'; $keywords = preg_quote($keywords, '/'); echo $keywords; ?>

    执行结果转义了 $ 和 / 特殊字符,如下所示:

    返回 \$40 for a g3\/400
    

    将文本中的单词替换为斜体

    <?php //在这个例子中,preg_quote($word) 用于保持星号原文涵义,使其不使用正则表达式中的特殊语义。 $textbody = "This book is *very* difficult to find."; $word = "*very*"; $textbody = preg_replace ("/" . preg_quote($word) . "/", "<i>" . $word . "</i>", $textbody); echo $textbody; ?> ...

    立即注册
    更新于:2020-04-22 01:34:11

    PHP str_ireplace() 函数

    https://www.feiniaomy.com/post/378.html

    str_ireplace():查找与替换字符串中的指定内容,不区分大小写

    语法:

    str_ireplace(find,replace,string,count)
    复制

    参数:

    find:必需。规定要查找的值。

    replace:必需。规定替换 find 中的值的值。

    string:必需。规定被搜索的字符串。

    count:可选。一个变量,对替换数进行计数。

    例:PHP查找并替换字符串中的指定字符

    示例代码:

    <?php
    $str = 'hello word!';
    echo str_ireplace('hello','hi',$str);
    ?>
    复制

    输出结果:

    hi word!
    复制

    例:PHP不区分大小写查换并替换字符串中的批定字符

    示例代码:

    <?php
    //声明页面编码方式,不然中文乱码
    //飞鸟慕鱼博客
    header("Content-type: text/html; charset=utf-8");
    $str = '我的博客网站是:FEINIAOMY.COM';
    echo str_ireplace('FEINIAOMY.COM','feiniaomy.com',$str);
    ?>
    复制

    输出结果:

    我的博客网站是:feiniaomy.com
    复制

    例:PHP查找替换数组中的元素,并输出替换的数量

    示例代码:...

    立即注册
    更新于:2020-04-22 01:35:57

    查看php位置

    1.可以利用find / -name php.ini 查找一下,系统是否有php的配置文件

    2.利用netstat -ntpl 查看9000端口是否在运行
    3.如果9000端口存在,可以使用lsof -i:9000查看文件位置

    4.另外,如果系统已经安装了php,你还可以用php -v 查看版本号,前提是设置环境变量!...

    立即注册
    更新于:2021-12-14 07:59:59

    php7.4 查看版本

    这里要注意下,命令和之前的版本不同

    php74 -v ,

    [root@10-7-188-37 ~]# php74 -v
    PHP 7.4.26 (cli) (built: Nov 16 2021 15:31:30) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies

    如果输入php -v,会提示没有该命令:-bash: php: command not found...

    立即注册
    更新于:2021-12-14 08:01:33

    PHP提示 cURL error 60: SSL certificate problem: unable to get local issuer certificate

    下载cacert.pem,并放在php对应目录文件夹下

    php5.6以上的版本会出现这种问题

    解决办法:

    访问https://curl.haxx.se/docs/caextract.html,下载cacert.pem,在php.ini文件添加...

    立即注册
    更新于:2021-12-24 22:18:15

    php过滤表单输入的emoji表情

    1.过滤emoji表情的原因

      在我们的项目开发中,emoji表情是个麻烦的东西,即使我们可以能存储,也不一定能完美显示,因为它的更新速度很快:在iOS以外的平台上,例如PC或者android。如果你需要显示emoji,就得准备一大堆emoji图片并使用第三方前端类库才行。即便如此,还是可能因为emoji图片不够全而出现无法显示的情况
    在大多数业务场景下,emoji也不是非要不可的。我们可以适当地考虑干掉它,节约各种成本。

    2.php过滤emoji原理

      Emoji (絵文字,词义来自日语えもじ,e-moji,moji在日语中的含义是字符)是一套起源于日本的12x12像素表情符号,由栗田穣崇(Shigetaka Kurit)创作,最早在日本网络及手机用户中流行。自苹果公司发布的iOS5输入法中加入了emoji后,这种表情符号开始席卷全球,目前emoji已被大多数现代计算机系统所兼容的Unicode编码采纳,普遍应用于各种手机短信和社交网络中。近期,更是有不少网友用emoji图案玩猜字游戏,享受这种表情文化带来的乐趣。

    关于emoji的发音:很多人第一眼见到emoji便会下意识将其误读作“一磨叽”,其实不然,emoji音译过来大概读作“诶磨叽”,当中“e”的发音颇似字母abc的a的发音。

    最初日本的三大电信运营商各自有不同的字符定义,分别是DoCoMo、KDDI和Softbank。随着iOS内置了Softbank的版本,emoji在全球范围内风靡(iOS5版本以前)。而Google又自己定义了一套emoji字符。iOS5以后,apple采用了unicode定义的emoji字符(iOS5版本以后)。

    unicode定义的emoji是四个字符,softbank为3个字符,emoji的四个字符从存储到展示对应没有做过考虑的系统来说,简直就是灾难。

    3.针对unicode定义的emoji表情过滤

      ①.unicode定义的emoji是四个字符,根据这个原理进行过滤...

    立即注册
    更新于:2021-12-25 12:30:02

    linux下安装php的Exif扩展笔记!(用LNMP一键安装脚本安装的php)

    没安装Exif扩展,这个PHP安装不支持读取Exif数据。
     Intervention \ Image \ Exception \ NotSupportedException
    Reading Exif data is not supported by this PHP installation.

    39a68d352c_normal.png

    宝塔上直接安装很方便

    1e034c882c_normal.png

    linux安装Exif扩展

    #查看已安装的扩展:
    /usr/local/php/bin/php -m
    #修改php配置文件,注释掉disable_functions nano /usr/local/php/etc/php.ini
    安装exif扩展,进入lnmp一键安装包解压目录,解压php,进入exif目录
    cd /home/lnmp1.6/src
    tar -xjf php-7.2.22.tar.bz2
    cd php-7.2.22/ext/exif/
    /usr/local/php/bin/phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config
    make && make install
    make test

    nano /usr/local/php/etc/php.ini #编辑php.ini底部追加extension = exif.so #或者是去掉注释 extension=mbstring和extension=exif
    /etc/init.d/php-fpm restart #重启php
    /usr/local/php/bin/php -m #查看扩展是否安装成功

    7fed4ed531_normal.png ...

    立即注册
    更新于:2022-06-17 06:32:34

    configure: error: Cannot find ldap.h 解决方法

    在用wordpress时需要开启ldap,在安装php-ldap时遇见了configure: error: Cannot find ldap.h

    这个报错,百度了你知道的都是一个答案,尝试了不好使。

    终于在必应上看到了另一种解决方式 apt-get install libldap2-dev

    然后就ok了。记录一下吧。...

    立即注册
    更新于:2022-06-17 06:41:24

    一个PHP针对数字的加密解密类

    <?php
    namespace app;
    /**
    * 加密解密类
    * 该算法仅支持加密数字。比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密。
    * @author 深秋的竹子
    * @version alpha
    * @加密原则 标记长度 + 补位 + 数字替换
    * @加密步骤:
    * 将a-z,A-Z,0-9 62个字符打乱,取前M(数字最大的位数)位作为 标记长度字符串,取第M+1 到第M+10位为数字替换字符串,剩余的为补位字符串
    * 1.计算数字长度n,取乱码的第n位作为标记长度。
    * 2.计算补位的长度,加密串的长度N -1 - n 为补位的长度。根据指定的算法得到补位字符串。
    * 3.根据数字替换字符串替换数字,得到数字加密字符串。
    * 标记长度字符 + 补位字符串 + 数字加密字符串 = 加密串
    * Usage:
    * $obj = new XDeode(9);
    * $e_txt = $obj->encode(123);
    * echo $e_txt.<br/>;
    * echo $obj->decode($e_txt);
    */
    class XDeode{
    private $strbase = "Flpvf70CsakVjqgeWUPXQxSyJizmNH6B1u3b8cAEKwTd54nRtZOMDhoG2YLrI";
    private $key,$length,$codelen,$codenums,$codeext;

    // 初始化
    function __construct($length = 9,$key = 2543.5415412812){
    $this->key = $key;
    $this->length = $length;
    $this->codelen = substr($this->strbase,0,$this->length);
    $this->codenums = substr($this->strbase,$this->length,10);
    $this->codeext = substr($this->strbase,$this->length + 10);
    }

    // 编码
    function encode($nums){
    $rtn = "";
    $numslen = strlen($nums);
    //密文第一位标记数字的长度
    $begin = substr($this->codelen,$numslen - 1,1);
    //密文的扩展位
    $extlen = $this->length - $numslen - 1;
    $temp = str_replace(., , $nums / $this->key);
    $temp = substr($temp,-$extlen);
    $arrextTemp = str_split($this->codeext);
    $arrext = str_split($temp);
    foreach ($arrext as $v) {
    $rtn .= $arrextTemp[$v];
    }
    $arrnumsTemp = str_split($this->codenums);
    $arrnums = str_split($nums);
    foreach ($arrnums as $v) {
    $rtn .= $arrnumsTemp[$v];
    }
    return $begin.$rtn;
    }
    //解码
    function decode($code){
    $begin = substr($code,0,1);
    $rtn = ;
    $len = strpos($this->codelen,$begin);
    if($len!== false){
    $len++;
    $arrnums = str_split(substr($code,-$len));
    foreach ($arrnums as $v) {
    $rtn .= strpos($this->codenums,$v);
    }
    }

    return $rtn;
    }
    }

    ?>

    一个PHP针对数字的加密解密类,该类仅支持加密数字。比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密,需要的朋友可以参考下:...

    立即注册
    更新于:2022-06-21 10:30:19

    php的Memcache addServer 后set失败

    遇到的问题

     $m = new Memcache;
     $m->connect('localhost', 11211);
     // $m->addServer('localhost', 11211);
     // echo $m->getServerStatus('localhost', 11211);die;
     // var_dump($m);die;
      $m->set('foo','11');
      var_dump($m->get('foo'));die;
      echo $m->get('foo');die;

    一直是无法set成功...

    立即注册
    更新于:2023-09-05 21:58:55

    PHP8 报错Required parameter $r follows optional parameter

    上面这种写法在PHP5-PHP7下不报错,但在PHP8下报错正确的方法是有默认值的参数必须放在任何非默认参数的右侧即改成如下:

    在PHP8时,后台会有Deprecated: Required parameter $r follows optional parameter $haveclass in connect.php这样的错误。

    查起原因,PHP8下对函数的默认参数的顺序比较严格,

    比如connect.php 3073行代码:

    //替换列表模板/标签模板/搜索模板
    function ReplaceListVars($no,$listtemp,$subnews,$subtitle,$formatdate,$url,$haveclass=0,$r,$field,$docode=0){
    				
    上面这种写法在PHP5-PHP7下不报错,但在PHP8下报错正确的方法是有默认值的参数必须放在任何非默认参数的右侧即改成如下:
    function ReplaceListVars($no,$listtemp,$subnews,$subtitle,$formatdate,$url,$r,$field,$haveclass=0,$docode=0){
    	global $empire,$public_r,$class_r,$class_zr,$fun_r,$dbtbpre,$emod_r,$class_tr,$level_r,$navclassid,$etable_r;
    	if($haveclass)
    				

    发布于 2022-02-15 20:44 ...

    立即注册
    更新于:2023-11-26 11:28:09

    php执行shell不阻塞方法

    大家都知道php执行系统命令的方法有: system() 输出并返回最后一行shell结果。 exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。 passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

    这些方法都会等待命令执行完毕后才会继续执行后续的程序 不阻塞可以将命令输出的内容写入系统的一个回收站文件,这样程序就不会阻塞 例如:

    shell_exec("/use/local/php/bin/php /www/t.php  > /dev/null 2>&1 &");

    shell中可能经常能看到:>/dev/null 2>&1

    命令的结果可以通过%>的形式来定义输出

    /dev/null 代表空设备文件

    代表重定向到哪里,例如:echo “123” > /home/123.txt 1 表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于”1>/dev/null” 2 表示stderr标准错误 & 表示等同于的意思,2>&1,表示2的输出重定向等同于1

    那么本文标题的语句: 1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。 2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。...

    立即注册
    更新于:2024-06-23 02:26:14
    相关内容

    Mysql知识学习

    MySQL 8.0 索引特性1-函数索引

    MySQL字符串函数substring:字符串截取

    Mysql的临时变量取值3例

    mysql查找字符串出现位置

    mysql 更改AUTO_INCREMENT 失败的解决办法

    MYSQL 数据库导入导出命令

    mysql如何判断不包含某个字符串

    Mysql中不要用操作符和函数名等等来命名字段

    ORM 实例教程

    Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结

    MySQL 中 datetime 和 timestamp 的区别与选择

    Invalid default value for ‘updated_at‘

    设置MySQL的group_concat_max_len长度为最大值

    MySQL中concat()、concat_ws()、group_concat()函数使用技巧与心得

    mysql的left join和inner join的效率对比,以及如何优化

    mysql 索引优化十例

    MySQL数据表中有自增长主键时如何插入数据

    bill_20210927.sql">mysqldump按条件导出mysql数据库数据

    CSS3知识整理

    transition属性-CSS3知识整理

    Bootstrap-排版

    Bootstrap-响应式工具

    CSS3的rem详解及使用方法 - CSS3知识整理

    phpmyadmin问题整理

    phpmyadmin解决Failed to set session cookie. Maybe you are using HTTP...

    phpmyadmin 登录报错 mysqli_real_connect(): (HY000/2002):

    PhpMyAdmin 配置文件现在需要一个短语密码的解决方法

    PHP的兼容性问题整理

    Trying to access array offset on value of type null(PHP的版本兼容问题)

    推荐内容

    分享几个好用的bt搜索bt资源下载网址网站

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享

    全网最新bt磁力搜索引擎bt资源bt网站网址分享

    人气美女女优百度指数排行榜(波多野结衣,苍井空,三上悠亚,深田咏美,桥本有菜,北条...

    最强人造人深田咏美,业界的社交女王

    人生起起落落的三上悠亚,成名前的清纯风,怎么搭配出来的?

    业内第一大长腿,桥本有菜的腿究竟有多长

    波多野结衣,岛国业界著作最多的超级劳模

    日本AV界NO.1,苍井空是多少宅男的疯狂?

    美女女优视频混剪 This Girl-Laza Morgan

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享