邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

Mac下使用clion调试php源码

=====第一大步安装php=====

1、安装libiconv依赖

brew install libiconv

2、安装php
wget https://www.php.net/distributions/php-7.4.22.tar.gz
tar -zxvf php-7.4.22.tar.gz
cd php-7.4.23
./configure --prefix=/Users/action/soft/php7 --with-config-file-path=/Users/action/soft/php7/etc --with-iconv =/usr/local/opt/libiconv --enable-debug   
make
make install

ps:: 安装路径自己指定就好,iconv的路径写安装路径

如果再编译过程中报错且和iconv相关,查看文章末尾pkg-config相关内容,否则直接忽略


=====第二大步使用clion=====

1.==导入项目==

New CMake Project from  Sources  -> import as a new CMake project 

2.==编辑CMakeLists.txt==

内容如下 (根据自己的路径来)

set(PHP_SOURCE /Users/action/code/source_code/php-7.4.22)
include_directories(${PHP_SOURCE}/ext/bcmath)
include_directories(${PHP_SOURCE}/ext/bcmath/libbcmath/src)

......

include_directories(${PHP_SOURCE}/Zend)
include_directories(${PHP_SOURCE})
add_custom_target(makefile COMMAND make && make install WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

这个时候 软件左上角会出现如下标识

image2021-9-2_11-52-11.png

3、==点击 Edit Configurations,配置如下:(配置文件路径根据自己的需要来)==

image2021-9-2_11-56-24.png

4、==然后在cli模式文件下 打个断点 sapi/cli/php_cli.c==

image2021-9-2_11-53-58.png

5、==点击右上角的debug按钮就可以进行操作了==

image2021-9-2_11-54-55.png



===================分割线=======================


====pkg-config相关====

==查看==
pkg-config --list-all

==brew安装的东西都可以直接出现在pkg-config列表里面==
export PKG_CONFIG_PATH=$(find /usr/local/Cellar -name 'pkgconfig' -type d | grep lib/pkgconfig | tr '\n' ':' | sed s/.$//)

==安装pkg-config==
wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz (下载就复制链接去手动下载)
tar -xf pkg-config-0.28.tar.gz
cd pkg-config-0.28
./configure --with-internal-glib
make
sudo make install


====php生命周期====

http://xingdong365.com/program/345.html

[docker-es]-None of the configured nodes are available

问题:

springboot连接我用docker启动的es服务时报错,None of the configured nodes are available


解决方案:

1、先通过http://localhost:9200/查看参数cluster_name 和 springboot里配置的参数cluster_name是否一致,如果不一致,要修改成一致

2、如果通过修改cluster_name参数仍然无法解决,这时候就要看下Spring Data Elasticsearch 依赖 和 Elasticsearch的版本对应关系了

Spring Data Elasticsearch 
Elasticsearch
3.2.x
6.7.2
3.1.x 
6.2.2
3.0.x 
5.5.0
2.1.x
2.4.0
2.0.x 
2.2.0
1.3.x 
1.5.2



SpingBoot修改启动文字图标


1、进入 src/main/resources 目录下,新建banner.txt 文件

2、进入字母转字符串,字母转字符串 ,制作一个你想要的,然后复制到banner.txt文件中即可,再次启动就可以看到了


WX20210420-212031.png

SpringBoot启动失败(Reason: Failed to determine a suitable driver class)


原因:启动时不需要数据源加载,但加载了数据源,数据源获取失败,异常报错,启动失败。


在启动类的@SpringBootApplication加上以下代码


@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class SpringbootEsApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootEsApplication.class, args);
    }

}


