league / flysystem - RecursiveDirectoryIterator :: __ construct(/ proc / tty / driver):无法打开dir:权限被拒绝

时间:2018-01-06 17:08:19

标签: php flysystem

是否可以避免此异常(可能是因为缺少权限而排除了PHP进程无法读取的目录?)。我无法在文档中找到它。

RecursiveDirectoryIterator::__construct(/proc/tty/driver): 
failed to open dir: Permission denied

我的代码:

$filesystem = new Filesystem(new Local('/proc', LOCK_EX, Local::SKIP_LINKS));
$filesystem->listContents('.', true);

1 个答案:

答案 0 :(得分:1)

请参阅:https://github.com/thephpleague/flysystem/issues/831其基本相同的问题。

要执行此解决方法,您需要扩展该类并覆盖方法getRecursiveDirectoryIterator,因为无法更改RecursiveIteratorIterator模式。

将默认模式更改为RecursiveIteratorIterator::CATCH_GET_CHILD,在尝试打开时不会失败。

例如:

<?php
class LocalSkipError extends Local {
    protected function getRecursiveDirectoryIterator($path, $mode = RecursiveIteratorIterator::CATCH_GET_CHILD)
    {
        return new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS),
            $mode
        );
    }
}

$filesystem = new Filesystem(new LocalSkipError('/proc', LOCK_EX, Local::SKIP_LINKS));
$filesystem->listContents('.', true);

但不推荐: