PHP GAE readdir()无法按预期工作

时间:2015-03-20 17:07:32

标签: php google-app-engine google-cloud-storage

我正在尝试递归列出我的存储桶中的每个文件。这不是太多的文件,但我想列出它们来测试一些东西。此代码适用于普通文件系统,但不适用于Google云端存储。

有人有任何建议吗?

function recurse_look($src) { 
    $dir = opendir($src); 

    while(false !== ( $file = readdir($dir)) ) { 
        if (( $file != '.' ) && ( $file != '..' )) { 
            if ( is_dir($src . '/' . $file) ) { 
                recurse_look($src . '/' . $file); 
            } 
            else { 
                echo $src . '/' . $file;
                echo "<br />";
            } 
        } 
    } 
    closedir($dir); 
} 

recurse_look("gs://<BUCKET>");

2 个答案:

答案 0 :(得分:1)

就个人而言,我建议不要在Google云端存储上使用文件系统模拟抽象层,以便列出存储桶中的所有内容等任务,而只需触及底层功能。

特别是,请参阅https://cloud.google.com/storage/docs/json_api/v1/json-api-php-samples了解有关身份验证等的所有信息,并且,有一次,我们会关注这一点,只关注示例中的一行:

$objects = $storageService->objects->listObjects(DEFAULT_BUCKET);

这就是列出存储桶中所有对象所需要的全部内容( 与“目录中的文件”相同)和“文件系统模拟”在桶和物体之上,我提供的只是我个人的意见,最终伤害而不是帮助尽管他们出色的意图: - )。

现在,如果对象的名称包含例如斜杠,并且您想将其视为象征性地表示某事或其他内容,那么请继续前进,但至少这样你肯定你是获得所有实际存在于桶中的对象,除了那些! - )

答案 1 :(得分:0)

现在glob正在运行,你可以试试这样的东西

function lstree($dir) {
  foreach (glob($dir . '/*') as $path) {
  if (is_dir($path)) {
    echo $path;
    lstree($path);
  } else {
    echo $path;
  }
}

lstree('gs://{bucket}/');