我正在尝试递归地列出存储桶中的每个文件。文件不多,但我想列出它们来测试一些东西。这段代码可以在普通的文件系统上工作,但在谷歌云存储上不起作用。
有人有什么建议吗?
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>");
就我个人而言,我建议不要在谷歌云存储之上使用文件系统模拟抽象层来执行诸如列出存储桶中的所有内容之类的任务,而是只接触底层功能。
特别是,请参见https://cloud.google.com/storage/docs/json_api/v1/json-api-php-samples对于有关身份验证等的所有内容,一旦处理好了,只关注示例中的一行:
$objects = $storageService->objects->listObjects(DEFAULT_BUCKET);
这就是您列出存储桶中所有对象所需要的全部内容(这与"目录中的文件"和存储桶和对象之上的"文件系统模拟"不是一回事,我认为这只是我的个人观点,尽管它们的意图很好,但最终会造成伤害而不是帮助:-)。
现在,如果对象的名称包含例如斜杠,并且您希望将其视为象征性地表示某事或其他事物,请继续进行,但至少这样您就可以确信您得到了所有实际存在于bucket中的对象,并且,除了这些之外,什么都没有!-)
现在glob正在工作,您可以尝试这样的
function lstree($dir) {
foreach (glob($dir . '/*') as $path) {
if (is_dir($path)) {
echo $path;
lstree($path);
} else {
echo $path;
}
}
lstree('gs://{bucket}/');