我试图从我的Web应用程序创建一个.phar文件.在php documentation’s example之后,我尝试了以下目的.
$srcRoot = __DIR__ . "/../app";
$buildRoot = __DIR__ . "/../build";
$p = new Phar("$buildRoot/build.phar", 0, 'build.phar');
$p->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($srcRoot)
),
$srcRoot
);
但是我收到以下错误.我对这个错误一无所知.代码有什么问题?
PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message
'Iterator RecursiveIteratorIterator returned a path "D:\site\app" that is
not in the base directory "D:\site\app"'
in D:\site\tools\create-phar.php:7
解决方法:
问题的根源是RecursiveDirectoryIterator还列出了点文件 – .和……
在/ path / to / foo上迭代时,它还列出/ path / to / foo /.和/ path / to / foo / ..进入父目录 – 在基目录之外.
因此,您必须阻止包含“..”文件,这是使用FilesystemIterator::SKIP_DOTS作为DirectoryIterator的第二个参数最容易实现的:
new RecursiveDirectoryIterator($srcRoot, FilesystemIterator::SKIP_DOTS)
标签:php,build,deployment,phar
来源: https://codeday.me/bug/20190528/1171417.html