随笔分类 - php
php
摘要:php7.3升级后CI框架session失效session不能读取的问题
// php7.3 ci3.0.2 session unset: /^[0-9a-f]{40}$/ to /^[0-9a-z]{10,40}$/
php7.3升级后CI框架session失效session不能读取的问题 框架ci3.0.2,php服务器从5升级到7.x后发现session失效了 ci无法设置session的问题
根本原因在,system/libraries/Session/Session.php 中 133行: 将 /^[0-9a-f]{40}$/, 改成 /^[0-9a-z]{10,40}$/ 即可。
另外就是考虑:public/sess_save_path的读写权限问题、用户问题,需要设置为www用户可读写
chown -R www.www /home/wwwroot/xxx.xxx.com/public
阅读全文
摘要:PHP CI中include相对路径的解决方法,PHP优先相对工作目录来处理,如果路径中包含. ..的话,则只相对于工作目录,php的引用需要用绝对路径
在同一目录下可以用
引用不同目录的不能使用相对路径,比如下面这样是错误的:
php的引用需要用绝对路径
realpath()函数将删除所有符号链接,例如“ /./”、“/../”和多余的“ /”,并返回绝对路径名。
阅读全文
摘要:php 判断字符串中包含重复相同的次数 array_count_values str_split max 函数组合使用
阅读全文
摘要:php 字符串里包含某个字符多少个,包含某个字符个数
方法一:substr_count()函数是一个小字符串在一个大字符串中出现的次数:
$number = substr_count($big_string, $small_string);
方法二:用explode进行判断PHP判断字符串里包含某个字符多少个,代码如下:
$tmp = explode($big_string,$small_string);
$number = count($tmp);
阅读全文
摘要:php取最热5个号码,字符串和数组转换各种数组操作的实战例子
//字符串转成数组
$arr = str_split($hotnums);
//数组去重
$arr = array_unique($arr);
//统计数组个数
$ncount = count($arr);
//大于等于5个时处理
if($ncount >= 5){
//取排序靠前的5个
$arr = array_slice($arr,0,5);
//从小到大排序
sort($arr);
//数组转成字符串
$hotnums = implode("", $arr);
break;
}
阅读全文
摘要:pm2好用的node进程管理工具,监控进程开机自启动,java进程配置,安装Nodejs环境
PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。
pm2 是一个带有负载均衡功能的Node应用的进程管理器.
当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。
常用命令:pm2 list 查看当前进程,pm2 monit 进程监控,pm2 startup pm2 save 开机自启动设置。
安装PM2
需要先安装Nodejs环境(文章后面附有安装教程),建议使用淘宝镜像cnpm
使用cnpm命令安装全局的pm2
cnpm install -g pm2
注:java 生态自动化监控一般用:prometheus
阅读全文
摘要:Linux下删除大量文件的方法,Argument list too long报错解决办法
Linux用rm -rf * 删除php ci的sess_save_path文件夹下的文件时报错
-bash: /bin/rm: Argument list too long
删除文件中包含的小文件数量过多,通常是由于受到 shell 参数个数限制所致。
阅读全文
摘要:mysql数据库表上百万记录优化思路杂谈
我的mysql数据库表上百万记录,插入数据的时候超慢,插入一笔都差不多将近1秒钟了
有没有做索引?数据量大了一般要做分区分表处理的,实时性要求高的一般要做缓存或者数据总线分层处理的
你用的是不是ssd硬盘?ssd硬盘比机械硬盘快很多倍。
数据库光靠调参数,以经提升到最快0.007秒多一笔插入的速度了
看来还是大数据技术比较重要
调整了那些参数提升这么多?
调了很多参数,mysql、springboot、shardingsphere、druid
可能需要评估一下如何加入Hadoop来进行存储及处理区块链的数据
阅读全文
摘要:对各种开发语言优劣的讨论,入门难度,IDE,大型网站并发性,java,golang,php,python,api接口,前后端分离
现在很多有高并发要求的 java c++的接口改成golang的
有个朋友公司就是把java写的接口改成golang的,听他说的是效率提高了上百倍,节省了大量服务器
java入门比较难,要达到熟练独立开发一个网站出来需要比较长的学习时间
php Python入门很容易,要做大型网站深入也很难
php Python零基础一星期就可以入门了
java你搞一个月门都没有找到
php做个小网站还是比较快的
Python做个小工具还是很好的,一个文件就可以直接运行起来了
金融相关的用java比较多,比较成熟了,招人也容易
现在流行前后端分离了
golang java 做API接口更有优势的
Python做科学计算,自动化,人工智能的更有优势
springboot springcloud 做API还是很不错的,之前的tomcat 那些容器搞得太复杂了
阅读全文
摘要:PHP字符串去重,统计没有分割符的字符串不重复的个数
统计没有分割符的字符串不重复的个数
阅读全文
摘要:php对象复制、clone、浅复制与深复制实例详解
一、用clone(克隆)来复制对象
$obj1 = new Object();
$obj2 = clone $obj1;
clone方法会触发对象里定义的__clone魔术方法
clone操作有一个非常大的缺陷:使用clone操作复制对象时,当被复制的对象有对其它对象的引用的时候,引用的对象将不会被复制。
PHP有串行化(serialize)和反串行化(unserialize)函数,只需要用serialize()将一个对象写入一个流,然后从流中读回对象,那么对象就被复制了。在JAVA语言里面,这个过程叫做“冷藏”和“解冻”。
$obj1 = new Object();
$obj2 = unserialize(serialize($obj1));//序列化然后反序列化
使用此方案时无法触发__clone魔术方法来完成一些附加操作,但会触发被复制对象和所有被引用对象的__sleep和__wakeup魔术方法。
阅读全文
摘要:模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径
模拟退火算法(Simulated Annealing,SA)最早的思想是由N. Metropolis等人于1953年提出。1983 年,S. Kirkpatrick 等成功地将退火思想引入到组合优化领域。
来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。
它是基于Monte-Carlo(蒙特卡洛)迭代求解策略的一种随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。
常用的智能优化算法
遗传算法(Genetic Algorithm, GA)
模拟退火算法(Simulated Annealing, SA)
禁忌搜索算法(Tabu Search, TS)
神经网络 (Neural Network)
蚁群算法(Ant Colony Optimization,ACO)
爬山
阅读全文
摘要:php动态拼接变量名,可变变量,动态变量,使用花括号,使用两个$符
方式一:使用花括号,前缀部分不需要用单引号
$nums10 = 100;
$xxx*${bcount.$nums10}['m54']/$nums10
方式二:使用两个$符,先给key赋值最终的变量名称,后面才当成真正的变量使用。
$nkey = 'bcount'.$nums10;
$xxx*$$nkey['m54']/$nums10
阅读全文
摘要:php取整的几种方式,四舍五入,舍去法取整,进一法取整
方式一:round 对浮点数进行四舍五入
方式二:floor 舍去法取整 语法格式:float floor ( float value )
方式三:ceil 进一法取整 语法格式: float ceil ( float value )
阅读全文
摘要:php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断
实际需求:把sphinx返回的结果放到ssdb缓存里,要考虑到sphinx开始没有数据,挂掉后恢复的情况。
开始实用empty函数发现sphinx挂掉后返回的内容为空,sphinx恢复后也一直进入不了,后面打印出为NUll值加上is_null判断还是不行,如果sphinx为空,ssdb会返回一个false的字符串,不是boolean类型的,empty函数和is_null函数都返回true,所以还必须加上个!='false' 的判断才行。
当结果不符合预期的时候,需要多打印出相关参数来验证代码是否正确,需要打印类型和值出来进行测试,然后查对照表确定。
阅读全文
摘要:php CI如何实现全站静态生成html,动态创建目录
CodeIgniter框架生成HTML的方法
阅读全文
摘要:php字符串查找函数 php查找字符串中出现的次数函数substr_count,判断字符串中是否包含另一个字符串函数strpos
实战例子:判断$opennum包含字符串$n1和$n2,同时$n1或$n2至少有一个出现次数大于1
注意:这里一定要使用 !== false 来做判断条件语句, strpos() 如果没有找到字符串则返回 FALSE,
注意:strpos() 的位置是按字节计算的,中文按3个字节计算的。
阅读全文
摘要:php报错Array to string conversion 解决方案,动态输出数据库列名称
问题:在Windows php5.3环境下使用:$keys[0];?> 正常,但到Linux服务器php7.3环境下,报错:Array to string conversion
原因:数组的输出不能使用echo
解决办法:使用遍历输出,或者索引输出(即在key值加上花括号{})
{$keys[0]};?>
或者 {$keys[0]};?>
其中row为数据库查询返回的一条记录,$keys为动态的列名称
阅读全文
摘要:需求:php 除10取整,取十位数前面一个数字,百位前两个数字,并把大于2的加红显示
例:0-9,10-19,20-29,30-39,110-119对应为:0 1 2 3 11
实现主要方法:$num = floor($omit/10);
完整实战方法:
阅读全文
摘要:php从数据库里取出的数据列表里添加一个属性实战例子:
$opendata = $this->omitmodel->getHistory(1,1);
var_dump($opendata);
foreach ( $opendata as $row) {
$opendata[0]->m54 = 1;
}
没添加前输出:
array(1) { [0]=> object(stdClass)#22 (1) { ["number"]=> string(11) "20190524049" } }
添加后输出:
array(1) { [0]=> object(stdClass)#22 (2) { ["number"]=> string(11) "20190524049" ["m54"]=> int(1) } }
上面只是添加数据库查询结果属性示例,实际应用中下标可以通过$i的方式添加
阅读全文