最新 | 最热门 | 最高评价

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

Tag: php | homebrew | macOS
Volcano 发于 2017年07月25日 21:29 | 点击: 533 | 展开摘要
用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 | 点击: 534 | 展开摘要
MediaWiki的 maintenance 目录下存放着维护脚本,记录一下。

createAndPromote.php

用于创建或者修改已经存在的用户。参数如下

php createAndPromote.php [--bureaucrat] [--sysop] [--bot] [--custom-groups=<group1>,<group2>] [--force] username [password]

示例

php createAndP

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

+0  Laravel专供:实现Schemaless

Tag: Technical | PHP
老王 发于 2017年01月14日 17:11 | 点击: 621 | 展开摘要
之所以要实现 Schemaless,主要是因为在线 DDL 有很多痛点,关于这一点,我在以前已经写过文章,没看过的不妨看看「史上最LOW的在线DDL解决方案」,不过那篇文章主要以介绍为主,并没有涉及具体的实现,所以我写了一个 Laravel 的例子。

首先创建测试用的 users 表,并且添加虚拟字段 name、address、level:

mysql> CREATE TABLE users (
id INT UNSIGNED NOT NULL

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

+0  谈谈PHP的Reload操作

Tag: Technical | PHP
老王 发于 2016年12月11日 19:00 | 点击: 702 | 展开摘要
通常修改了 PHP 的配置后,为了让修改生效会执行 reload,而不是 restart,因为有很多前辈告诫过我们,reload 能保证整个过程的平滑性,所谓平滑性指的是在 reload 的过程中,旧的进程在处理完当前请求前不会提前终止。很多年来,我一直坚信这个结论,直到有一天,当我 reload 的时候,出现了 502 错误,让我不得不重新思考。

如何重现问题呢?让我们写一个简单的脚本来模拟:

<?php

sleep(11);
echo "foo";

?>

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

+0  一个PHP实现的ID生成器

Tag: Technical | PHP
老王 发于 2016年11月03日 20:03 | 点击: 281 | 展开摘要
通常来说,不管使用什么数据库,表里都有一个名为 id 的主键,既然是主键,那么必然要满足唯一性,对于 MySQL 用户来说,它多半是一个 auto_increment 自增字段,也有一些别的用户喜欢使用 UUID 做主键,不过对 MySQL(特别是 InnoDB)来说,UUID 通常不是一个好选择,因为聚簇索引要求物理数据按照主键排序,而 UUID 本身是无序的,所以会带来很多不必要的 IO 消耗。于是乎我们得到一个结论:ID 最好是顺序的唯一值。

如此说来,就用 MySQ

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

+0  实战Pinba

Tag: Technical | PHP
老王 发于 2016年10月26日 16:33 | 点击: 253 | 展开摘要
谁都知道监控系统很重要,但是要自己搭建一套好用的系统却不是一件简单的事情。国内已经有不少厂商提供类似的服务,比如:OneAPM、听云,其原理就是通过在服务器上部署一套探针,把数据汇总上报,但是问题却不像说起来这么简单,我曾经买过国内某个厂商高大上的 APM 服务,谁知道它监控的指标太多了,并且无法自定义,结果导致一上线,系统性能就下降百分之二十,最后无奈只好放弃。

我想要的是一种对系统性能影响尽可能小的监控系统,它不需要监控太多指标,只要有 RPS、CPU、内存、响应时间等

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

+0  集成于 iphp 框架的 PHP 并发模型和工具

Tag: PHP
ideawu 发于 2016年08月19日 14:29 | 点击: 537 | 展开摘要
由于 PHP 具有"所思即所写"的强大优势, 使其在 Web 之外, 也被广泛用于后台脚本编写. 而且, 当你已经用 PHP 来开发 Web 应用时, 你显然不愿意再引入 Java 或者 Python 等语言, 再说, 这些语言相对 PHP 的强大优势, 显示太弱了.

不过, 用 PHP 来编写后台脚本, 也有一些劣势, 那便是 PHP 缺少并发模型. 例如, 当你用 HTTP 请求第三方服务, 而第三方每一个请求要处理 10 秒时, 这就需要你并发地发起请求. curl_

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

+0  记录一个多核CPU负载不均衡问题

Tag: Technical | Linux | PHP
老王 发于 2016年07月19日 21:07 | 点击: 242 | 展开摘要
昨晚和一位读者朋友讨论了一个问题:在一台多核 CPU 的 Web 服务器上,存在负载不均衡问题,其中 CPU0 的负载明显高于其它 CPUx,进一步调查表明 PHP-FPM 的嫌疑很大。话说以前我曾经记录过软中断导致过类似的问题,但是本例中可以排除嫌疑。

让我们在一台四核服务器上采样分析一下数据确认看看是否存在负载不均衡问题:

shell> mpstat -P ALL 1 10

CPU %usr %nice %sys %iowait %irq

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

+0  PHP过滤掉Emoji表情字符

Tag: PHP
ideawu 发于 2016年06月23日 15:53 | 点击: 2604 | 展开摘要
这段代码在 stackoverflow 上搜到, 据说是 Smarty 用的.

function smarty_modifier_emojistrip($string)
{
return preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $string);
}

Related posts:
史上最强大的PHP MySQL操作类

消除JavaScri

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

+0  如何正确发布PHP代码

Tag: Technical | PHP
老王 发于 2016年05月27日 20:47 | 点击: 228 | 展开摘要
几乎每一个 PHP 程序员都发布过代码,可能是通过 ftp 或者 rsync 同步的,也可能是通过 svn 或者 git 更新的。一个活跃的项目可能每天都要发布若干次代码,但是现实却是很少有人注意其中的细节,实际上这里面有好多坑,很可能你就在坑中却浑然不知。

一个正确实现的发布系统至少应该支持原子发布。如果说每一个版本都表示一个独立的状态的话,那么在发布期间,任何一次请求只能在单一状态下被执行。如此称之为支持原子发布;反之如果在发布期间,一次请求跨越不同的状态,那么就不能称

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

+0  记几个常见的Laravel报错

Tag: Technical | PHP
老王 发于 2016年02月29日 18:17 | 点击: 241 | 展开摘要
我已经用了一段时间的 Laravel 框架了,期间遇到了不少问题,有一些调试起来着实不太容易,本文筛选出几个,如果能让大家少走一些弯路,那我就算没白写。

报错:「Can’t swap PDO instance while within transaction」

通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的:

<?php

public function setPdo($pdo)
{
if ($this->

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

+0  PHP 用 curl 读取 HTTP chunked 数据

Tag: PHP
ideawu 发于 2016年02月25日 16:44 | 点击: 581 | 展开摘要
对于 Web 服务器返回的 HTTP chunked 数据, 我们可能希望在每一个 chunk 返回时得到回调, 而不是所有的响应返回后再回调. 例如, 当服务器是 icomet 的时候.

在 PHP 中使用 curl 代码如下:

<?php
$url = "http://127.0.0.1:8100/stream";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'myfunc'

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