打包PHP应用程序

PHP*_*Pst 4 php deployment build phar

我试图从我的Web应用程序创建一个.phar文件.在php文档的示例之后,我尝试了以下目的.

<?php
$srcRoot = __DIR__ . "/../app";
$buildRoot = __DIR__ . "/../build";
$p = new Phar("$buildRoot/build.phar", 0, 'build.phar');
$p->buildFromIterator(
    new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($srcRoot)
    ),
    $srcRoot
);
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误.我对这个错误一无所知.代码有什么问题?

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
Run Code Online (Sandbox Code Playgroud)

cwe*_*ske 5

问题的根源是RecursiveDirectoryIterator还列出了点文件 - ....迭代时/path/to/foo它也会列出/path/to/foo/./path/to/foo/..进入父目录 - 在基目录之外.

因此,您必须阻止包含".."文件,这是使用FilesystemIterator::SKIP_DOTSDirectoryIterator的第二个参数最容易实现的:

new RecursiveDirectoryIterator($srcRoot, FilesystemIterator::SKIP_DOTS)
Run Code Online (Sandbox Code Playgroud)