我在两个不同的环境中运行这个PHP代码:运行PHP 5.6的本地服务器和运行PHP 7.2的EC2实例。
$filepath = 's3://'.$this->s3Bucket.'/'.$key;
$this->s3Client->registerStreamWrapper();
echo "file exists ".file_exists($filepath);
文件函数(例如,file_exists和readfile)在两种环境中似乎都不会以相同的方式工作。在本地服务器中,它们按预期工作:即,file_exists对于已知文件返回true,如预期的那样。但是在EC2实例上,file_exists返回false。
$ filepath var看起来像s3://my-bucket/a-prefix/another-prefix/LlPIpMvDdmX6i38.pdf
。使用var_dump,S3客户端和流包装器似乎都是正确的。我唯一能找到的是PHP文件函数根本无法正常工作。
我也在EC2实例中试过这一行:
filesize($filepath);
并发出此警告:filesize():stat失败,因为s3://...LlPIpMvDdmX6i38.pdf
我在EC2设置中遗漏了哪些内容阻止Streamwrapper工作?
答案 0 :(得分:0)
我终于在同事的帮助下在错误日志中发现了错误。
PHP Warning: readfile(): s3:// wrapper is disabled in the server configuration by allow_url_fopen=0
设置allow_url_fopen = 1解决了问题。