PHP 通过 ReflectionMethod 反射类方法获取文档注释返回 false 的解决

问题描述

在公司的测试环境运行以上代码,如果是 CLI 模式,可以输出注释的内容,而如果是 FPM (网页浏览)模式,却输出 bool(false)。

问题解决

问了技术主管,才知道原来是 Opcache 配置项引起的问题。公司测试环境 PHP 开启了 Opcache 扩展,原配置如下:

将 opcache.save_comments=0 改为 opcache.save_comments=1 保存重启 PHP-FPM 进程,即可通过反射获取文档的注释了。

关于 Opcache 的 save_comment 和 load_comments 的含义请参考 PHP 官方文档中的解释:

opcache.save_comment 开启后将脚本文件中的注释内容将会包含到操作码缓存文件中,适用于我所碰到的问题。

opcache.load_comment 开启或者禁用的区别只是应用程序是否会按需加载注释内容,禁用则是按需加载,开启则总是加载。

问题总结

遇到这个问题的时候, 以为是 PHP 版本的问题,我本机的 PHP 5.6 的修订版本号比测试环境的 PHP 5.6 的修订版本号略新一点,打算让运维部门编译一个新版本的 PHP 5.6 到测试服务器上的。还好问了问主管,一下就解决了问题,填补了这个知识盲区。遇问题要多沟通!

WordPress 使用本地化的 emoji 表情包

结合使用 Native Emoji 和 WP Local Emoji 两个插件,可以达到使用本地化的 emoji 表情包的目的。

安装好上述两个插件并且启用:

为了使 Native Emoji 表情使用本地化的 emoji 表情包图片,而不是 s.w.org 域名下的表情包图片,需要修改以下两处源代码。

修改 wp-content/plugins/native-emoji/js/tinymce-plugin.js,替换以下代码:

为:

修改 wp-content/plugins/wp-local-emoji/wp-local-emoji.php,新增代码:

保存好之后,不论是在编辑器中使用 emoji 表情包,抑或插入 emoji 表情到文章里,都将使用本地化的 emoji 表情图片了 😎!

Laravel .env 多环境配置文件的使用

项目开发中,通常会有本地开发环境、内网测试环境、线上真实环境。这三种环境的配置通常都不尽相同,Laravel 可以通过环境变量  APP_ENV 的值来加载不同的 .env 配置文件。下面会介绍两种方法,分别是通过 Nginx 和 PHP-FPM 来设置 APP_ENV 环境变量的值。

方法一:修改 Nginx 配置文件设置 APP_ENV:

方法二:修改 PHP-FPM 配置文件设置 APP_ENV:

上述两种方法只需二选一。重启 Nginx 和 PHP-FPM 服务,Laravel 框架就会自动选择加载项目根目录下的 .env.xxxx 配置文件,而不会去加载 .env 配置文件了。

通过 APP_ENV 环境变量值加载特定 .env 配置文件的 Laravel 源代码位于文件Illuminate/Foundation/Bootstrap/DetectEnvironment.php 中,摘录关键代码如下:

请注意:

当设置了 APP_ENV 环境变量时,当运行 Laravel 的 Aritsan 终端命令之前,比如迁移命令(./artisan migrate)、启动队列侦听器(./artisan queue:listen)等等,均需要在终端也导入 APP_ENV 环境变量。

或者

当然,也可以选择在 ~/.bash_profile 或者 ~/.bashrc 中一劳永逸地设定好终端环境变量 APP_ENV 的值。