包含/要求Flysystem的文件

时间:2017-06-08 13:14:28

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

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

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

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

但是我如何从Flysystem中requireinclude获取文件?我必须获取文件内容然后eval吗?

2 个答案:

答案 0 :(得分:0)

本地存储:

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);

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

答案 1 :(得分:0)

直接来自Flysystem的includerequire文件是不可能的。解决方法是获取文件的内容并eval。请注意,您必须处理<?php ed文件中的所有前导?>和尾随eval标记。