Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 亚马逊EC2,弹性豆茎:我的图像消失了_Php_Amazon Web Services_Amazon Ec2_Amazon Elastic Beanstalk - Fatal编程技术网

Php 亚马逊EC2,弹性豆茎:我的图像消失了

Php 亚马逊EC2,弹性豆茎:我的图像消失了,php,amazon-web-services,amazon-ec2,amazon-elastic-beanstalk,Php,Amazon Web Services,Amazon Ec2,Amazon Elastic Beanstalk,我已经使用elastic beanstalk实例在AmazonEC2中部署了我的PHP应用程序。我的应用程序的文件系统结构如下所示: MyApp |-css | |-... |-js | |-... |-uploads | |- image.png | |- file.pdf | |- ... |-index.php |-... 我的应用允许用户上传图片。它是一个简单的应用程序,用于web管理一些文件,目前仅由我的客户端使用。因此,当上传文件时,我会将它们放在up

我已经使用elastic beanstalk实例在AmazonEC2中部署了我的PHP应用程序。我的应用程序的文件系统结构如下所示:

MyApp
 |-css
 |  |-...
 |-js
 |  |-...
 |-uploads
 |  |- image.png
 |  |- file.pdf
 |  |- ...
 |-index.php
 |-...
我的应用允许用户上传图片。它是一个简单的应用程序,用于web管理一些文件,目前仅由我的客户端使用。因此,当上传文件时,我会将它们放在
uploads
文件夹下,如上所示。 问题是我的文件在此文件夹中保存的时间不长。一两天后,我
ssh
发现上传文件夹是空的。我不确定会发生什么,但我怀疑elastic beanstalk确实创建了一个新实例,并因此覆盖了
上传的
文件夹内容

我如何解决这种情况


谢谢。

部署在Elastic Beanstalk上的应用程序应该是无状态的。也就是说,它们不应该在EC2实例上存储状态,例如文件或内存中的http会话

AWS Elastic Beanstalk根据应用程序的工作负载,在后台使用自动缩放功能从池中添加或删除实例

当您更改AWS Elastic Beanstalk配置时,它还可能用新实例替换实例

最佳实践是将应用程序状态存储在一个共享存储中,该存储可供所有实例使用

AmazonS3是一个很好的选择,您只需要稍微修改您的应用程序,让用户浏览器安全地将文件上传到S3

请查看此问题的答案以了解更多详细信息


您还可以通过在浏览器中直接使用AmazonJavaScript的SDK,在不使用表单的情况下实现客户端上载

非常感谢你的洞察力。文件的访问方式会发生什么变化?当前用户必须通过访问。如何将S3文件链接到同一URL以供访问?@MyApplynx您可以为该URL创建一个php控制器,将其转发到S3位置。您的控制器可以使用指向S3的链接而不是指向应用程序的链接构建网页。控制器可以使用S3签名URL来确保只有有效用户才能访问S3