xh-xiaohan

一、PHP代码存在延时输出

  问题出现:在phpstudy集成环境搭建thinkphp6项目时,调试时候发现控制器输出存在延时情况,无法及时获取数据。

  解决方案:在项目搭建过程中使用php版本为7.4.3,phpstudy的php7.4.3版本默认开启了Zend Opcache扩展,开发阶段关闭此扩展即可。

       php.ini配置文件中opcache.enable配置的值将1改为0

       opcache.enable=0

二、Thinkphp6开发阶段的页面存在缓存

  问题出现:测试html页面时,发现很多时候数据和相关资源加载存在延时,无法进行有效的测试和调试。

  解决方案:thinkphp6开启了模板缓存,提高访问效率。开发过程中可先关闭模板缓存。

       框架中的config文件夹中的view.php配置中加上如下配置

  // 关闭模板编译缓存,设为false则每次都会重新编译
    \'tpl_cache\'=>false,

三、PHP中运算存在的偏差

问题:PHP数学运算  加乘除 运算出现数偏差,问题如下:

$num = 0.7+0.1;
print_r($num);
die;

上面代码输出肯定是没问题得0.8,但这数据被json_encode()之后就出了偏差

$num = 0.7+0.1;
print_r(json_encode($num));
die;

上面的代码则会输出0.7999999999999999  经测试  加乘除 都会出现此情况  减法运算不会出现

解决方案:PHP中进行数学运算时,可以使用PHP的bc数学函数进行计算,即可得到正确的值。

$num = bcadd(0.7,0.1,2);
print_r(json_encode($num));
die;

四、phpstudy集成环境(版本8.1.0.7)下,闲来无事通过PHP代码模拟百万级数据入库问题(以前都是自建的开发环境 未出现此问题)。

问题:PHP程序写完后进行入库操作时候,更改了PHP运行时间以及运行内存(php、mysql未出现错误日志)之后,程序走到40秒左右就崩掉报错。

描述:最开始一直以为PHP和MYSQL的配置文件出现问题了,在上面耽搁了大量时间。apache的错误日志也没有明确的实际错误,至少不是程序崩掉就出现。解决方案也是找了蛮久看到相似问题有位大佬提出的https://www.xp.cn/wenda/884.html

解决方案:apache的配置文件httpd.cof中加入如下代码,即可解决。

<IfModule mod_fcgid.c>
 FcgidProcessLifeTime 8200
 FcgidIOTimeout 8200
 FcgidConnectTimeout 4000
</IfModule>

五、html页面处理PHP返回的有序json数据和无序json数据的问题

问题:今天同事遇到的一个问题,数据经过PHP排序之后的数组(变成无序)json_encode()返回数据后循环出现异常,以前数据为有序,代码正常。排之后变成无序数组,以前的循环代码出现问题。

数组示例:

 $data = array(
            \'2\'=>array(
                \'jl\' => \'小寒1\',
                \'xf\' => 81557,
                \'hbxf\' => 62732,
                \'hbcz\' => 18825,
                \'hbbfb\' => 30.01,
                \'tbxf\' => 72713,
                \'tbcz\' => 8844,
                \'tbbfb\' => 12.16,
                \'mtd\' => 1372941,
                \'qtd\' => 2782291,
                \'khs\' => 19,
                \'yxs\' => array(
                    0 => Array
                    (
                        \'yx\' => \'小寒2\',
                        \'cur_consumption_yx\' => 41,756,
                        \'hbxf_yx\' => 27590,
                        \'hbcz_yx\' => 14165,
                        \'hbbfb_yx\' => 51.34,
                        \'tbxf_yx\' => 41247,
                        \'tbcz_yx\' => 509,
                        \'tbbfb_yx\' => 1.23,
                        \'mtd_yx\' => 693326,
                        \'qtd_yx\' => 1255756,
                        \'khs_yx\' => 7,
                    ),
                    2 => array(
                        \'yx\' => \'小寒3\',
                        \'cur_consumption_yx\' => 23,121,
                        \'hbxf_yx\' => 19018,
                        \'hbcz_yx\' => 4103,
                        \'hbbfb_yx\' => 21.57,
                        \'tbxf_yx\' => 14337,
                        \'tbcz_yx\' => 8783,
                        \'tbbfb_yx\' => 61.26,
                        \'mtd_yx\' => 368597,
                        \'qtd_yx\' => 748772,
                        \'khs_yx\' => 4
                    ),

                    1 => array(
                        \'yx\' => \'小寒4\',
                        \'cur_consumption_yx\' => 16681,
                        \'hbxf_yx\' => 16124,
                        \'hbcz_yx\' => 557,
                        \'hbbfb_yx\' => 3.46,
                        \'tbxf_yx\' => 17129,
                        \'tbcz_yx\' => -448,
                        \'tbbfb_yx\' => -2.62,
                        \'mtd_yx\' => 311017,
                        \'qtd_yx\' => 777763,
                        \'khs_yx\' => 12,
                    )

                )

            ),
            \'3\'=>array(
                \'jl\' => \'小寒5\',
                \'xf\' => 267454,
                \'hbxf\' => 248614,
                \'hbcz\' => 18841,
                \'hbbfb\' => 7.58,
                \'tbxf\' => 266019,
                \'tbcz\' => 1436,
                \'tbbfb\' => 0.54,
                \'mtd\' => 6597550,
                \'qtd\' => 16793696,
                \'khs\' => 71,
                \'yxs\' => array(
                    3 => array(
                        \'yx\' => \'小寒6\',
                        \'cur_consumption_yx\' => 75649,
                        \'hbxf_yx\' => 69782,
                        \'hbcz_yx\' => 5867,
                        \'hbbfb_yx\' => 8.41,
                        \'tbxf_yx\' => 77636,
                        \'tbcz_yx\' => -1987,
                        \'tbbfb_yx\' => -2.56,
                        \'mtd_yx\' => 1854390,
                        \'qtd_yx\' => 4499984,
                        \'khs_yx\' => 14,
                    ),

                    0 => array(
                        \'yx\' => \'小寒7\',
                        \'cur_consumption_yx\' => 37496,
                        \'hbxf_yx\' => 34339,
                        \'hbcz_yx\' => 3157,
                        \'hbbfb_yx\' => 9.19,
                        \'tbxf_yx\' => 28751,
                        \'tbcz_yx\' => 8745,
                        \'tbbfb_yx\' => 30.42,
                        \'mtd_yx\' => 813342,
                        \'qtd_yx\' => 1970,128,
                        \'khs_yx\' => 18,
                    ),
                    1 => array(
                        \'yx\' => \'小寒8\',
                        \'cur_consumption_yx\' => 30,919,
                        \'hbxf_yx\' => 28626,
                        \'hbcz_yx\' => 2293,
                        \'hbbfb_yx\' => 8.01,
                        \'tbxf_yx\' => 51056,
                        \'tbcz_yx\' => -20137,
                        \'tbbfb_yx\' => -39.44,
                        \'mtd_yx\' => 1352496,
                        \'qtd_yx\' => 4498428,
                        \'khs_yx\' => 19,
                    ),

                    2 => array(
                        \'yx\' => \'小寒8\',
                        \'cur_consumption_yx\' => 123390,
                        \'hbxf_yx\' => 115867,
                        \'hbcz_yx\' => 7523,
                        \'hbbfb_yx\' => 6.49,
                        \'tbxf_yx\' => 108576,
                        \'tbcz_yx\' => 14814,
                        \'tbbfb_yx\' => 13.64,
                        \'mtd_yx\' => 2577322,
                        \'qtd_yx\' => 5825156,
                        \'khs_yx\' => 21,
                    )

                )

            )
        );
