最新 | 最热门 | 最高评价

+0  通过ProxySQL提升PHP/MySQL的性能

Tag: Technical | MySQL | PHP
老王 发于 2018年07月09日 19:35 | 点击: 2171 | 展开摘要
前些天我介绍了如何通过 Twemproxy 实现 Redis 连接池,进而提升 PHP/Redis 的性能。今天我要介绍一下 ProxySQL,通过它可以实现 MySQL 连接池,进而提升 PHP/MySQL 的性能,实际上原理是差不多的,本来没必要再写一篇文章赘述,不过我在配置使用 ProxySQL 的过程中,遇到了一些小问题,感觉还是应该记录一下。

关于安装过程,官方 Wiki 里有详细描述。主要看配置文件 /etc/proxysql.cnf :

datadir="/

查看全文: http://www.udpwork.com/item/16943.html

+0  通过Twemproxy提升PHP/Redis的性能

Tag: Technical | PHP
老王 发于 2018年06月23日 21:15 | 点击: 2481 | 展开摘要
Twemproxy 可以说是最古老的 Redis 代理软件了,一般来说,引入代理后性能会比没有引入代理时低一些,毕竟代理会导致一些额外的性能损耗,可是 Twemproxy 却会提升性能, 这主要得益于它的 Pipelining 功能可以实现打包请求,简单点说:当代理收到多个并发请求时,它会把这些请求打包成一个请求发送给后端服务器,从而减少不必要的 RTT。关于 Pipelining 本文不做过多讨论,实际上我想说的是它的另一个功能:连接池!下面看看如何通过 Twemproxy

查看全文: http://www.udpwork.com/item/16920.html

+0  PHP 获取周一,上个月的正确做法

Tag: PHP
ideawu 发于 2018年05月31日 19:09 | 点击: 1866 | 展开摘要
如果你理所当然地认为在 PHP 中获取周一,上周一,上个月,下个月这些时间能简单地用 strtotime() 函数来获取的话,那你就大错特错了!

$now = strtotime('2018-01-31');
echo date('Y-m-d', strtotime('+1 month', $now)) . "\n";

输出的结果是:

2018-03-03

并不是期望的返回2月份的某一天,而返回了错误的3月份。为什么呢?这和 strtotime() 的实现原理有关:

查看全文: http://www.udpwork.com/item/16874.html

+0  如何编码事务

Tag: Technical | PHP
老王 发于 2018年04月24日 16:55 | 点击: 4192 | 展开摘要
我说的事务指的是一般的数据库事务,而不是什么分布式事务之类高大上的概念。听起来很简单,但是即便如此,想实现的优雅一点也不是一件容易的事情。 

假设有一个 QA 系统,当用户在上面提问的时候,系统保存问题,然后更新用户的提问数,最后触发一个问题已经被创建的异步事件来解耦逻辑(代码均使用 Lumen 框架):

<?php

