分类 php 下的文章

php显示错误提示信息

调试程序的时候 就希望看到错误信息到底是什么,
年级大了,每次要打开这个开关都要搜索下,今天记录下,以后直接来这里了,哈哈哈。。。

ini_set("display_errors", "On"); 
error_reporting(E_ALL | E_STRICT);

永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。

今天碰到一个奇葩的事情:

用户有书币888 看一本刚好需要 8.88元的书
然而看不了,提示需要充值。怎么能这么不要脸呢,明显可以看阿,这不科学阿,然而这却是真实的,测试居然真和用户反馈一样,不是说好的PHP是弱类型语言吗?

现在把过程写一下:

   $a=把钱转书币  8.88*100
   $b=账户余额 888

比较$a和$b 的大小

if($b>=$a){可以看}else{不可以看,跳充值页面}

奇葩的是 这里 会跳到{不可以看,跳充值页面} 这里的代码块。这里为什么会出现这种情况呢?
其他过程不说了, 就列出关键的判断
var_dump($b) 和 var_dump($a) 分别打印出来 就知道为什么了。

结果为:int(888) float(888) 

这里的解决办法是 把 float 转成int

$a=intval($a);

这样问题就解决了。
再看看 PHP 的 float 的文档 https://www.php.net/manual/zh/language.types.float.php
真是学艺不精阿。

php 并发访问高了之后默认的配置不够用了

一般搭建环境 apt install php nginx mysql .....
采用默认的配置,系统就能很好的运行了,但是随着 用户的增加 并发的增加
php默认配置 已不能满足要求

Log::server reached pm.max_children setting (5), consider raising it

执行简单的 php需要5秒,查看php的日志会得到上面的内容,那么下面这些项目(配置)的合理设置将是上面这种现象的解药

pm dynamic(动态) static(静态) 
pm.max_children:静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大进程数(这里要注意pm.max_spare_servers的值只能小于等于pm.max_children)
pm.start_servers:动态方式下的起始php-fpm进程数量 注释给的默认的算法:start_servers=min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers:动态方式空闲状态下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式空闲状态下的最大php-fpm进程数量。

pm设置为静态方式 时 只有max_children 会生效
pm设置为动态方式 时 下面4项参数都会生效

PHP 在命令行(cmd/shell)下传参的方式

1.预定义变量 $argv

这个变量 包含当运行于命令行下时传递给当前脚本的参数的数组。
数组的地一个元素 为脚本名称,后面的元素为参数
例如: 
$test.php a b 1
$argv[0]='test.php'
$argv[1]='a'
$argv[2]='b'
$argv[3]=1
而$argc — 传递给脚本的参数数目

2.函数getopt array getopt ( string $options [, array $longopts [, int &$optind ]] )

options
该字符串中的每个字符会被当做选项字符,匹配传入脚本的选项以单个连字符(-)开头。 比如,一个选项字符串 "x" 识别了一个选项 -x。 只允许 a-z、A-Z 和 0-9。
longopts
选项数组。此数组中的每个元素会被作为选项字符串,匹配了以两个连字符(--)传入到脚本的选项。 例如,长选项元素 "opt" 识别了一个选项 --opt。
optind
If the optind parameter is present, then the index where argument parsing stopped will be written to this variable.
options 可能包含了以下元素:

单独的字符(不接受值)
后面跟随冒号的字符(此选项需要值)
后面跟随两个冒号的字符(此选项的值可选)

更多知识参考 http://php.net/manual/zh/function.getopt.php

又get到一个装波技能-php cmd 下进度条展示

function bar($total,$i){
    printf("进度: [%-50s] %d%% 完成\r", str_repeat('#',$i/$total*50), $i/$total*100);
}

这个表示: [%-50s]填充 50个#号 %d%% 百分之多少 str_repeat('#',$i/$total*50)
重复多少个# 格式化%d的源

如果需要双进度来展示

bar($total,$i);# 子进度
echo "\n";
bar($total,$i);#总进度

深度录屏_选择区域_20180803181349.gif