我目前正在使用RecursiveIteratorIterator和RecursiveDirectoryIterator查看项目文件夹中的所有文件夹和文件(它从项目根文件夹开始)。
这个工具的重点是找到所有文件差异。问题是,它适用于我的本地主机,但不适用于服务器或同事的系统。
我在PHP 7.1.0上,就像我的同事一样
我使用以下代码作为迭代器
new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $startingPoint ), RecursiveIteratorIterator::SELF_FIRST );
' $ startingPoint'是项目的根位置。
完整的代码是
$startingPoint = realpath(__DIR__ . '../../'); # project root
#uncomment for list of files *down here*
$objects = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $startingPoint ), RecursiveIteratorIterator::SELF_FIRST );
foreach( (array) $objects as $name => $object ) {
if( strpos( $object->getPathName(), '.git' ) == FALSE && strpos(
$object->getPathName(), '.idea' ) == FALSE && strpos( $object->getPathName(), 'uploads' ) == FALSE && ! ( $object->getBaseName() == '.' || $object->getBaseName() == '..' ) ) {
$fileLocation = str_replace( array( $startingPoint . '\\', '\\' ), array( '', '/' ), $object->getPathName() );
#uncomment when generating a new list of directories
// $filesShouldExist[] = [ "loc" => $fileLocation, "size" => $object->getSize() ];
}
}
它将停止创建迭代器,并且不会给出任何错误。
请注意,此代码适用于(我的)窗口,但不适用于Mac。
答案 0 :(得分:1)
__ DIR __ 该文件的目录。如果在include中使用,则返回包含文件的目录。这相当于 目录名(__ FILE__)。 此目录名称没有尾部斜杠 除非它是根目录。
因此,在路径中添加斜杠:
$startingPoint = realpath(__DIR__ . '/../../'); # note the added slash at the start of the string literal
并查看是否能解决您的问题。