PHP 两个有序数组合并成一个有序数组
<?php

    $a = [1,3,5,7,9,11];

    $b = [2,4,6,8,10];

    function test_sort($a,$b){

        $c = [];
        $aCount = count($a);
        $bCount = count($b);
        $i = $j = 0;

        while($i < $aCount && $j < $bCount){
            if($a[$i] > $b[$j]){
                $c[] = $b[$j];
                $j++;
            }elseif($a[$i] < $b[$j]){
                $c[] = $a[$i];
                $i++;
            }else{
                $c[] = $a[$i];
                $c[] = $b[$j];
                $i++;
                $j++;
            }
        }

        while($i < $aCount){
            $c[] = $a[$i];
            $i++;
        }

        while($j < $bCount){
            $c[] = $a[$j];
            $j++;
        }

        return $c;
    }


    function test_sort2($a,$b){

        $c = [];
        $aCount = count($a);
        $bCount = count($b);
        $i = $j = 0;


        while($i < $aCount || $j < $bCount){

            if($i < $aCount && $j < $bCount){
                if($a[$i] > $b[$j]){
                    $c[] = $b[$j];
                    $j++;
                }elseif($a[$i] < $b[$j]){
                    $c[] = $a[$i];
                    $i++;
                }else{
                    $c[] = $a[$i];
                    $c[] = $b[$j];
                    $i++;
                    $j++;
                }
            }elseif($i < $aCount && $j >= $bCount){
                $c[] = $a[$i];
                $i++;
            }elseif($i >= $aCount && $j < $bCount){
                $c[] = $b[$j];
                $j++;
            }

        }

        return $c;

    }

    $res = test_sort2($a,$b);

    print_r($res);

php下正则匹配大字符串失败问题
问题描述:

在使用php函数preg_match匹配大字符串的时候匹配失败,而删除一半数据,则匹配成功,

解决过程:

于是在匹配结束后,调用preg_last_error()函数,查看失败原因,返回的是6,6对应的错误原因是PREG_JIT_STACKLIMIT_ERROR,

原来当字符串太大的时候,栈空间满了,直接就出错了,于是在匹配前加一下代码

ini_set('pcre.jit', 0);


解决查找的资料

1、深悉正则(pcre)最大回溯/递归限制(https://www.laruence.com/2010/06/08/1579.html)
php-bc数据函数

=====bcadd — 2个任意精度数字的加法计算=====
<?php
$a = '1.234';
$b = '5';
echo bcadd($a, $b);     // 6
echo bcadd($a, $b, 4);  // 6.2340
?>
=====bccomp — 比较两个任意精度的数字=====
<?php
echo bccomp('1', '2') . "\n";   // -1
echo bccomp('1.00001', '1', 3); // 0
echo bccomp('1.00001', '1', 5); // 1
?>
=====bcdiv — 2个任意精度的数字除法计算=====
<?php
echo bcdiv('105', '6.55957', 3);  // 16.007
?>
=====bcmod — 对一个任意精度数字取模=====
<?php
echo bcmod('4', '2'); // 0
echo bcmod('2', '4'); // 2
?>
=====bcmul — 2个任意精度数字乘法计算=====
<?php
echo bcmul('1.34747474747', '35', 3); // 47.161
echo bcmul('2', '4'); // 8
?>
=====bcpow — 任意精度数字的乘方=====
<?php
echo bcpow('4.2', '3', 2); // 74.08
?>
=====bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus=====
<?php
$a = bcpowmod($x, $y, $mod);
$b = bcmod(bcpow($x, $y), $mod);
// $a and $b are equal to each other.
?>
=====bcscale — 设置所有bc数学函数的默认小数点保留位数=====
<?php
// default scale : 3
bcscale(3);
echo bcdiv('105', '6.55957'); // 16.007
// this is the same without bcscale()
echo bcdiv('105', '6.55957', 3); // 16.007
?>
=====bcsqrt — 任意精度数字的二次方根=====
<?php
echo bcsqrt('2', 3); // 1.414
?>
=====bcsub — 2个任意精度数字的减法=====
<?php
$a = '1.234';
$b = '5';
echo bcsub($a, $b);     // -3
echo bcsub($a, $b, 4);  // -3.7660
?>


解决京东联盟广告在网页内显示不全的问题
问题描述

网站内引入了京东广告,但是内容一直显示不全,如图

jd-1.png

加入代码后
<script type="text/javascript">$('iframe').each(function(){if($(this).attr('src').indexOf('jd.com') != -1){$(this).attr('height','250px');}})</script>
显示如下(250px根据自己的情况而定)
jd-2.png


优惠券
最新微语