PHP
kikajack
这个作者很懒,什么都没留下…
展开
-
【PHP脚本】求下个月的今天,如果下个月没有今天则返回最后一天
<?php$cur = '2020-01-01';function getNextMonthCurDayOrLastDay($date) { // 先判断下个月有没有当前月份的今天,有的话下个月取今天,没有的话下个月取最后一天 $curDay = date('d', strtotime($date)); $lastDayOfNextMonth = date('d', strtotime("last day of next month", strtotime($date原创 2020-10-01 17:36:00 · 180 阅读 · 0 评论 -
利用延时队列实现自动定时重试 - 基于PHP实现
测试步骤搭建代码框架创建测试项目的目录 mq从 https://github.com/php-amqplib/php-amqplib 下载AMQP库(当然也可以通过 composer 安装,这里为了简单直接自己处理了),放入 mq 目录编写 index.php,实现自动加载创建 test 目录,编写生产者和消费者跑脚本:开启生产者:php -f index.php retryP p开启消费者:php -f index.php retryC c代码结构├─PhpAmqpLi原创 2020-07-03 09:55:34 · 425 阅读 · 0 评论 -
RabbitMQ 延迟队列-基于PHP实现
按照延迟队列插件RabbitMQ 延迟队列插件未安装直接使用的话,会报错:unknown exchange type ‘x-delayed-message’插件下载地址:https://www.rabbitmq.com/community-plugins.html 。下载 Erlang 可执行文件之后,复制到rabbit服务的插件目录(自己的安装目录,我的是 C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.14\plugins )中,然后开启插件原创 2020-07-01 20:14:04 · 1158 阅读 · 0 评论 -
PHP 通过 AMQP 库使用 RabbitMQ 的简单示例Demo
目录结构按照 RabbitMQ 和 PHP 的步骤就不在这里说了。测试步骤如下:创建测试项目的目录 mq从 https://github.com/php-amqplib/php-amqplib 下载AMQP库(当然也可以通过 composer 安装,这里为了简单直接自己处理了),放入 mq 目录编写 index.php,实现自动加载创建 test 目录,里面分别创建 mqc.php 消费者和 mqp.php 生产者两个文件跑脚本,测试消息的生产和消费:php -f index.php m原创 2020-06-30 09:42:51 · 612 阅读 · 0 评论 -
PHP 数组下标自动转换为整型的坑
在做项目时,上线后遇到一个 BUG,有一个数组存储了下标从 ‘01’到‘18’ 总共18组数据。上线前测试了前几组数据,没问题。上线后,在用户选择‘15’时报错,找不到这个数据。查了一下代码,数据是没问题的,只是这里使用了‘===’来判断相等:// $code 作为参数传入foreach ($arr as $k => $v) { if ($k === $code) { ...原创 2018-07-05 15:45:15 · 2285 阅读 · 2 评论 -
Windows 下手工搭建 LNMP 环境
参考资料如果想方便,可以直接使用集成的 LNMP 环境(例如 PHPStudy)。下载 PHP下载地址:https://windows.php.net/download根据你的系统选择 32 位或 64 位下载。另外还有个线程安全和非线程安全的差异,对于 Nginx(使用 FastCGI,单线程工作),选择 Non Thread Safe 版本即可。具体差异可以 参考这里。N...原创 2018-07-11 18:07:52 · 7255 阅读 · 0 评论 -
PHP 编码规范
PSR 规范官网 PSR-2 编码风格规范 PSR-1 基础编码规范 CodeIgniter 框架的编码规范类和命名空间每个类都独立为一个文件,且命名空间至少有一个层次:顶级的组织名称(vendor name)。类的命名必须遵循大写开头的驼峰命名规范。<?phpnamespace Vendor\Model;class Foo{ ...}类中的属性、...原创 2018-07-01 12:48:40 · 140 阅读 · 0 评论 -
PHP 开启错误显示并设置错误报告级别
警告:生产环境永远都不要显示任何错误信息!显示错误(display_errors)和错误报告(error_reporting)是两回事。PHP 脚本发生错误时,可以根据设置选择是否报告这个错误(记录到错误日志中),如果设置中开启了 display_errors,则同时把错误信息打印到屏幕上。项目中常用的设置switch (ENVIRONMENT){ // 对于开发环境...原创 2018-06-16 15:52:38 · 16397 阅读 · 0 评论 -
curl 中关于 CURLINFO_HEADER_SIZE 的 BUG 定位及修复
curl 官方下载页面安装了最新版本的 PHP7,还是碰到了 BUG。这次是 curl 的问题,CentOS7 默认安装的 curl 版本太低了,需要升级为最新版来解决这个问题。1. 问题描述对接了一个接口,用来下载 PDF 文件。使用 curl 下载后,文件老是报错无法打开。接口提供方直接返回的 PDF 二进制文件流,而没有放入某个字段中或经过 base64 编码。负责下载的部分...原创 2018-05-12 16:54:49 · 1511 阅读 · 0 评论 -
CodeIgniter 技巧 - 通过 Composer 安装 CodeIgniter 框架并安装依赖包
PHP 项目中,通过 Composer 来管理各种依赖包,类似 Java 中的 Maven,或 Node 中的 npm。CodeIgniter 框架要想通过 Composer 自动加载包也很简单,步骤如下:1. 安装 Composer参考这里安装后,记得设置仓库源为国内镜像,否则下载速度太慢。2. 安装 CodeIgniter假设项目名为 test,切换到合适目录后,执...原创 2018-05-10 17:15:41 · 3652 阅读 · 2 评论 -
PHP 调试 - 方式
之前学 Java 的时候,一直使用 IDE 的 console 控制台进行调试。后来搞 PHP 后,习惯在代码里面 echo 和 exit,然后在浏览器刷新看效果,把单步调试、变量值查看等常用的调试方式给忘了。其实通过 IDE 集成的控制台进行调试更高效。常用调试方式通过浏览器调试(CGI 方式)方法在代码中添加 echo、var_dump、print_r 和 exit,在浏览...原创 2018-07-12 14:08:53 · 25009 阅读 · 0 评论 -
PHP 调试 - Xdebug
PHP 调试指南.pdf PHP 程序员的调试技术根据要调试的对象的不同,采取的方法也不一样:调试 web 应用:对于 web 应用,可以在浏览器中安装插件,或者在 IDE 中设置,下面的设置二选一即可。 Get/Post 请求或 Cookie 中添加 XDEBUG_SESSION_START=session_name,使 Xdebug 知道这个请求应该连接 IDE 进行调试。一般由...原创 2018-07-12 19:20:59 · 1958 阅读 · 0 评论 -
PHP 中 Error 和 Exception 两种异常的特性及日志记录或显示
错误 Error 异常处理 Exception 所有示例基于 PHP7。错误和异常的异同异常是新特性,与JAVA/C#的异常不同,PHP异常需要手动抛出throw new Exception,而不是系统自动抛出错误与异常是不同的概念,但有共同的地方: 如果异常不捕获处理,程序将会终止,并报出Fatal Error 错误,看到这里大家就会觉得异常是不是错误的一种,这是一种错觉,...原创 2018-07-31 18:45:56 · 2858 阅读 · 0 评论 -
通过 PECL 安装 PHP 扩展(以 CentOS7 中安装 swoole 为例)
安装 PHP 环境安装epel-releaseyum -y install epel-release获取PHP7的yum源rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm查看可用的PHP7版本列表yum list php7*安装 PHP7.2用于执行 PHP 脚...原创 2018-09-07 13:29:09 · 4686 阅读 · 0 评论 -
用 Redis 实现 PHP 的简单消息队列
消息队列就是在消息的传输过程中,可以保存消息的容器。常见用途:存储转发:异步处理耗时的任务分布式事务:多个消费者消费同一个消息队列应对高并发:通过消息队列保存任务,慢慢处理发布订阅:实现解耦PHP 可以基于 Redis 的 List 数据类型实现简单的消息队列,可以参考 php-resque。当然也可以使用更强大的 RabbitMQ。实现方式PHP 守护进程&amp;lt;?php...原创 2018-11-28 21:23:48 · 377 阅读 · 0 评论 -
PHP 实现并发-进程控制 PCNTL
PCNTL 是 PHP 中的一组进程控制函数,可以用来 fork(创建)进程,传输控制信号等。在PHP中,进程控制支持默认关闭。编译时通过 --enable-pcntl 配置选项可以使 PHP的 CGI 或 CLI 版本打开进程控制支持(但是注意不要在 web 服务器中用 PCNTL,会导致不可预料的问题)。仅 Unix 类系统支持 PCNTL 模块。PCNTL 原理简单示例&amp;lt;?ph...原创 2018-12-06 23:19:58 · 1018 阅读 · 0 评论 -
PHP 的源码编译安装
PHP 架构和安装扩展的几种方式PHP 三大模块:SAPI:接受并处理请求。Zend Engine:PHP 的核心,负责分析 PHP 代码并转为 opcode,然后在 Zend VM 虚拟机上执行。PHP 功能函数及扩展层:实现各种功能,例如 curl 通信、连接 MySQL 等。PHP 中,有以下几种方式添加扩展:把扩展编译进 PHP通过 pecl 命令或 Linux 发行版...原创 2018-12-02 20:10:11 · 5919 阅读 · 0 评论 -
PHP 常用函数-url函数
urlencode 和 rawurlencodeurlencode 和 rawurlencode 两个函数都用来编码 URL 字符串。除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。差异:对于空格,urlencode 编码为加号(+)。此编码与 FORM 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urle...原创 2018-12-01 20:21:36 · 1011 阅读 · 0 评论 -
PSR 规范 - PSR 0 和 PSR 4
PSR-0 规范 PSR-4 自动加载规范 - 中文 PHP FIG 组织 PSR-0 和 PSR-4 对比,及测试用例1. PSR 规范及 FIG 组织PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。PHP FIG(Framework Interoperability Gro...原创 2018-02-07 23:53:53 · 418 阅读 · 0 评论 -
PHP OpenSSL 加密扩展 - 概述
mcrypt 已经废弃,对称/非对称加解密统一在 OpenSSL 中实现。1. 安装phpize 命令是用来准备 PHP 扩展库的编译环境的。详情参考这里,简单步骤如下:$ cd extname$ phpize$ ./configure$ make && make installmake install 安装成功后将创建 extname.so 库(类似于 Window原创 2018-02-06 18:10:40 · 3411 阅读 · 0 评论 -
PHP面向对象1-重载overloading
PHP中的重载,并不是传统意义上的重载。 当程序中碰到未定义的属性或方法时,自动调用对应的方法进行处理,就是PHP中的重载!!! 链接:http://www.php.net/manual/zh/language.oop5.overloading.php1.属性重载__set(),__get(),__isset(),__unset()四个方法,分别用于赋值,取值,判断是否赋值,释放。1.__set原创 2017-06-07 22:47:57 · 394 阅读 · 0 评论 -
PHP-开发环境搭建
1.PHPStrom或NetBeans安装NetBeans是最好用的免费IDE,PHPStrom是最好用的收费IDE。两个都可以直接在官网下载。 NetBeans官网:https://netbeans.org/ PHPStrom官网:http://www.jetbrains.com/phpstorm/2.Sublime Text 3或NotePad或EditPlus安装简单的编辑时,轻量级的工具原创 2017-06-13 15:22:02 · 466 阅读 · 0 评论 -
PHP基础1-数据类型
1.PHP数据类型字符串、整数、浮点数、逻辑、数组、对象、NULL。2.类型判断is_array()、is_float()、is_int()、is_integer()、is_string() 和 is_object()。 类型匹配时,以上方法会返回TRUE,否则返回FALSE。3.类型转换PHP数据类型有三种转换方式: 1. 在要转换的变量之前加上用括号括起来的目标类型 •(int)、(int原创 2017-08-15 22:59:34 · 323 阅读 · 0 评论 -
PHP基础3-变量和常量
1.变量PHP中,变量支持的数据类型有:int整数,float(等同于double,双精度)实数,string字符串,bool布尔值,array数组,object对象。此外有2个特殊类型:NULL(空,未赋值、已重置或赋值为NULL的变量就是NULL类型)和resource(资源,保存了到外部资源的一个引用,特定的内置函数如数据库函数,返回resource类型的变量)。 PHP变量名对大小写敏感。原创 2017-09-12 22:19:50 · 346 阅读 · 0 评论 -
CGI,Fast-CGI,CLI,php-cgi,php-fpm
参考: http://www.awaimai.com/371.html http://www.php-internals.com/book/?p=chapt02/02-02-03-fastcgi0. 总结Web Server只是内容分发者。对于静态资源,Web Server在文件系统找到资源后返回给浏览器。而对于动态请求(XX.php等),Web Server需要在配置文件中寻找对应的解析引擎,原创 2017-11-08 19:06:38 · 471 阅读 · 0 评论 -
PHP面向对象4-序列化
序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。 警告:各种语言所采用的序列化机制往往不一样,不兼容。1 序列化serialize()string serialize ( mixed $value )serialize() 返回字符串,此字符串包含了表示 value 的字节流,同时不丢失其类型和结构。 serialize() 可处理除了 resource原创 2017-10-25 11:45:30 · 278 阅读 · 0 评论 -
PHP面向对象2-类的自动加载
当项目比较大时,有些页面需要引入很多类,有些类是全局使用的,你需要不停的require文件。这时自动加载机制可以很有用。 参考链接: http://php.net/manual/zh/function.autoload.php#refsect1-function.autoload-returnvalues http://php.net/manual/zh/function.spl-autolo原创 2017-06-08 23:22:45 · 559 阅读 · 0 评论 -
PHP面向对象3-引用&
PHP中,可以引用的有变量,函数,对象。引用符号统一用&。 引用,实际上就是用不同的名字访问同一个变量内容。引用不是指针,不指向实际的内存。 PHP中的引用并不是通常意义的引用,并不是指针,就行PHP中的重载并不是真正的重载一样!!! 链接:http://php.net/manual/zh/language.references.php1.变量引用指多个变量名指向同一个变量,每次改动都影响其他原创 2017-06-10 17:39:18 · 258 阅读 · 0 评论 -
PHP面向对象5-基本概念
1. $this 伪变量当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用(通常是该方法所从属的对象,但如果是从第二个对象静态调用时也可能是另一个对象)。2. 继承一个类可以在声明中用 extends 关键字继承另一个类的方法和属性。PHP不支持多重继承,一个类只能继承一个基类。3. 构造函数具有构造函数的类会在每次创建新对象原创 2017-11-15 17:51:48 · 244 阅读 · 0 评论 -
PHP 自带 Web Server
官方文档1. 简介PHP 5.4.0起, CLI SAPI 提供了一个内置的Web服务器,可用于本地开发使用。2. 使用1)参数:-S:启动 PHP 自带的 Web Server,后面跟网址及监听的端口号。默认会把 URI 请求发送到 PHP 所在的的工作目录(Working Directory)进行处理。$ php -S localhost:8080-t:自定义网站的根目录。$ php -S lo原创 2017-12-11 14:51:56 · 892 阅读 · 0 评论 -
PHP 命名空间 namespace
参考: http://php.net/manual/zh/language.namespaces.rationale.php一. 概述1)命名空间定义和用途命名空间是一种封装事物的方法,类似于文件系统。可以解决命名冲突,提高代码可读性。 在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量原创 2017-12-20 10:56:56 · 503 阅读 · 0 评论 -
PHP CGI 和 CLI 模式对比,用 `$_SERVER` 向脚本传参
1. CGI 模式在服务器配置信息中,增加参数字段。例如,Nginx 中配置如下:# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; f原创 2017-12-20 11:39:53 · 1098 阅读 · 0 评论 -
PHP面向对象6-常量,Static(静态)关键字
在访问PHP类中的成员属性或方法时,如果属性或者方法被声明成 const(定义常量)或者static(声明静态),就必须使用类名或 self 配合::来访问。否则用实例对象或 $this 配合 ->来访问。class A { const NAME = 'jack'; static $age = 20; $sex = 'male'; public function f()原创 2017-11-16 17:09:31 · 823 阅读 · 0 评论 -
PHP 输出缓存 Output Buffer
参考: http://gywbd.github.io/posts/2015/1/php-output-buffer-in-deep.html当PHP脚本有输出时,输出控制函数可以用这些来控制输出。这在多种不同情况中非常有用,尤其是用来在脚本开始输出 数据后,发送http头信息到浏览器。输出控制函数不影响由 header() 或 setcookie()发送的文件头信息,仅影响象 echo这样的函数和原创 2017-12-11 16:16:11 · 880 阅读 · 0 评论 -
Composer安装使用
参考: http://docs.phpcomposer.com/00-intro.html http://www.udpwork.com/item/10716.html http://phpernotes.com/php/composer_schemaComposer安装之前,首先需要安装php。Composer以phar包的PHP可执行文件形式存在,安装好后用php执行即可。1. 安装1.原创 2017-11-06 19:25:58 · 2553 阅读 · 0 评论 -
PHP知识点 - json_decode 返回 NULL,PHP 的 JSON 相关函数
json_decode要求的字符串比较严格,不满足以下情况就报错:使用 UTF-8 编码必须符合 JSON 格式,不能在最后出现逗号,不能使用单引号不能有控制字符(换行,tab 等) $result = preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', trim($result));1. json_last_error如果编码或解码时报原创 2018-01-16 12:01:15 · 794 阅读 · 0 评论 -
PHP OpenSSL 加密扩展 - 跟 Java 的交锋(AES 加密方式,ECB 模式)
对接一个保险产品接口的时候,对方用的是基于 Java 的 AES/ECB/PKCS5Padding 对报文进行加密(AES 加密方法,ECB 加密模式,PKCS5Padding 填充方式),注意他们还用 SHA1 哈希算法对密码进行哈希。我用的是 PHP 的 OpenSSL。代码及注释记录如下。Java 代码下面的 Java 示例代码加密后的字符串是7C22386998D853F7FC97...原创 2018-02-06 19:33:36 · 2790 阅读 · 0 评论 -
MySQL6-PHP和MySQL
1.PHP的MySQL扩展参考:http://php.net/manual/zh/mysqli.overview.php PHP本身不能连接数据库,需要通过扩展才可以连。常用的MySQL数据库扩展有3种: - mysql扩展(不建议):纯面向过程。老旧,已不再开发只维护。 - mysqli扩展(首选):部分面向对象,部分面向过程。支持事务,支持多语句执行,支持prepared语句。 -原创 2017-05-06 17:58:25 · 252 阅读 · 0 评论