我在 2019 编写了一个解析器,为我的
OpenSource Hosting-Panel“fruithost”准备并输出
phpinfo()
。
在这里,我找到了一种方法来输出
phpinfo()
与先前指定目录的范围,因为托管用户也可以在子目录中创建 php.ini
。
该方法的特别之处在于,整个过程是直接通过 Web 服务器和
PHP-FPM
执行的,因此专门使用先前指定目录的 phpinfo();
。
对我来说不幸的是,由于 git stash,我当时丢失了该部分,我恢复文件的努力(这里我已经用尽了所有可能的可能性)是徒劳的。
现在我想重新开始整个话题,再次寻找实现我的意图的可能性。
故事有问题:
我不能只打印
phpinfo()
,因为这里打印的是配置,它在完全不同的上下文中运行。如您所知,没有 phpinfo('/path/to/php.ini')
方法。 🙄
通过
php -i -c /destination/path/
使用 PHP CLI 在这里不起作用,因为整个过程是由 php-cli 在不同的上下文中执行的,而且输出也不会以 HTML 形式发生。特别是,这里加载了其他不代表PHP-FPM配置的PHP模块。
期望的行为:
在屏幕截图上您可以看到需要什么: 在最右上角,可以选择一个域。例如
example.com
或 sample.net
。这些域位于以下路径:
/var/fruithost/
/<username>
/<domain>
如果用户选择右上角的域(例如
sample.net
),phpinfo()
使用目录 /var/fruithost/<username>/sample.net/
,因为 php.ini
可能位于此处。
该基数随后用于控制
phpinfo()
的输出。
有哪些想法和做法?
我创建了一个小脚本,可以帮助您从 CLI 获取 HTML,您可以在其中指定自定义
php.ini
文件:
用途:
$ ./phpinfo.sh /path/to/your/php.ini
这是脚本(在上面的命令中称为
phpinfo.sh
):
#!/bin/bash
# CONFIGURATION
server_port=8000
temp_php_file=temp-phpinfo.php
result_file=result-phpinfo.html
# EXECUTION
echo "<?php phpinfo();" > $temp_php_file
php -c $1 -S localhost:$server_port &
pid=$!
echo $(curl -L http://localhost:$server_port/temp-phpinfo.php) > $result_file
kill $pid
rm $temp_php_file
主要思想是启动并立即终止 PHP 内置 Web 服务器,以使用自定义
phpinfo()
调用 php.ini
(这是有效的,因为内置服务器是由 CLI 启动的,您可以在其中指定 -c
论证)。
此脚本将生成一个包含所需输出的 HTML 文件。显然您可以根据需要自定义参数。
完全不同的方法是为您拥有的每个网站(目录/虚拟主机)创建不同的 PHP-FPM 池,然后使用目录中的
.user.ini
文件来指定自定义设置 (https://www.php.net /manual/en/configuration.file.per-user.php)。使用这种方法,您需要从可以访问 .user.ini
文件的目录调用 PHP。这是一种更加结构化的方法,您应该考虑是否适用于您的案例。