【问题标题】:Include/require file from Flysystem包含/需要来自 Flysystem 的文件
【发布时间】:2017-08-01 14:31:25
【问题描述】:

我的 PHP 应用程序会动态生成一些脚本文件,这些文件稍后会使用 require 或 include 运行。

我现在正在将我的生产服务器迁移到 Amazon Web Services,以实现扩展和负载平衡。这意味着生成的脚本文件不应再存储在本地文件系统中,而应存储在 S3 存储桶中。

因此我想使用 Flysystem,因此我不必考虑文件是存储在本地(开发)还是存储在 S3 存储桶中(生产)。

但是我如何require 或include 来自 Flysystem 的文件?我必须先获取文件内容然后eval吗?

【问题讨论】:

  • flysystem 不是为了那个目的,Flysystem is a filesystem abstraction which allows you to easily swap out a local filesystem for a remote one 是为了处理txt文件等静态文件而写的

标签: php amazon-web-services amazon-s3 flysystem


【解决方案1】:

不能直接从 Flysystem 中 include 或 require 文件。一种解决方法是获取文件的内容并eval 它。请注意,您必须处理 evaled 文件中的任何前导 <?php 和尾随 ?> 标记。

【讨论】:

    【解决方案2】:

    本地存储:

    use League\Flysystem\Filesystem;
    use League\Flysystem\Adapter\Local;
    
    $adapter = new Local(__DIR__.'/path/to/root');
    $localFilesystem = new Filesystem($adapter);
    

    S3 存储:

    use Aws\S3\S3Client;
    use League\Flysystem\AwsS3v3\AwsS3Adapter;
    use League\Flysystem\Filesystem;
    
    $client = S3Client::factory([
        'credentials' => [
            'key'    => 'your-key',
            'secret' => 'your-secret',
        ],
        'region' => 'your-region',
        'version' => 'latest|version',
    ]);
    
    $adapter = new AwsS3Adapter($client, 'your-bucket-name', 'optional/path/prefix');
    $s3Filesystem = new Filesystem($adapter);
    

    然后,用一个打开你的文件,然后写入另一个:

    $contents = $localFilesystem->read('path/to/file.txt');
    $s3Filesystem->write('path/to/file.txt', $contents);
    

    您不需要要求、包含或评估任何内容!希望这会有所帮助!

    【讨论】:

    • 感谢您的回答。我确实需要require/include/eval 文件,因为它是我要运行的动态生成的 php 文件。
    • 我以为您只是想将文件从旧服务器转移到亚马逊?好吧,我想你可以 eval($content);
    • 对不起,没有。我想整个前期故事可能有点误导。
    • 随意回答文件内容必须是evaled,所以我可以接受:)
    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2011-12-15
    • 2011-11-23
    • 1970-01-01
    • 2015-03-31
    相关资源
    最近更新 更多