PHP7 有什么好处?
首先,比 PHP5 占用更低内存;其次,性能快一倍以上;最后,WordPress 的 QPS 可以提升到原来的 3 倍左右。
WordPress 4.4 的 QPS 比较:数字越大,QPS 越高
本例的主机 VPS 配置
- 带宽:1Mbps
- CPU:1核
- 操作系统:Ubuntu 12.04 64位
- 内存:1GB
- 云盾:是
- 环境:Linux + Nginx + Memcached + PHP-FPM
为什么要编译安装
并不是为了酷,本站使用的 Ubuntu 12.04 版本太低,apt-get install 安装不到最新版的 GCC 和 PHP7 。
检查 GCC 版本
@Laruence 推荐用 GCC 4.8 以上编译 PHP7 ,检查一下 GCC 版本:
$ gcc -v
若低于 4.8 ,推荐编译升级 GCC,请参考 linux下升级gcc的方法 – 亲测可用 – C++爱好者博客 。
截止 2016年2月15日, GCC 的最新版是 5.3.0 ,请自行到 GCC 官网 查看和 选择下载地址 。
本例从 GCC 4.6.3 升级到了 GCC 5.3.0,步骤如下:
$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.3.0/gcc-5.3.0.tar.gz$ tar -xf gcc-5.3.0.tar.gz$ cd gcc-5.3.0
运行 download_prerequisites 脚本,这个脚本会自动帮你下载所需要的依赖文件和库:
$ ./contrib/download_prerequisites
建立输出目录,将所有的中间文件都放到该目录,
$ mkdir gcc_temp$ cd gcc_temp
运行
$ ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib$ make && make install
特别注意
编译时间依据机器性能而定,并消耗较多的内存。如果你的服务器内存也很紧张,请开启 500M 的 SWAP 交换区,否则 Make 阶段内存不足会报错 。本例服务器 IO 性能非常差,所以结束后再关掉 SWAP 交换区即可。
$ SWAP=/tmp/swap$ dd if=/dev/zero of=$SWAP bs=1M count=500$ mkswap $SWAP$ sudo swapon $SWAP
本例编译 GCC 5.3.0 用了 2-3 个小时。PHP7 编译安装也结束后,本例关掉了 SWAP 交换区:
$ sudo swapoff -a
开始编译安装 PHP7
截止 2016年2月15日 ,PHP7 的最新 stable 版本是 PHP 7.0.3 ,最新版本信息: http://php.net/downloads.php 。下载最新版:
$ wget http://cn2.php.net/get/php-7.0.3.tar.bz2/from/this/mirror$ tar jxvf mirror$ cd php-7.0.3/
可以先看看配置帮助:
./configure --help
本例使用的配置,其中 /usr/local/php 是安装目标位置
./configure --prefix=/usr/local/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip
如果提示某些模块找不到,可能需要单独安装它们,例如
$ sudo apt-get install libcurl4-gnutls-dev
您可能需要安装的模块有 libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel mysql pcre-devel curl-devel libxslt-devel 等等……
接下来运行:
$ make && make install
就开始编译安装了。
PHP7 编译安装完成的画面
PHP7 的配置和优化
复制配置文件
完成后还需要做一些配置和优化。首先,复制配置文件:
$ cp php.ini-development /usr/local/php/lib/php.ini$ cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf$ cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf$ cp -R ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
测试启动 PHP7-FPM
线上服务器一般已有 PHP5-FPM 服务在运行,请修改 www.conf 中的 user 和 group 为线上使用的用户名和用户组,并改掉默认 9000 端口号避免冲突。
启动 PHP7-FPM:
$ service php-fpm start
启动成功后可以查看 phpinfo() 等等。
本例 PHP7-FPM 的测试端口是 9008,假设线上 nginx 配置是 bokeyy,那么:
$ cp /etc/nginx/site-available/bokeyy /etc/nginx/site-enabled/bokeyy_php7$ vim /etc/nginx/site-enabled/bokeyy_php7
把
fastcgi_pass 127.0.0.1:9000;
的 9000 改成 9008,并开过一个端口。然后
$ service nginx configtest$ service nginx reload
就可以测试一下新端口的网站各方面是否正常。
性能对比测试
接下来直接和 PHP5.3.10 对比测试一下效率如何( 来源 )。
没开Opache的PHP7.0.3和PHP5.3.10的性能比较,PHP7大约快一倍但不是很明显
开了Opache的PHP7.0.3和PHP5.3.10的性能比较,性能提升非常显著
test.php 的内容
<?php$a = array(); for($i=0;$i<600000;$i++){ $a[$i] = $i; } foreach($a as $i) { array_key_exists($i, $a); }?>
配置 opcache
所以 Opcache ( http://php.net/opcache )是一定要启用的。而且早已有图证明,它能让 WordPress 提升不少 QPS。
WordPress 4.4 有无 Opache 的 QPS 比较
本例结合 Opache 官方推荐的配置 和 @Laruence 推荐的 Opache 配置 ,在 php.ini 加入:
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/opcache.soopcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.revalidate_freq=60opcache.fast_shutdown=1opcache.enable=1opcache.enable_cli=1opcache.file_cache=/tmp
其中 /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/opcache.so 是 opcache.so 所在的地址。
重启 PHP7-FPM 即可:
$ service php-fpm restart
所有安装和配置到此就结束了。
亚一程 @Laruence 有一篇 让PHP7达到最高性能的几个Tips | 04 Dec 15 ,提了不少让 PHP7 更快的有用的建议。
本例只采纳了一部分。对于天天被 php5-fpm 进程打满可怜的 1G 小内存的服务器来说,HugePage 和 Opcache file cache 都需要一定冗余内存,不太合适。
让你的PHP7更快(GCC PGO) 建议先训练一下 GCC 再编译针对 WordPress 的定制化 PHP7 版本似乎也值得采纳。但是,由于服务器资源严重不足,基本上所有 WordPress 页面都不是即时生成的,而是走了时效为半天的 WP Super Cache 缓存。所以,生成 WordPress 首页的速度提升 7-10% 对本例的服务器来说意义很有限,所以也没有做了。
因此最后只采纳了“开启Opache”、“使用 GCC 4.8 以上的编译器”这两项。
清理环境
如果测试 PHP7-FPM 没有任何问题,就可以删掉测试网站
$ rm /etc/nginx/site-enabled/bokeyy_php7
编辑 www.conf 把 PHP7-FPM 的端口改成 9000
$ vim /usr/local/php/etc/php-fpm.d/www.conf
最后关掉 PHP5-FPM,用 PHP7-FPM 来替代:
$ service php-fpm configtest$ service php5-fpm stop$ service php-fpm restart$ service nginx configtest$ service nginx reload
增加软链接
为了无论在哪个目录下输入 php 都能调用刚刚安装的 /usr/local/php/bin/php ,而不用输入这么长,建立几个软链接
$ cd /usr/bin$ ln -s /usr/local/php/bin/php php$ ln -s /usr/local/php/bin/phpize phpize$ ln -s /usr/local/php/bin/php-config php-config
现在只要
$ php -v
就能查看刚刚安装的 php 版本了。以后安装 PHP 插件也可以直接 phpize 和 php-config 了。
本例还有 WordPress 网站需要 Memcache,所以还没有结束。
安装并配置 PHP7-MEMCACHED
你一定好奇 PHP 的 memcached 和 memcache 插件有什么区别。事实上,它们功能差不多,都依赖默认在 11211 端口的 memcached 服务,只是封装方法不同,而 php-memcached 更新更勤快一些,功能也更多。
最重要的是, 在安装 PHP 7.0.3 你会发现,你只能装 php-memcached ! 注意有这个 d (截至 2016年2月15日)。让我们开始吧:
请到 github 下载 php-memcached 插件的 php7 分支( https://github.com/php-memcached-dev/php-memcached/tree/php7 ):
$ wget https://github.com/php-memcached-dev/php-memcached/archive/php7.zip
解压并安装:
$ unzip php7.zip$ cd php-memcached-php7/$ root=/usr/local/php$ $root/bin/phpize$ ./configure --with-php-config=$root/bin/php-config
这一步可能会提示你没有 libmemcached 库:
$ cd ..$ wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz$ tar xvf libmemcached-1.0.18.tar.gz$ cd libmemcached-1.0.18$ ./configure$ cd ../php-memcached-php7/$ ./configure --with-php-config=$root/bin/php-config
可能还提示不支持 memcache sasl ,推荐禁用,好吧!
$ ./configure --with-php-config=$root/bin/php-config --disable-memcached-sasl
终于可以运行
$ make && make install
最后将 memcached.so 的地址加入 php.ini 就装好了:
$ vim /usr/local/php/lib/php.ini
加入
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/memcached.so
但是还有一个坑前面没有提及: WordPress 官方 Memcached 插件 只支持 php-memcache ,注意没有 d。所以我们用这个支持 php-memcached 的插件 https://github.com/tollmanz/wordpress-pecl-memcached-object-cache 。按照链接所示一步步配置来就行了。
感兴趣的还可以看看插件作者关于 php-memcache 和 php-memcached 两个 PHP 插件区别的文章: WordPress Object Cache Driven By The PECL Memcache(d) Extension 。
为什么只能用 php-memcached (有d)
截止 2015年2月15日,PHP7.0.3 下直接试图安装 php-memcache 会报错:
fatal error: ext/standard/php_smart_str.h: No such file or directory
查了一下原因 ,是因为 PHP7 里面,这个文件改成了 php_smart_string.h 。博主尝试过手动将文件名改成正确的,然而也没有用,还会报错:
error: 'RETURN STRING' undeclared(first use in this function)
所以这是插件暂不兼容 PHP7 。只能等待,直到 php-memcache 插件更新。所以博主最后放弃,按照上文,使用了 php-memcached 插件作为替代。
参考的博客文章
- The Definitive PHP 7.0 & HHVM Benchmark
- linux下升级gcc的方法 – 亲测可用 – C++爱好者博客
- 让PHP7达到最高性能的几个Tips | 04 Dec 15
- Linux环境PHP7.0安装

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP中使用clone关键字创建对象副本,并通过\_\_clone魔法方法定制克隆行为。1.使用clone关键字进行浅拷贝,克隆对象的属性但不克隆对象属性内的对象。2.通过\_\_clone方法可以深拷贝嵌套对象,避免浅拷贝问题。3.注意避免克隆中的循环引用和性能问题,优化克隆操作以提高效率。

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

记事本++7.3.1
好用且免费的代码编辑器