[运维用到]PHP的with-config-file-path 这个是用来指定目录,不是指定文件,PHP扩展的ini配置文件目录指定。

jackxiang 2016-3-18 16:01 | |
背景:运行指定扩展配置文件extension.ini的扫描目录,这样结构化有利于运维进行模块添加,也是后来我运维时看到并实践的文章,参考文章,http://jackxiang.com/post/8613/。

参数 --prefix=/usr/local/php --with-config-file-scan-dir=/usr/local/php/etc/
一定要设置正确,多个PHP版本须编译安装在不同路径!!!后面编译后无法修改此项:
Set the path in which to look for php.ini [PREFIX/lib]
--with-config-file-scan-dir=PATH
php.ini的扩展目录,php  -c /usr/local/php/etc/php-workerman.ini  --ini=/usr/local/php/etc/php-workerman.d --help|grep scan 编译完php二进制后并没有提供参数指定。

作者:风吹我已散博客
链接:https://www.jianshu.com/p/f13402d5217e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



PHP7在和PHP6一块时注意这个参数,下面就是编译时给指向了PHP5的目录了,出现运行报错,如下:
/usr/local/php7/bin/php start.php
PHP Warning:  PHP Startup: Unable to load dynamic library 'redis.so' (tried: /usr/local/php/ext/redis.so (/usr/local/php/ext/redis.so: Undefined symbol "zval_used_for_init"), /usr/local/php/ext/redis.so.so (Cannot open "/usr/local/php/ext/redis.so.so")) in Unknown on line 0
Usage: php yourfile <command> [mode]


还原编译时的命令,如下:
/usr/local/php7/bin/php -i|grep configure  编译参数:
--with-config-file-scan-dir=/usr/local/php7/etc/php.d

个性php.ini里面的参数:
extension_dir => /usr/local/php/ext/ => /usr/local/php/ext/  #这一行没有写,所以就找到/usr/local/php/ext上去了,得写成:
extension_dir => /usr/local/php7/ext/ => /usr/local/php7/ext/
/bin/sed -i 's#; extension_dir = \"\.\/\"#extension_dir = "/usr/local/php/ext/"#'  %{buildroot}/%{_prefix}/etc/php.ini
#sed -i "" 's#; extension_dir = \"\.\/\"#extension_dir = "/usr/local/php7/ext/"#' /usr/local/php7/etc/php.ini
737 extension_dir = "/usr/local/php7/ext/"
738 ; On windows:
739 ; extension_dir = "ext"  




/usr/local/php/etc/php.d/redis.ini
php -m|grep redis
redis
是因为有:
--with-config-file-scan-dir=/usr/local/php/etc/php.d \
--with-config-file-scan-dir是搜索下面的ini文件和php.ini一起使用,好处就是扩展的那些extension="xx.so"可以放里面,每个扩展一个ini文件,可以方便的用自动化脚本或者部署脚本来搞,看起来模块化了


'—with-config-file-path=/data/software/php-5.6.15/lib/php.ini

open("/data/software/php-5.6.15/bin/php-cli.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/data/software/php-5.6.15/lib/php.ini/php-cli.ini", O_RDONLY) = -1 ENOTDIR (Not a directory)
open("/data/software/php-5.6.15/bin/php.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/data/software/php-5.6.15/lib/php.ini/php.ini", O_RDONLY) = -1 ENOTDIR (Not a directory)


求问这是bug么?
--with-config-file-path=PATH
  --with-config-file-scan-dir=PATH
—with-config-file-path 这个是用来指定目录,不是指定文件。
scan这个干嘛的?还能指定php去这个配置目录扫描?
http://php.net/manual/zh/function.php-ini-scanned-files.php
php.conf.d/*.ini

应该一个是cli,一个是运行服务的吧?
不是吧 应该是搜索这个目录下的 *.ini 文件吧

scan是扩展配置文件目录
cli sapi默认都是编译时指定的位置,也可以手动指定

嗯,--with-config-file-scan-dir是搜索下面的ini文件和php.ini一起使用,好处就是扩展的那些extension="xx.so"可以放里面,每个扩展一个ini文件,可以方便的用自动化脚本或者部署脚本来搞,看起来模块化了


关于opcache想编译成静态所谓提高效率:

PHP 5.5.0 及后续版本,
OPcache 只能编译为共享扩展。
—————————————————
理论上性能好点儿,高并发可能瓶颈不在这儿,所以不明显。
静态这个是迷信 嘿嘿,嗯 所以我说这是我自己的迷信 嘿嘿。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/8577/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2020-1-11 00:14
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]