我们在 CentOS 7 上启用了 SCL 并安装了 Python 2.7、Apache 2.4 和 PHP 7.1。看起来正在使用更新的程序。然而,我们似乎在 PHP 强化方面遇到了问题。
首先,php.ini
我们可以找到:
# find /opt/rh -name php.ini
/opt/rh/rh-php71/register.content/etc/opt/rh/rh-php71/php.ini
接下来,我们添加了disable_functions
:
# grep disable_functions /opt/rh/rh-php71/register.content/etc/opt/rh/rh-php71/php.ini
disable_functions=apache_note,apache_setenv,chgrp,closelog,debugger_off,debugger
_on,define_sys,define_syslog_variables,diskfreespace,dl,escapeshellarg,escapeshe
llcmd,exec,getmypid,getmyuid,ini_restore,leak,listen,openlog,passthru,pclose,pcn
tl_alarm,pcntl_exec,pcntl_fork,pcntl_getpriority,pcntl_get_last_error,pcntl_setp
riority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,
pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcnt
l_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php
_uname,popen,posix,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_
getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgi
d,posix_getpgrp,posix_getpid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix
_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_se
teuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_tty
name,posix_uname,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,s
hell_exec,show_source,syslog,system,url_exec,_getppid
最后我们重启Apache的时候,添加一个phpinfo.php
页面,然后检查结果(这是真实的Web服务器结果),PHP声称没有禁用的功能:
我认为我们使用了错误的php.ini
,但我似乎找不到我们应该使用的。我在文件系统上找不到它,/opt
并且搜索返回不相关的结果。
我的问题是,php.ini
SCL PHP什么时候生效?
答案1
软件集合将其大部分内容安装在下面/opt
,但配置实际上位于下面/etc/opt
。 (看到其中任何一个我都不会感到惊讶/var/opt
。)您找到的文件实际上是由./etc/opt/…
/opt/rh/rh-php71/register.d
答案2
我相信 @ulrich-schwarz 提供了正确的答案,但为了其他像我一样后来遇到这个问题但没有立即看到答案的人扩展了他的答案。
当安装软件集合时,目录结构php.ini
中有一个/opt/rh/...
,但正如他指出的,它存在于/etc/opt/rh/
目录中。
就我而言,我发现该rh-php56-php
包将 php.ini 放入/etc/opt/rh/rh-php56/php.ini
- 只需添加disable_functions = "phpinfo"
到该文件即可禁用该功能。
要验证这一点,请使用以下内容/opt/rh/httpd24/root/var/www/html/
创建一个:index.php
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php
echo '<p>Hello World - '.date('F Y h:i:s A').' </p>';
phpinfo();
?>
</body>
</html>
全新安装应生成一个页面,其中包含当前日期/时间,后跟phpinfo()
文本块。
现在编辑该/etc/opt/rh/rh-php56/php.ini
文件(替换为正确的版本号),并将该disable_functions
行更改为disable_functions = "phpinfo"
.
现在重新启动 HTTP 服务器,systemctl restart httpd24-httpd.service
并重新加载网页。时间仍应显示,但文本块phpinfo()
应丢失。
这也应该适用于rh-php70-php
、rh-php71-php
、rh-php72-php
和rh-php73-php
包 -/etc/opt/rh/rh-php##
相应地调整路径。