我的PHP应用程序动态生成一些脚本文件,稍后使用require
或include
运行。
我现在正在将生产服务器迁移到Amazon Web Services,以实现扩展和负载平衡。这意味着生成的脚本文件不应再存储在本地文件系统中,而应存储在S3存储桶中。
因此我想使用Flysystem,所以我不必考虑文件是存储在本地(开发)还是存储在S3桶(生产)中。
但是我如何从Flysystem中require
或include
获取文件?我必须获取文件内容然后eval
吗?
答案 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的include
或require
文件是不可能的。解决方法是获取文件的内容并eval
。请注意,您必须处理<?php
ed文件中的所有前导?>
和尾随eval
标记。