谷歌云应用部署生产环境遇cPanel禁用putenv()无法下载云存储文件
问题原因
cPanel主机出于安全限制,默认在PHP配置的disable_functions列表中禁用了putenv()函数,你代码中通过putenv()设置谷歌云凭证环境变量的操作无法执行,因此触发报错。
解决方案
无需依赖环境变量传递凭证,直接在实例化谷歌云StorageClient时指定密钥文件路径即可,修改后的代码如下:
session_start(); require "../vendor/autoload.php"; // Imports the Cloud Storage client library. use Google\Cloud\Storage\StorageClient; function download_object($file) { // 实例化时直接传入密钥文件路径,无需通过putenv设置环境变量 $storage = new StorageClient([ 'keyFilePath' => '../92085350b1a.json' ]); $storage->registerStreamWrapper(); $name = "../files/".time().".epub"; if(file_put_contents($name,file_get_contents("url/".$file.".epub"))){ $_SESSION['book']=explode("/",$name)[2]; echo 'read'; }else{ echo "book not found"; } } $el = explode("/",$_POST['url']); $name = explode(".",$el[1]); download_object($name[0]);
补充注意事项
- 确保密钥文件
92085350b1a.json的路径填写正确,PHP运行用户拥有该文件的读权限 - 建议将密钥文件存放在站点web根目录之外,避免被外部直接访问泄露凭证
- 若你使用的是独立服务器/有php.ini修改权限,也可以将
putenv从disable_functions列表中移除后重启PHP服务,但该方案会降低主机安全性,不推荐使用
内容的提问来源于stack exchange,提问作者Nahashon Muriithi
相关产品推荐
相关产品推荐