try {
DB::beginTransaction();

$question->content = '...';

查看全文: http://www.udpwork.com/item/16806.html

+0  Install extension for macOS built-in PHP

Tag: php | macOS
Volcano 发于 2018年03月22日 14:33 | 点击: 1878 | 展开摘要
macOS High Sierra 10.13.3 ships with PHP 7.1.7. I’m trying to install an extension for the built-in PHP. I tried the pecl command but no lucky because SIP (System Integrity Protection) protection. I can’t add file under the dire

查看全文: http://www.udpwork.com/item/16740.html

+0  记录file_get_contents返回空字符串的问题

Tag: Technical | PHP
老王 发于 2018年03月21日 19:45 | 点击: 2369 | 展开摘要
群里一位大佬上午说了一句箴言:「 世界上没有什么故障是重启解决不了的,如果有,再重启一次。」,结果下午群里就有一位朋友遇到了一个诡异的老版本 PHP 问题:当使用 file_get_contents 抓取网页内容的时候,总是返回空字符串,奇怪的是换用 curl 扩展后又一切正常。不过,重启没有解决他的问题,再重启一次也不行。

既然 curl 能够正常工作,至少可以证明网络本身没问题。

首先值得怀疑的是 allow_url_fopen 配置。如果没有开启它的话,

file

查看全文: http://www.udpwork.com/item/16739.html

+0  谈谈JSONAPI在PHP中的应用

Tag: Technical | PHP
老王 发于 2017年12月24日 11:45 | 点击: 2265 | 展开摘要
现在服务端程序员的主要工作已经不再是套模版,而是编写基于 JSON 的 API 接口。可惜大家编写接口的风格往往迥异,这就给系统集成带来了很多不必要的沟通成本,如果你有类似的困扰,那么不妨关注一下 JSONAPI,它是一个基于 JSON 构建 API 的规范标准,一个简单的 API 接口大致如下所示:

JSONAPI

简单说明一下:根节点中的 data 用来放置主对象的内容,其中 type 和 id 是必须要有的字段,用来表示主对象的类型和标识,其它简单的属性统统放置到

查看全文: http://www.udpwork.com/item/16562.html

+0  Blog安全问题小记

Tag: Security | DDos | PHP | WordPress | XML-RPC Attack
四火 发于 2017年11月21日 03:50 | 点击: 2528 | 展开摘要
最近Blog遭遇了几个安全问题,折腾了几个钟头,在此记录一下。

最大的问题是blog访问时不时地出现“502 bad gateway”,即便不出现,latency也能达到接近三十秒。

于是登上vps去看原因,top命令发现CPU都用完了。靠,十个php-fpm居然都在满功率工作。研究了一下,通常php-fpm在没有请求的时候是不应该占用那么多CPU资源的,而且mysql也高,似乎有人在访问网站,但是去access log里面却没找到东西:

top - 02:08:12

查看全文: http://www.udpwork.com/item/16506.html

+0  史上最LOW的PHP连接池解决方案

Tag: Technical | PHP
老王 发于 2017年09月10日 14:39 | 点击: 4105 | 展开摘要
大多数 PHP 程序员从来没有使用过连接池,主要原因是按照 PHP 本身的运行机制并不容易实现连接池,于是乎 PHP 程序员一方面不得不承受其它程序员的冷嘲热讽,另一方面还得面对频繁短链接导致的性能低下和 TIME_WAIT 等问题。 说到这,我猜一定会有 PHP 程序员跳出来说可以使用长连接啊,效果是一样一样的。比如以 PHP 中最流行的 Redis 模块 PhpRedis 为例,便有 pconnect 方法可用,通过它可以复用之前创建的连接,效果和使用连接池差不多。可惜

查看全文: http://www.udpwork.com/item/16413.html

+0  实战Guzzle抓取

Tag: Technical | PHP
老王 发于 2017年08月23日 20:30 | 点击: 4804 | 展开摘要
虽然早就知道很多人用 Guzzle 爬数据,但是我却从来没有真正实践过,因为在我的潜意识里,抓取是 Python 的地盘。不过前段时间,当我抓汽车之家数据的时候,好心人跟我提起 Goutte 搭配 Guzzle 是最好的爬虫,让我一直记挂在心上,加上最近打算更新一下车型数据,于是我便重写了抓取汽车之家数据的脚本。

因为我是通过接口抓取,而不是网页,所以暂时用不上 Goutte,只用 Guzzle 就可以了,抓取过程中需要注意两点:首先需要注意的是通过并发节省时间,其次需要注

查看全文: http://www.udpwork.com/item/16392.html

+0  在macOS下用homebrew安装php 7.1以及pecl

Tag: php | homebrew | macOS
Volcano 发于 2017年07月25日 21:29 | 点击: 2558 | 展开摘要
用homebrew默认安装的php 7.1没有包含pecl命令。但是重新安装可以解决这个问题,如果出现libpng不兼容问题,可以加上-s参数 brew remove php71 brew install php71 --with-pear

查看全文: http://www.udpwork.com/item/16362.html

+0  MediaWiki的维护脚本

Tag: php | wiki
Volcano 发于 2017年05月03日 10:37 | 点击: 2347 | 展开摘要
MediaWiki的 maintenance 目录下存放着维护脚本,记录一下。 createAndPromote.php 用于创建或者修改已经存在的用户。参数如下 php createAndPromote.php [--bureaucrat] [--sysop] [--bot] [--custom-groups=<group1>,<group2>] [--force] username [password] 示例 php createAndPr

查看全文: http://www.udpwork.com/item/16249.html
|<<<1234567>>>| 一共18页, 216条记录