请解释如何创建PHP的Phar存根

JW.*_*JW. 18 php stub phar

我正在尝试创建一个非常简单的PHP CLI应用程序,可以从命令行作为phar文件运行:

# php myProject.phar
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所尝试的:

我的项目

我的项目位于一个名为的目录中MyProject,它包含以下两个文件:

 |-- createPhar.php
 `-- bootstrap.php
Run Code Online (Sandbox Code Playgroud)

bootstrap.php中

bootstrap.php文件包含:

<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

当我从我的Ubuntu命令行运行此脚本时:

# cd MyProject 
# php bootstrap.php
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

5.3.2-1ubuntu4.9
i am some script
Run Code Online (Sandbox Code Playgroud)

createPhar.php

createPhar.php文件旨在将项目转换为Phar存档.它看起来像这样:

<?php    
$phar = new Phar('MyProject.phar');
$phar->addFile('bootstrap.php');
$phar->setStub( $phar->createDefaultStub('bootstrap.php') );
Run Code Online (Sandbox Code Playgroud)

当我运行该脚本时......

# php createPhar.php
Run Code Online (Sandbox Code Playgroud)

... MyProject.phar在我的项目目录中创建了一个名为的新文件.

|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar
Run Code Online (Sandbox Code Playgroud)

现在这是问题所在

当我运行phar文件时......

# php MyProject.phar 
Run Code Online (Sandbox Code Playgroud)

...我希望看到与运行bootstrap.php脚本时相同的输出.

相反,我什么都看不见 完全没有输出.这意味着我的bootstrap.php脚本不会被创建的默认存根包含在内$phar->createDefaultStub('bootstrap.php')

我想我误解了Phars及其存根是如何创建的.请你解释我哪里出错了.

JW.*_*JW. 11

回答我自己的问题.

上面我的问题中概述的方法是创建phar/phar存根的一种正确方法.

为什么它没有为我工作,之所以工作马里奥(见下面的问题,他的意见),是因为我已经安装了Suhosin和调整设置必要的.

使用此处概述技术修复:

要解决,请:

suhosin.executor.include.whitelist = "PHAR"

在/etc/php5/cli/php.ini中