💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # php7和php5兼容性检查 截止目前基本上绝大多数的PHP都可以完美的支持PHP7.0了。但是可能你恰好有一些历史遗留的脚本和程序,那么也好办,社区已经有好多的工具做兼容性检查,甚至给出直接的代码转译,以下是几个值得推荐的工具: php7cc:一个很不错的工具,不过目前已经不再更新了。(github地址: /sstalle/php7cc) php7mar:PHP 7迁移助手。 (github地址:/Alexia/php7mar) 使用方法: ~~~ php mar.php -f="/path/to/project/root/" -r="/path/to/output/" ~~~ phan:PHP脚本的静态分析器。 可以做当做php 7的语法检查器。(github地址:/phan/phan) `phan --project-root-directory --progress-bar -o phan.out` phpstan - PHP静态分析和兼容性检查工具。(github地址:/phpstan/phpstan) # php7性能设置要点 ## Opcache 首先,确保已经启用了OpCache。可以通过主配置文件php.ini或它独特的配置文件opcache.ini文件(例如/etc/php/7.2/fpm/conf.d/10-opcache.ini)。来进行设置。 ~~~ zend_extension=opcache.so opcache.enable=1 opcache.enable_cli=1 ~~~ ## 设置合适的realpath_cache_size 通过设置合宜的realpath_cache_size值可以改善你服务器的并发: ~~~ realpath_cache_size = 256k realpath_cache_ttl = 300 ~~~ equire,require_once,include,include_once这四个语句(并非函数)大家经常会用到,如果用这类语句去包含文件(相对路径)的话,那么PHP会去include_path所 指定的路径中去查找相关文件。一个应用中会存在大量的require_once语句调用,如果每次调用都去include_path中查找相应的文件,势 必会对应用的性能产生负面影响。为了避免这种负面效应产生的影响,PHPER们会使用文件的绝对路径来包含所需的文件,这样就减少了查询 include_path的次数。 其实,PHP自5.1.0起,就引入了RealpathCache。RealpathCache可以把PHP所用到文件的realpath进行缓存,以便PHP再使用这些文件的时候不需要再去include_path中查找,加快PHP的执行速度。 其中realpath_cache_size指定了realpath cache的大小,默认为16k,如果你觉得这个容量太小,可以适当增加;realpath_cache_ttl指定了缓存的过期时间,默认为120秒, 对于不经常修改的生产环境来说,这个数字可以调整的更大些。 由于realpath会 展开symlink(即软连接),所以如果你使用修改symlink目标这种方式发布应用的新版本的话,realpath cache会导致一些问题的出现:当你修改symlink使其指向一个新的release目录时候,由于realpath cache所缓存内容还没有过期,于是就会出现应用使用的还是旧的release,直到realpath cache所缓存内容过期失效为止(默认120秒),或者重启php-fpm。 ## 禁止mysqlnd.collect_statistics ~~~ mysqlnd.collect_statistics = Off mysqlnd.collect_memory_statistics = Off ~~~ 线上服务器选择禁止这两个选项,可以减少不必要的数据库访问。如果需要相关统计,可以使用MySQL工具或者监控。 是否启用mysql内存访问统计,可以通过下列函数获取信息mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats() 生产环境为关闭 开发环境为打开 ## 使用新的编译器 GCC 4.8编译器下编译时PHP才能开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升。 ## 开启Transparent HugePage (透传大页) 内存默认是以4KB分页的,而虚拟地址和内存地址需要转换,转化时候需要进行搜索,为了加速转换过程,可以通过内存TLB(Translation Lookaside Buffer)来。所以通过启用大内存页可以增加TLB 缓存命中,从而提高性能。 设置系统支持: ~~~ sysctl vm.nr_hugepages=512 ~~~ php.ini 增加支持 ~~~ opcache.huge_code_pages=1 ~~~ 关于这个值,很多实践后发现启用透传大页面后会带来系统负载过高,cpu占用过高问题,这时候通过关闭就可以解决。所以这个参数需要实际情况斟酌测试使用。 ## 开启PGO PHP是专门为一个项目服务,比如一个 Wordpress或者drupal站点,就可以使用PGO提高性能