首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP下载特定文件夹中的所有文件。

问使用PHP下载特定文件夹中的所有文件。
EN

Stack Overflow用户
提问于 2014-01-24 09:59:04
回答 2查看 12.1K关注 0票数 4

有人能帮我这个忙吗??

我想下载所有的文件,从一个文件夹,是在我的桶文件夹,到我的计算机的目录,以相同的名称。

假设有一个桶名"ABC“一个文件夹在里面,是”DEF“。在哪个文件夹中有多个可用的文件。

现在我想把它下载到我的项目文件夹"/opt/lampp/htdocs/porject/files/ download /“这里"DEF”文件夹也可用。

所以,任何人都可以帮我,给我这个密码..?

提前谢谢..。

=============

错误:

致命错误:带有消息'RecursiveDirectoryIterator::_construct()递归目录迭代器的未命名的异常‘s3’。-构造:无法找到包装器"s3“--您在配置PHP时忘记启用它了吗?在/opt/lampp/htdocs/demo/amazon-s3/test.php:21堆栈跟踪:#0 /opt/lampp/htdocs/demo/amazon-s3/test.php(21):RecursiveDirectoryIterator->_construct('s3://bucketname/folder...') #1 {main}抛入/opt/lampp/htdocs/demo/amazon-s3/test.php第21行

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-24 10:08:29

使用Amazon流包装器非常简单:

代码语言:javascript
复制
include dirname(__FILE__) . '/aws.phar';
$baseDirectory = dirname(__FILE__) .'/'.$myDirectoryName;


$client = \Aws\S3\S3Client::factory(array(
    'key'    => "<my key>",
    'secret' => "<my secret>"
));

$client->registerStreamWrapper();


$bucket = 's3://mys3bucket/' . $myDirectoryName

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($bucket),
    RecursiveIteratorIterator::SELF_FIRST
);

foreach($iterator as $name => $object) {
    if ($object->getFileName() !== '.' && $object->getFileName() !== '..') {
        $relative = substr($name,strlen($bucket)+1);
        if (!file_exists($baseDirectory . '/' . $path . '/' . $relative)) {
            if ($object->isDir()) {
                mkdir($baseDirectory . '/' . $path . '/' . $relative, 0777, true);
            } else {
                file_put_contents(
                    $baseDirectory . '/' . $path . '/' . $relative,
                    file_get_contents($name)
                );
            }
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2014-01-24 17:33:11

Mark的回答是完全正确的,但是使用还有一种更简单的方法来做到这一点。下面是一个示例(假设$client是S3客户机的一个实例):

代码语言:javascript
复制
$bucket = 'YOUR_BUCKET_NAME';
$directory = 'YOUR_FOLDER_OR_KEY_PREFIX_IN_S3';
$basePath = 'YOUR_LOCAL_PATH/';

$client->downloadBucket($basePath . $directory, $bucket, $directory);

这种方法的酷之处在于,它只对本地目录中不存在(或尚未修改)的文件进行排队,并试图并行下载它们,以加快整个下载时间。该方法有第四个参数(参见链接),它包括其他选项,比如设置您希望一次进行多少次并行下载。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21329613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档