PHP 脚本 PDO 在使用 apache 运行 时不使用密码,但在另一个脚本中 运行 时使用密码

PHP script PDO doesn't use password when run with apache, but does when run in another script

我有一个 php 脚本,在版本从 5.3 升级到 v8.0.3 之前运行良好。这是错误的线路

include '/var/www/secure/all_duh_creds.php';
$db = new PDO("mysql:host=host;port=3306;dbname=db",'root',$sched_password);

这是all_duh_creds.php

中的相关行
$sched_password = getenv('SCHED_PASSWORD');

运行 env 我明白了

SCHED_PASSWORD=password

运行 使用此 PDO 连接的 php 脚本 我没有收到错误,但是

httpd -D FOREGROUND

连接不上。当我导航到主页时,它是空白的,这在日志中

PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.17.0.11' (using password: NO) in.../db.php:3
Stack trace:

我没能找出为什么它不使用密码。我想 env 已被删除

错误是因为 apache 不会从配置文件中设置环境变量。因此,当脚本由 Apache 启动时,它不会看到该变量。您可以 SetEnv 或 PassEnv

解决办法,在你的httpd.conf添加:

PassEnv SCHED_PASSWORD

https://httpd.apache.org/docs/2.4/mod/mod_env.html