<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>PHP on PHPHA</title><link>https://blog.phpha.com/category/php/</link><description>Recent content in PHP on PHPHA</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Fri, 10 Jul 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.phpha.com/category/php/index.xml" rel="self" type="application/rss+xml"/><item><title>阿里云 ECS SMTP 发送邮件</title><link>https://blog.phpha.com/archives/150/</link><pubDate>Fri, 10 Jul 2020 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/150/</guid><description>&lt;p&gt;因业务需要，今天做了一个简单的邮件发送功能，通过 &lt;code&gt;PHPMailer&lt;/code&gt; 来实现。本地测试正常，部署到阿里云 &lt;code&gt;ECS&lt;/code&gt; 后，报错：&lt;code&gt;SMTP connect() failed&lt;/code&gt; ，本文简单记录下解决方案。&lt;/p&gt;</description></item><item><title>PHP SM2 国密算法与 CURL SSL 双向认证</title><link>https://blog.phpha.com/archives/149/</link><pubDate>Fri, 12 Jun 2020 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/149/</guid><description>&lt;p&gt;最近在对接民生银行的电子账户接口，按照民生的要求，调用接口需要涉及 &lt;code&gt;SM2&lt;/code&gt; 国密算法及 &lt;code&gt;SSL&lt;/code&gt; 双向认证。目前银行端提供的只有 &lt;code&gt;JAVA&lt;/code&gt; 版的 &lt;code&gt;SDK&lt;/code&gt;，把 &lt;code&gt;PHP&lt;/code&gt; 作为开发语言的我们表示很受伤。本文就针对涉及的两个点进行说明，简单汇总下 &lt;code&gt;PHP&lt;/code&gt; 语言中的解决方案。&lt;/p&gt;</description></item><item><title>阿里云消息队列AMQP版之延迟消息</title><link>https://blog.phpha.com/archives/148/</link><pubDate>Fri, 22 May 2020 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/148/</guid><description>&lt;p&gt;近几天在基于阿里云 &lt;code&gt;AMQP&lt;/code&gt; 版消息队列开发业务，之所以选择这个而不是阿里云主推的 &lt;code&gt;RocketMQ&lt;/code&gt; ，是因为我想用的是 &lt;code&gt;RabbitMQ&lt;/code&gt; 。选择阿里云而非自己部署，无非是为了节省运维成本。相对来说官方的 &lt;code&gt;PHP&lt;/code&gt; 版本 &lt;code&gt;Demo&lt;/code&gt; 非常简陋，而且虽然官方宣传完全兼容 &lt;code&gt;RabbitMQ&lt;/code&gt; ，但还是有一些坑的。&lt;/p&gt;</description></item><item><title>Laravel/Lumen 日志文件无法写入</title><link>https://blog.phpha.com/archives/147/</link><pubDate>Thu, 26 Mar 2020 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/147/</guid><description>&lt;p&gt;最近有同事反馈，发现使用 &lt;code&gt;Laravel/Lumen&lt;/code&gt; 框架的项目中，日志文件（ &lt;code&gt;storage/logs/laravel.log | storage/logs/lumen.log&lt;/code&gt; ）权限莫名其妙变为 &lt;code&gt;root:root&lt;/code&gt; ，导致程序运行时写入失败而报 &lt;code&gt;500&lt;/code&gt; 错误。&lt;/p&gt;</description></item><item><title>数据结构之单链表</title><link>https://blog.phpha.com/archives/139/</link><pubDate>Sun, 01 Sep 2019 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/139/</guid><description>&lt;p&gt;数组需要一块连续的内存空间来存储，对内存的要求比较高。而链表恰恰相反，它并不需要一块连续的内存空间，它通过指针将一组零散的内存块串联起来使用。链表结构五花八门，三种最常见的链表结构，它们分别是：单链表、双向链表和循环链表。本文来看最简单、最常用的单链表。&lt;/p&gt;</description></item><item><title>PHP 之 for 循环</title><link>https://blog.phpha.com/archives/137/</link><pubDate>Fri, 09 Aug 2019 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/137/</guid><description>&lt;p&gt;&lt;code&gt;for&lt;/code&gt; 循环在很多的编程语言中都被支持，是一种常见的循环用法，也算是我们学习每门编程语言中最基础的知识点。但正是因为基础，所以才容易被忽略，久而久之，甚至会误解。本文 &lt;code&gt;PHPHa&lt;/code&gt; 就对 &lt;code&gt;PHP&lt;/code&gt; 中的 &lt;code&gt;for&lt;/code&gt; 循环进行复习，不求温故而知新，但求能矫枉过正。&lt;/p&gt;</description></item><item><title>数据结构之数组</title><link>https://blog.phpha.com/archives/135/</link><pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/135/</guid><description>&lt;p&gt;数组（&lt;code&gt;Array&lt;/code&gt;）是一种线性表数据结构。它用一组连续的内存空间，来存储一组具有相同类型的数据。&lt;code&gt;PHPHa&lt;/code&gt; 通过本文简单介绍下数组的定义以及用 &lt;code&gt;PHP&lt;/code&gt; 代码模拟数组的相关操作。&lt;/p&gt;</description></item><item><title>PHP 常用的 11 种设计模式</title><link>https://blog.phpha.com/archives/133/</link><pubDate>Sun, 04 Aug 2019 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/133/</guid><description>&lt;p&gt;本文简单介绍下，在 &lt;code&gt;PHP&lt;/code&gt; 开发中涉及的常用的设计模式。包含：工厂模式、单例模式、注册器模式、适配器模式、策略模式、数据对象映射模式、观察者模式、原型模式、装饰器模式、迭代器模式、代理模式等。&lt;/p&gt;</description></item><item><title>IOC 控制反转与 DI 依赖注入</title><link>https://blog.phpha.com/archives/128/</link><pubDate>Fri, 02 Aug 2019 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/128/</guid><description>&lt;p&gt;依赖注入和控制反转是对同一件事情的不同描述，从某个方面讲，就是它们描述的角度不同。&lt;/p&gt;</description></item><item><title>S.O.L.I.D 面向对象设计和编程</title><link>https://blog.phpha.com/archives/129/</link><pubDate>Fri, 02 Aug 2019 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/129/</guid><description>&lt;p&gt;SOLID 是 面向对象编程 和 面试对象设计 的五个基本原则，应用这五个原则能创建一个易于维护和扩展的软件系统。SOLID 可以指导代码重构和在迭代的过程中进行代码清扫，以使得软件源代码清晰可读和具有良好的扩展性。在测试驱动开发中是典型应用场景，并且也是敏捷开发和自适应软件开发基本原则的重要组成部分。&lt;/p&gt;</description></item><item><title>PHP 与协程</title><link>https://blog.phpha.com/archives/120/</link><pubDate>Sun, 21 Jan 2018 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/120/</guid><description>&lt;p&gt;“协程”（Coroutine）概念最早由 Melvin Conway 于1958年提出。协程可以理解为纯用户态的线程，其通过协作而不是抢占来进行切换。相对于进程或者线程，协程所有的操作都可以在用户态完成，创建和切换的消耗更低。总的来说，协程为协同任务提供了一种运行时抽象，这种抽象非常适合于协同多任务调度和数据流处理。在现代操作系统和编程语言中，因为用户态线程切换代价比内核态线程小，协程成为了一种轻量级的多任务模型。&lt;/p&gt;</description></item><item><title>Web架构的那些事儿</title><link>https://blog.phpha.com/archives/119/</link><pubDate>Sat, 20 Jan 2018 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/119/</guid><description>&lt;p&gt;转眼已经是2018年了，博客停更了一年多。无论如何，是时候回归了。最近关注及研究的重点是Web架构与性能，会结合自己的学习进行记录及分享。涉及的关键词：网络协议、异步编程、微服务、分布式等。&lt;/p&gt;</description></item><item><title>首山钱包多线程自动抢标</title><link>https://blog.phpha.com/archives/56/</link><pubDate>Tue, 23 Aug 2016 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/56/</guid><description>&lt;p&gt;首山钱包最近做了三轮的活动，每周一轮，每轮最多可以得到500元大红包。虽然不是专业羊毛党，但是本着为小伙伴们造福的初衷，我还是为了本次任务，写了[自动登录/选标/抢标]的PHP代码。目前代码运行良好，第一轮活动我们6个人都拿到了大红包。第二轮开始小伙伴队伍壮大了一倍，今天已是第二轮的最后一天，拿到大红包毫无压力。&lt;/p&gt;</description></item><item><title>PHP多线程之Pthreads扩展</title><link>https://blog.phpha.com/archives/54/</link><pubDate>Mon, 15 Aug 2016 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/54/</guid><description>&lt;p&gt;简介：Pthreads 是一组允许用户在 PHP 中使用多线程技术的面向对象的 API。 它提供了创建多线程应用所需的全套工具，无论是 Web 应用还是控制台应用。 通过使用 Thread， Worker 以及 Threaded 对象，PHP 应用可以创建、读取、写入以及执行多线程应用，并可以在多个线程之间进行同步控制。&lt;/p&gt;</description></item><item><title>PHP代码风格规范[PSR-2]</title><link>https://blog.phpha.com/archives/38/</link><pubDate>Sun, 13 Dec 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/38/</guid><description>&lt;p&gt;本篇规范是 &lt;a href="http://blog.phpha.com/archives/37/"&gt;PSR-1&lt;/a&gt; 基本代码规范的继承与扩展。&lt;/p&gt;
&lt;p&gt;关键词 “必须”(&amp;ldquo;MUST&amp;rdquo;)、“一定不可/一定不能”(&amp;ldquo;MUST NOT&amp;rdquo;)、“需要”(&amp;ldquo;REQUIRED&amp;rdquo;)、 “将会”(&amp;ldquo;SHALL&amp;rdquo;)、“不会”(&amp;ldquo;SHALL NOT&amp;rdquo;)、“应该”(&amp;ldquo;SHOULD&amp;rdquo;)、“不该”(&amp;ldquo;SHOULD NOT&amp;rdquo;)、 “推荐”(&amp;ldquo;RECOMMENDED&amp;rdquo;)、“可以”(&amp;ldquo;MAY&amp;rdquo;)和”可选“(&amp;ldquo;OPTIONAL&amp;rdquo;)的详细描述可参见 &lt;a href="http://www.ietf.org/rfc/rfc2119.txt"&gt;RFC 2119&lt;/a&gt; 。&lt;/p&gt;</description></item><item><title>PHP基本代码规范[PSR-1]</title><link>https://blog.phpha.com/archives/37/</link><pubDate>Sun, 13 Dec 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/37/</guid><description>&lt;p&gt;本篇规范制定了代码基本元素的相关标准， 以确保共享的PHP代码间具有较高程度的技术互通性。&lt;/p&gt;
&lt;p&gt;关键词 “必须”(&amp;ldquo;MUST&amp;rdquo;)、“一定不可/一定不能”(&amp;ldquo;MUST NOT&amp;rdquo;)、“需要”(&amp;ldquo;REQUIRED&amp;rdquo;)、 “将会”(&amp;ldquo;SHALL&amp;rdquo;)、“不会”(&amp;ldquo;SHALL NOT&amp;rdquo;)、“应该”(&amp;ldquo;SHOULD&amp;rdquo;)、“不该”(&amp;ldquo;SHOULD NOT&amp;rdquo;)、 “推荐”(&amp;ldquo;RECOMMENDED&amp;rdquo;)、“可以”(&amp;ldquo;MAY&amp;rdquo;)和”可选“(&amp;ldquo;OPTIONAL&amp;rdquo;)的详细描述可参见 &lt;a href="http://www.ietf.org/rfc/rfc2119.txt"&gt;RFC 2119&lt;/a&gt; 。&lt;/p&gt;</description></item><item><title>基于Redis实现PHP消息队列</title><link>https://blog.phpha.com/archives/36/</link><pubDate>Fri, 27 Nov 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/36/</guid><description>&lt;p&gt;所谓消息队列，即在消息的传输过程中保存消息的容器。最常见的使用场景是，通过引入消息队列来对耗时的任务就行异步处理，以及应对高并发问题，即所谓的削峰作用。在以PHP为主要开发语言的项目中，我们可以选择的软件有很多，最常使用的有三种：基于 &lt;code&gt;Redis&lt;/code&gt; 的 &lt;code&gt;List数据类型&lt;/code&gt; 来用PHP实现入列出列，基于 &lt;code&gt;Memcached&lt;/code&gt; 的扩展应用 &lt;code&gt;MemcacheQ&lt;/code&gt;，还有更强大和流行的&lt;code&gt;RabbitMQ&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>Memcached常规应用与分布式部署方案</title><link>https://blog.phpha.com/archives/7/</link><pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/7/</guid><description>&lt;p&gt;下面天涯 &lt;code&gt;[PHPHA.COM]&lt;/code&gt; 介绍下 &lt;code&gt;Memcached&lt;/code&gt; 的最常规的应用及分布式部署方案。相关内容参考了凹凸曼写的 &lt;code&gt;Memcached&lt;/code&gt; 使用与实践章节。至于 &lt;code&gt;Memcached&lt;/code&gt; 的安装及基本使用，这里不做介绍，有需要可以借助 &lt;code&gt;Google&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>PHP使用Memcache存储SESSION</title><link>https://blog.phpha.com/archives/18/</link><pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/18/</guid><description>&lt;p&gt;下面简单介绍下PHP项目分布式部署中，SESSION的同步方案中的一种，使用Memcache来存储SESSION。至于Memcached的安装请看&lt;a href="http://blog.phpha.com/archives/17/"&gt;《CentOS-6.4安装Memcached》&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>PHP防止快速刷新代码</title><link>https://blog.phpha.com/archives/9/</link><pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/9/</guid><description>&lt;p&gt;提供个PHP防快速刷新代码，直接上代码。&lt;/p&gt;</description></item><item><title>PHP面试中常见的字符串与文件操作题目</title><link>https://blog.phpha.com/archives/23/</link><pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/23/</guid><description>&lt;p&gt;由于最近考虑换工作，所以抽时间复习下面试中可能遇到的基本知识。下面是四道比较常见的题目，主要考察的是对字符串函数以及文件操作相关函数的掌握程度。&lt;/p&gt;</description></item><item><title>Ubuntu-14.04编译安装PHP-5.5.16</title><link>https://blog.phpha.com/archives/26/</link><pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/26/</guid><description>&lt;p&gt;继前两篇文章《&lt;a href="http://blog.phpha.com/archives/24/"&gt;Ubuntu-14.04编译安装Apache-2.4.10&lt;/a&gt;》和《&lt;a href="http://blog.phpha.com/archives/25/"&gt;Ubuntu-14.04编译安装MySQL-5.6.16&lt;/a&gt;》之后，本次介绍下PHP-5.5.16的编译安装。&lt;/p&gt;</description></item><item><title>WEB集群中常见的SESSION同步机制</title><link>https://blog.phpha.com/archives/4/</link><pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/4/</guid><description>&lt;p&gt;WEB集群是我们在项目中常见的情况，但是通过负载均衡后，会造成session的不同步问题，最直观的现象就是用户登录以后，会出现已登录与未登录的状态的不断切换。这是因为同一个IP访问同一个页面会被随机分配到不同的服务器上。&lt;/p&gt;</description></item><item><title>常用算法PHP版</title><link>https://blog.phpha.com/archives/3/</link><pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/3/</guid><description>&lt;p&gt;下面分享一些最常见的算法，用PHP如何实现。&lt;/p&gt;</description></item><item><title>用PHP实现的HashTable及说明</title><link>https://blog.phpha.com/archives/6/</link><pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate><guid>https://blog.phpha.com/archives/6/</guid><description>&lt;p&gt;下面是用PHP实现的HashTable代码，其中需要说明的有两点：&lt;/p&gt;</description></item></channel></rss>