PHP
梁吉林
最好的代码是简洁易维护的代码。
展开
-
php读写excel文件
php操作excel文件原创 2022-11-08 21:39:29 · 4695 阅读 · 1 评论 -
composer存储库优先级问题
composer repositories优先级导致的期望包无法下载问题与解决方案原创 2022-07-19 17:26:45 · 939 阅读 · 0 评论 -
php中timezone时区设置
时区配置影响时间取值。默认不配置的话用的是格林尼治时间(零时区),而不是国内东8(+8)时区时间(北京时间)。看下面一个很明显的例子:[root@10 conf]# php b.php 2020-05-07 09:35:06[root@10 conf]# php -c php.ini b.php 2020-05-07 17:35:13[root@10 conf]# dateThu ...原创 2020-05-07 17:43:51 · 1260 阅读 · 0 评论 -
PHP Warning: Module 'ssh2' already loaded in Unknown on line 0
PHP Warning: Module 'ssh2' already loaded in Unknown on line 0重复加载,将php.ini中相关信息注释掉即可解决。;extension=ssh2.so其它类似的报错也是相同处理。原创 2020-05-07 17:29:07 · 428 阅读 · 0 评论 -
Yii2数据库完整配置
Yii2.0框架,mysql数据库,一主多从的经典数据库配置。return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=1.1.2.3;dbname=db_test', 'username' => 'u_test', 'password' =>...原创 2020-04-26 23:00:28 · 1630 阅读 · 0 评论 -
php ldap
php支持ldap接入,但是需要安装php-ldap扩展。安装很简单这里不再赘述。以下是我在yii框架内实现的ldap测试代码,除了日志记录,其它的都是原生代码。示例代码public function actionTestLdap() { $serverAddr = '10.1.1.1'; $pswd = '123456'; $dn =...原创 2020-03-22 18:39:44 · 645 阅读 · 0 评论 -
php接入Google身份验证器
如果不清楚Google身份验证器是个什么东西的,建议先去了解一下,再回来看此篇文章,会更好理解一些。GitHub上有对Google Auth的php实现封装,这里直接拿下来用,可从以下地址自行获取GitHub Google Authenticator要使用Google Auth就需要先做好关联,支持的两种关联方式分别是“扫码”和“秘钥”,都有完整的支持。<?phprequire_on...原创 2020-03-18 00:11:30 · 3018 阅读 · 1 评论 -
php curl errno=6 error=name lookup timed out问题解决
错误信息: curl errno=6 curl error=name lookup timed out错误原因: 通常是因为dns服务器设置有问题导致的域名无法解析引起。解决方法: 检查 /etc/resolv.conf 配置文件,对配置的每个dns server进行测试,看是否能够ping通。如果都不可用,可以网络搜索“公共DNS”来获取可用的dns server进行配置。原创 2017-10-31 18:22:20 · 4931 阅读 · 0 评论 -
PHP Fatal error: Allowed memory size of 134 bytes exhausted
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 6846241 bytes) in xxx.php on line 1。接手了一个服务器间数据同步的遗留问题,在执行操作的时候,查看调用的接口一切正常,能够被正常调用,但是最后curl出的结果却是“500 Internal Ser原创 2017-11-08 17:19:00 · 8069 阅读 · 0 评论 -
PHP命名空间简介
php中的命名空间这一概念,是在5.3.0版本开始引入的。最主要的目的就是为了解决类、常量等的名字冲突问题。附带的也能够提高一些代码的可读性。如果实在不好理解,那就把命名空间当做一个文件系统中的目录声明,就如同文件系统目录一样,同一目录下不会存在两个相同名字的文件,但不同目录下的文件可以名字相同。包括类、接口、函数和常量这些类型的代码会受到命名空间的影响。声明命名空间使用关键字“namespace”原创 2017-11-15 16:04:19 · 372 阅读 · 0 评论 -
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
今天调试https接口的时候,遇到这样一个错误: curl errno=60; curl error=SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed原创 2017-11-22 10:57:48 · 4851 阅读 · 0 评论 -
session与cookie有效时间
session有效期cookie有效期session.cookie_lifetimesession.gc_maxlifetime原创 2017-12-21 15:44:24 · 9629 阅读 · 0 评论 -
详解php soap实现web service接口服务
web service是什么,不多说,可参见百科说明web service百度百科。 soap是一种协议,属于web service实现所使用的一种技术规范。 web service的接口实现有两种方式,一种是需要生成wsdl文档的方式,一种是不需要生成wsdl文档的方式。 在实际操作之前,先检查一下自己的环境,是否支持soap,然后修改一下php.ini配置文件,将“soap.wsdl_c原创 2018-01-23 17:27:29 · 17493 阅读 · 1 评论 -
ERROR: `phpize' failed
在安装软件的时候出现了以下错误: Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script. ERROR: `phpize’ failed解决方法:yum in...原创 2018-04-03 11:30:21 · 9043 阅读 · 1 评论 -
强制文件下载header设置
chrome包容性较强,做文件下载较好实现。 firefox对规则的检查比较严,在触发下载动作的时候,可能会是打开而不是进行下载。 这个时候就需要设置一下header,来告诉浏览器,这是一个要下载的对象,不是让你来打开的东西。 header设置如下:Header("Content-Disposition: attachment;filename=$fname");主要的是“att...原创 2017-09-01 18:45:35 · 4173 阅读 · 2 评论 -
php接收+号等特殊字符参数的问题
记录一个有些奇怪的问题,关于参数“+”号在传输过程中是否被转义。1、get方式请求使用get方式,php收到的参数中“+”会变为空格,看说明应该是执行了urldecode,如果需要恢复为“+”号,需要对接收到的参数进行urlencode。 通过使用curl和浏览器方式,接收到的参数均把+号转为了空格。 请求地址为http://ip/xx?aa=+889 使用 $_REQUEST[...原创 2018-04-12 16:58:17 · 6106 阅读 · 0 评论 -
php处理kafka消息
如果安装kafka,看上一篇文章CentOS7安装kafkaphp如果要使用kafka的话,需要安装一下kafka-php:# composer require nmred/kafka-phpkafka-php的GitHub地址先写一个kafka_producer.php,用来做为生产者:&lt;?phprequire '/var/www/extend/vendor/au...原创 2018-06-04 12:40:33 · 3342 阅读 · 0 评论 -
Expires:Thu, 19 Nov 1981 08:52:00 GMT
是不是有些眼熟?这是http response headers中的expires信息。这时间也对不上啊!是不是有些奇怪?找到一个有趣的回答: It’s an attempt to disable caching. The date is the birthday of the developer Sascha Schumann who added the code. File: se原创 2017-10-18 16:33:46 · 3724 阅读 · 0 评论 -
CURL Library Not Loaded问题解决
最近一台服务器在访问页面的时候报了一个“CURL Library Not Loaded”的错误,查看代码后发现调用了php curl_init。然后测试发现并没有安装php curl库。 系统环境是ubuntu,所以使用apt-get install php5-curl来进行库安装,完成安装后,重启服务/etc/init.d/apache restart后可以解决问题。原创 2017-10-17 18:56:59 · 755 阅读 · 0 评论 -
PHPMailer使用说明
PHPMailer邮件发送使用详解原创 2015-12-17 18:07:48 · 3684 阅读 · 0 评论 -
PHP-Redis扩展安装与应用
在Redis初识里,介绍了Redis的安装与使用,但只是这样的话,是无法在PHP中操作Redis的,为了能够在PHP中操作Redis,需要安装扩展包。 下载地址: https://github.com/phpredis/phpredis 下载后进行安装:#unzip phpredis-develop.zip#cd phpredis-develop#/usr/local/php/bin/ph原创 2015-12-21 14:53:59 · 673 阅读 · 0 评论 -
PHP代码优化
通常在项目完成后,你觉得它应该有更加快速的反应时,就可以来做PHP代码层面的优化了。当然这只是一个通俗的做法,毕竟萝卜白菜各有所爱,能在开发的过程中时刻谨记并完成最快速的可用代码则是一件令人振奋的事情。本文仅述我在开发过程中所遇到的应该优化的代码,本文是一篇长期更新的文章。1、单引号与双引号 当一行字符串可以使用单引号也可以使用双引号的时候,推荐使用单引号。 双引号时PHP会搜索看字符串中有没有原创 2016-03-28 15:31:16 · 354 阅读 · 0 评论 -
php单例模式连接数据库--代码实现
单例模式在特定的情况下可以节省资源的消耗,例如同一页面对数据库的多次操作,不需要去new多次从而节省了资源。 单例模式的关键在于php中的“instanceof”,它用来检测一个变量是否是某个类的一个实例。 同时,为了防止用户去new实例,需要将“__construct”函数权限设置为private。 为了防止用户进行clone,也要重写“__clone”方法。<?php/* * 单例数据原创 2016-06-24 14:52:35 · 5174 阅读 · 2 评论 -
PHP正则表达式
1.preg_match与preg_match_allpreg_match与preg_match_all这两个函数算是一组,这两个函数的不同点是preg_match只匹配第一次,而preg_match_all则匹配所有。int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $fl原创 2015-10-20 14:37:50 · 439 阅读 · 0 评论 -
原生PHP实现队列与栈
队列队列(queue)是常用的数据结构之一,它是一种特殊的线性表,受到操作的限制,只能在尾部进行插入操作,在头部进行删除操作。 队列遵循先入先出(FIFO,First In First Out)的原则,每一个新插入的元素都是在队列的尾部插入,每一个要删除的元素都是位于队列的头部,当从队列的头部删除了一个元素后,其它队列中的元素就会向前进1位,在元素移动到队首时,就会接受出队的操作。 还有一种队列原创 2015-12-22 15:35:35 · 9002 阅读 · 0 评论 -
浅谈PHP类与对象
面向对象编程(OOP)是一种计算机编程架构,PHP是一种弱类型的编程语言,可以使用OOP,也可以使用过程化编程。 类:是具有相同属性和服务的一组对象的集合。 对象:用来描述客观事物的一个实体,是类的实例化。访问控制类中的属性和服务是具有访问控制权限的,通过添加关键字public(公有)、protected(受保护的)、private(私有)来实现的。 被定义为公有的成员可以在任何地方被访问;被原创 2016-03-23 16:57:37 · 659 阅读 · 1 评论 -
call_user_func_array
php中的call_user_func_array用来调用回调函数,并且传递一个数组型的参数给这个回调函数,返回值是回调函数的返回值,如果出现错误则返回false。call_user_func_array可以使用的回调函数包括单独的函数,类中的方法,也可以在一个类中去调用其它类中的方法。原创 2016-07-01 15:14:07 · 1026 阅读 · 0 评论 -
php-curl(模拟post,设置header,接收json数据)
curl可以使用url的方式来模拟浏览器传输数据,是很有用的一个功能。curl的操作可以分为4步:1、初始化:curl_init()2、设置属性值:curl_setopt()3、执行:curl_exec()4、退出关闭:curl_close()测试: 模拟一个php文件(2.php)向另一个php文件(3.php)发送post请求,并接收其返回值进行输出的过程。post发送方(2.php)<原创 2016-08-16 12:02:47 · 45643 阅读 · 1 评论 -
thinkphp同时上传多个文件并统一命名
通过thinkphp的upload类可以方便的进行文件上传,上传单个文件或对命名没什么要求的多个文件时十分方便,然而在处理需要上传多个文件,且对上传后的文件名有格式要求的时候就显得力不从心了。这时候就需要我们自己进行一些修改。本方法的处理如下:使用一个数组保存上传文件的基础信息$oldFN = $_FILES;使用thinkphp的upload方法上传文件,上传后的文件名使用原原创 2016-10-16 16:58:09 · 2881 阅读 · 0 评论 -
thinkphp找不到common里的方法
本来只在一个类中使用的方法,后来扩展到多个类中都有调用,于是就把它放在了Common/common.php文件中。 结果再运行之前的代码,返回了服务器500的错误,然后一段一段的调试,发现是放到 common中的方法找不到引起的。 很是好奇,在IDE中是能够找到方法的(ZS),放到服务器上却出现错误,然后查tp的资料,发现当更新了公共库文件的时候,需要清除一下临时目录(我使用的是3.1,所以临时原创 2016-10-28 18:01:14 · 5147 阅读 · 0 评论 -
PHP SOCKET通信
简介对Unix C有了解的人,应该都知道它里面也是有个socket网络套接字的,用来实现网络通信,我觉的PHP里的socket与其很相似。 先来看一下PHP中关于socket操作的几个比较常用的函数:resource socket_create ( int $domain , int $type , int $protocol )/*1、作用与返回值:创建一个socket套接字,创建成功时返回原创 2015-12-06 15:51:50 · 848 阅读 · 0 评论 -
PHP - GD库
简介GD库,是php处理图形的扩展库。 php中处理图形和我们平常画画步骤类似: 1、创建画布——>准备画画的地方; 2、设置画笔——>选择画画的笔的颜色; 3、开始画画。 按每个步骤分开来说,创建画布,就是设置一块可以用来处理图形的区域,后面画的图形要确保在这个区域中,如果超出了设置的画布的区域,那画的东西就看不到了。创建画布使用imagecreatetruecolor()来进行,它的具原创 2016-03-08 16:04:22 · 363 阅读 · 0 评论 -
thinkphp注意事项
模型Model统计count:$m->count('id')->where($map); //error$m->where($map)->count('id'); //right原创 2017-01-12 16:07:09 · 351 阅读 · 0 评论 -
php ftp文件上传与下载
ftp文件上传php自带有ftp操作的函数包,一个比较简单实现的ftp文件上传操作可以通过以下几个步骤来完成: 1、确认ftp server的ip地址与port端口信息(如果使用的是默认端口则可以不关心); 2、进行ftp_connect操作,连接到ftp server(需要注意一下是否设置了port参数); 3、进行ftp_login操作,使用ftp用户名和密码进行登录; 4、这里开始区分原创 2017-07-21 12:05:49 · 1761 阅读 · 0 评论 -
php -- memory_get_usage
memory_get_usage是php中的一个内置函数,作用是返回分配给php的内存量,格式如下:int memory_get_usage ([ bool $real_usage = false ] )当参数real_usage=true时,获取的是系统分配给php的真实内存量; 当参数real_usage=false或为空时,获取的是emalloc()报告使用的内存量。对的,它们不是一个东西,原创 2017-08-02 15:22:14 · 687 阅读 · 0 评论 -
原生php实现文件上传方法
用tp的框架上传文件,方便是方便了,但是知其然而不知其所以然。 想要知其所以然,还是要脱离开框架,用原生php来做实现。<?phpfunction upFile(){ if(empty($_FILES)){ $status = 1; $info = '没有文件上传'; } if($_FILES['myFile']['error'] ===原创 2017-08-14 16:12:46 · 4526 阅读 · 0 评论 -
PHP原生DOM对象操作XML
对于操作XML类型文件,PHP内置有一套DOM对象可以进行处理。对XML的操作,从创建、添加到修改、删除都可以使用DOM对象中的函数来进行。 创建 创建一个新的XML文件,并且写入一些数据到这个XML文件中。/* * 创建xml文件 */$info = array( array('obj' => 'power','info' => 'power is shutdown'),原创 2015-11-06 12:12:09 · 2915 阅读 · 0 评论