如何让PHP能够读取系统环境变量

发布网友 发布时间:2022-04-06 04:22

我来回答

2个回答

热心网友 时间:2022-04-06 05:52

  一般情况下,都能实现显示phpinfo()的页面。就从能够显示该页面之后出现的问题说起。   php的问题都会显示在phpinfo()页面上。   首先查看自己的php.ini的路径是否正确。   Q:我已经配置了php.ini文件,但重新启动服务器后为什么没有任何效果?   A:这个问题主要有这几种情况。   第一个原因是由于系统所读取的php.ini文件与你当时修改的php.ini文件不一致造成的   1、 可以通过phpinfo()的Configuration File (php.ini) Path选项查看当前PHP服务器读取的是哪一个php.ini   2、 如果你要更改php.ini的文件存取位置,可参考php.ini的搜索顺序,如下所示:   a) SAPI 模块所指定的位置(Apache 2 中的 PHPIniDir 指令,CGI 和 CLI 中的 -c 命令行选项,NSAPI 中的 php_ini 参数,THTTPD 中的 PHP_INI_PATH 环境变量)   b) HKEY_LOCAL_MACHINESOFTWAREPHPIniFilePath(Windows 注册表位置)   c) PHPRC 环境变量   d) 当前工作目录(对于 CLI)   e) web 服务器目录(对于 SAPI 模块)或 PHP 所在目录(Windows 下其它情况)   f) Windows 目录(C:windows 或 C:winnt),或 --with-config-file-path 编译时选项指定的位置   3、 一般做法:通过设置PHPRC 环境变量,   a) 操作:右击我的电脑->属性->高级->环境变量   b) 在系统变量下新建一个“变量名为PHPRC ,变量值为你的php.ini文件所地文件路径”的环境变量   第二个原因是:PHP没有找到相应的扩展库   1、 查看PHP找到的扩展库位置:在phpinfo()的extension_dir选项可以看到   2、 在php.ini更改extension_dir文件   第三个原因:没有完全重启IIS   1、 对php.ini的修改必须完全重启IIS才能起作用,而不能只是对当前站点进行重启。   2、 进入cmd,停止服务器:net stop iisadmin;启动服务器:net start w3svc   Q:我的PHP怎么没有办法激活MySql扩展库   A:在PHP5.0以上版本,MySQL 默认未启用,因此需要咱们进行手工激活。   1、 在PHP运行MySql,必须在 php.ini 中激活 php_mysql.dll 动态连接库,另外还需要访问 MySQL 客户端连接库即libmysql.dll文件   2、 可以通过php.ini中的extension激活 php_mysql.dll 动态连接库;而libmysql.dll文件必须放在Windows 的系统路径 PATH才能访问,可以通过把libmysql.dll复制到system32目录下,也可以在PATH环境变量中新增一个路径。   3、 建议做法:通过设置PATH,方便以后的php升级,在系统环境变量中的PATH后增加“libmysql.dll”所在的文件夹即可。记得通过“;”号隔开   4、 [案例]最近,服务器总是找不到MySql扩展库,导致程序无法运行。因此,把所有文件删除后重新配置PHP服务器。但最后在安装MySql的时候,却始终无法激活MySql扩展库。   在phpinfo()中找到的信息如下:   PATH:c:php   PHPRC:C:php   extension_dir:c:phpext   另外,我测试了将其它的库激活,如msql、gd2、xml,在phpinfo()都可以正常显示   证明PHP能找到php_mysql.dll 动态连接库,而MySql的运行的另一个条件是能够讯问MySQL 客户端连接库即libmysql.dll文件,看来问题就在这里了。   我对C盘搜索libmysql.dll文件,发现在system32和php文件夹各有一个文件,做好备份后,我尝试删除system32的libmysql.dll文件,发现被锁死,无法删除,却可以重新命名,我随便修改了名称,再重新启动IIS,服务器运行正常。   补充一点:如果Configuration File (php.ini) Path 显示为C:Windows   就说明,php.ini文件没有读取到。   另外,我发现,在用IIS整合php时,有两种方式:ISAPI与CGI模式   这两种方式,我们都可以看到phpinfo页面   但是使用ISAPI模式,无法读取环境变量,所以通过环境变量PHPRC设置的php.ini路径无法找到。   使用CGI就可以,这样就不必把好多文件拷到系统文件下。

热心网友 时间:2022-04-06 07:10

一、fpm模式
1、通过服务器传递
如在nginx的配置里设置:
fastcgi_param ENV_XXX 123456;
每次页面请求nginx都会将此变量传递给php,php可以通过getenv函数或$_SERVER全局变量获得。
2、通过fpm配置传递
fpm在每次启动时都会读取php-fpm.conf文件中的环境变量设置,如:
env[ENV_XXX]="test test"
或者让fpm读取系统环境变量,如:
env[ENV_XXX]=$ENV_XXX
注意此种方式要确保系统环境变量存在,且不被sudo禁用。
如果fpm是用sudo方式启动,默认sudo会禁用一些环境变量,可以通过以下方式放开*:
vim /etc/sudoers
Defaults env_reset
Defaults env_keep = "ENV_XXX"
或者干脆放开所有*:
Defaults !env_reset
最后,如果修改了php-fpm.conf中的设置需要重启fpm才能生效,同样php可以通过getenv函数或$_SERVER全局变量获得环境变量。
二、命令行模式
命令行模式*较少,可以通过getenv函数或$_SERVER全局变量获取对当前执行用户有效的系统环境变量,同样要注意sudo的*。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com