【问题标题】:How can I download and execute a php file in a bucket using Amazon S3 SDK?如何使用 Amazon S3 SDK 下载并执行存储桶中的 php 文件?
【发布时间】:2012-12-11 08:52:24
【问题描述】:

如何在使用 S3 SDK 连接 Amazon 中的存储桶时执行 PHP 文件?

我尝试使用$s3->getBucket,得到以下数组。但是我需要这个文件的执行结果。

Array
(
    [content/content.php] => Array
        (
            [name] => content/content.php
            [time] => 1353105202
            [size] => 1223
            [hash] => 355c51389b51814d4b6c822a6ec28cfe
        )

)

有没有执行PHP文件的函数/方法?

【问题讨论】:

  • 下载它并include 吗?顺便说一句,如果没有人告诉你这是多么疯狂的想法,让我成为第一个。

标签: php amazon-web-services amazon


【解决方案1】:

您不能直接在 Amazon S3 上执行 PHP 文件。

您需要做的是下载它的内容,将内容写入文件,然后运行文件本身(通过使用 include() 或 require())。

如果文件直接输出东西,你可以将它包装在 ob_start() 和 ob_get_clean() 中以获得任何输出。

$source = $s3->getObject($bucket, $object);

$filename = tempnam('/tmp');
$file = fopen($filename, 'w');
fwrite($file, $source);
fclose($file);

ob_start();
require_once $filename;
$result = ob_get_clean();

echo $result; // the result of the executed PHP.

【讨论】:

    【解决方案2】:

    您可能会使用 s3fs 之类的东西将 S3 存储桶挂载到本地文件系统中,然后像添加任何其他文件一样包含该文件。

    【讨论】:

    • 这会非常慢。
    • @RyanParman 不一定。 s3fs 允许您将挂载的 S3 存储桶缓存到本地目录中。在这种情况下,性能与本地文件访问没有任何不同。现在,如果您的文件一直在变化并且缓存命中率相对较低,那么,是的,这可能会很慢。
    【解决方案3】:

    根据 php 上的 allow_url_fopen 和 allow_url_include ini 设置,这可以使用自定义流包装器来实现。我们在我们的一个项目中使用了这样一个东西。无权分享代码,因为它有知识产权。但它是基于http://docs.aws.amazon.com/aws-sdk-php/v2/guide/feature-s3-stream-wrapper.html

    Amazon S3 流包装器允许您使用内置 PHP 函数(如 file_get_contents、fopen、复制、重命名、取消链接、mkdir、rmdir 等)从 Amazon S3 存储和检索数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 2021-06-09
      • 2023-03-19
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多