如何在代码运行环境设置中设置“环境变量”?
Apache中设置环境变量
最近捣鼓阿里应用API的PHP的SDK,我下载他们给的示例,本地发现报错,经过咨询官方回复,是我环境变量设置的问题。
下面是官方示例截取:
$config = new Config([
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
"accessKeySecret" => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
]);
最开始 我使用了putenv方法直接在运行的脚本文件中设置(putenv与getenv在同一文件中):
putenv("ALIBABA_CLOUD_ACCESS_KEY_ID=****");
putenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET=****");
这样设置后,发现获取是可以获取到了,但是请求还是失败。
最后,发现如果是Apache服务器,是通过在项目目录下创建 .htaccess 文件,并在文件中设置:
SetEnv ALIBABA_CLOUD_ACCESS_KEY_ID "你的_access_key_id"
SetEnv ALIBABA_CLOUD_ACCESS_KEY_SECRET "你的_access_key_secret"
确保你的 Apache 配置允许使用.htaccess
文件(即AllowOverride
设置为All
)。
修改 Apache 配置文件
如果你有权限修改 Apache 的主配置文件(通常是httpd.conf
或者某个虚拟主机配置文件),可以直接在其中添加环境变量:
<VirtualHost *:80>
ServerName yourdomain.com
DocumentRoot /path/to/your/document/root
SetEnv ALIBABA_CLOUD_ACCESS_KEY_ID "你的_access_key_id"
SetEnv ALIBABA_CLOUD_ACCESS_KEY_SECRET "你的_access_key_secret"
# 其他配置...
</VirtualHost>
然后重启web服务器即可。然后,就可以在本目录中,使用getenv()获取到设置的环境变量了!
从windows中传递环境变量到web服务器
我们还可以从windows中继承设置的环境变量:
1、使用命令提示符:
打开命令提示符,运行以下命令:
setx ALIBABA_CLOUD_ACCESS_KEY_ID "你的_access_key_id"
setx ALIBABA_CLOUD_ACCESS_KEY_SECRET "你的_access_key_secret"
- 这将永久设置这些变量,适用于所有未来的命令提示符会话。
2、通过系统属性设置:
- 右键点击“此电脑”或“我的电脑”,选择“属性”。
- 点击“高级系统设置” > “环境变量”。
- 在“用户变量”下,点击“新建”来添加
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
。
验证:Windows 命令提示符:
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
如果返回正确的 Access Key ID,则配置成功。
windows中设置好后,发现php中依然无法正常获取:
如果你的 PHP 是通过某个 Web 服务器(如 Apache 或 Nginx)运行的,确保在 Web 服务器的环境中也设置了这些变量。通常情况下,Web 服务器会在启动时读取系统环境变量,因此如果你在终端中设置了变量,但没有重启 Web 服务器,可能会导致无法获取。
需要从系统环境中传递现有的环境变量到web服务器:
如果你希望从系统环境中传递现有的环境变量,可以在 Apache 配置中使用PassEnv
指令。例如在 .htaccess文件中:
PassEnv ALIBABA_CLOUD_ACCESS_KEY_ID
PassEnv ALIBABA_CLOUD_ACCESS_KEY_SECRET