我正在亚马逊AWS Elastic Beanstalk机器上运行一个Laravel PHP网站,用户可以在那里上传文件。这一直很好,直到我发现当前的设置(在64位AmazonLinux上运行PHP7.2(被弃用。我的开发服务器也在运行PHP7.2。
然后,我使用一个新环境复制了我的设置,PHP 7.4运行在64位AmazonLinux 2上。突然,当我想将文件保存到S3:时,我收到了这个错误
file_get_contents(): Filename cannot be empty
使用
Storage::disk('s3')->put($filePath, file_get_contents($file));
这仍然适用于旧机器和我的开发机器。当我检查$file对象时,我发现它保存在旧的(dev(服务器上的/tmp下,但除了新的PHP 7.4服务器上的文件名之外,它是空的
IlluminateHttpUploadedFile {#1559 ▼
-test: false
-originalName: "file.csv"
-mimeType: "application/octet-stream"
-error: 1
#hashName: null
path: ""
filename: ""
basename: ""
pathname: ""
extension: ""
realPath: "/var/app/current/public"
aTime: 1970-01-01 00:00:00
mTime: 1970-01-01 00:00:00
cTime: 1970-01-01 00:00:00
inode: false
size: false
perms: 00
owner: false
group: false
type: false
writable: false
readable: false
executable: false
file: false
dir: false
link: false
}
这是与PHP相关的问题吗?或者,新的ELB机器不允许用/tmp写入文件?
和往常一样,我只有在发布到StackOverflow后才能得到最好的想法。我发现小文件确实会被处理。所以那是一个哈哈哈的时刻。我忘了我删除了一些扩展,这些扩展也改变了PHP的最大上传大小。以下是相关代码:
在PHP项目的根文件夹中,创建一个文件夹.ebextensions
并创建具有以下内容的CCD_ 2
files:
"/etc/php.d/project.ini" :
mode: "000644"
owner: root
group: root
content: |
upload_max_filesize = 128M
post_max_size = 256M
memory_limit = 512M