View Code

接收通过ajax接收的数据,接收数据后for循环、以及$().each();两种循环都无法正常读取。

解决方案:

  1、PHP对数据进行重构,使其变成一个有序数组(键值不重要的情况)

  2、更换循环方式,使用$.each()循环方式进行输出,示例和输出如下:

         //本人常用循环方式,无法循环无序json数据
        $(data).each(function (index,val) {
            console.log(val);
        });
        console.log(\'--------------------------------------------------------------\');
        //>>可正确循环无序json数据的方式
        $.each(data,function (index,val) {
          console.log(val);
        })

结果:

 6、纪录一次PHPExcel的异常问题

问题出现:正常运行许久后,某一天出现服务器导出功能出现500异常

问题分析:

①本地拉取线上最新代码,但是开始并未拉取最新数据库,用的还是最开始的测试数据

②搭建本地测试环境。线上用的IIS、本地用的apache环境(对IIS不是很熟,搭建IIS环境自己会觉得浪费时间) ,PHP版本用的也不一致。

注:以上两步也导致后面解决问题浪费了不少时间,可的话请尽量和线上保持一致。

 

③开始自己测试本地导出功能代码,怀疑是否最新数据导致的异常。(正常到了这一步就应该能确定是数据问题,但由于上面两步的操作,第④就导致我后面排除了这个问题)

④因为上报异常者只给了这个异常,自己开始对最新数据进行导出测试。由于上面环境配置问题,确实所有数据本地导出都没问题,排除了数据异常。

⑤IIS环境本地搭建不是很熟也不是很方便,然后怀疑PHP版本异常。本地切换到服务器相同版本,经过测试后本地任然正常导出(前面导致的浪费时间操作)。

⑥因为选择导出的数据量大,怀疑内存、执行时间问题。经测试后排出(前面导致的浪费时间操作)

⑦怀疑是否IIS和Apache的配置导致,查看相关错误日志、测试(前面导致的浪费时间操作)

⑧因为前面本地所有数据都能正常导出过,到现在也没怀疑数据有问题。然后在线上测试另外一个相似的导出功能发现能正常导出,逐渐开始怀疑数据是否存在异常字符。最后在主管的帮助下定位到一条数据。

⑨刚好这条数据的特殊字符较多,开始分段定位到底哪个字符影响,最后找到问题

问题结果:

此次异常定位到的字符是一个 ‘=’,进行相关分析,最后精确定位的是文本开头的\'=\'。
在服务器的IIS环境下,PHPexcel文本开头的等号会被解析为excel中数学表达式输出,但由于等号后面并不是数据表达式,然后导致无法解析输出到excel文件。

在Apache2.4环境下,PHPExcel文本开头的等号不会被认为是数学表达式

分类:

技术点:

相关文章:

  • 2022-01-20
  • 2021-08-13
  • 2021-05-06
  • 2021-10-03
  • 2018-04-23
  • 2021-10-03
  • 2021-08-06
  • 2022-01-01
猜你喜欢
  • 2021-12-18
  • 2021-12-16
  • 2021-08-13
  • 2021-12-18
  • 2021-05-08
  • 2022-01-01
  • 2021-09-02
相关资源
相似解决方案