0

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

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

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

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

4

2 回答 2

0

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

于 2017-08-01T06:31:25.893 回答
-1

本地存储:

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

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

于 2017-06-08T13:21:40.740 回答