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

时间:2011-06-13 20:47:39

标签: php stub phar

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

# php myProject.phar

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

我的项目

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

 |-- createPhar.php
 `-- bootstrap.php

bootstrap.php中

bootstrap.php文件包含:

<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;

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

# cd MyProject 
# php bootstrap.php

我得到以下输出:

5.3.2-1ubuntu4.9
i am some script

createPhar.php

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

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

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

# php createPhar.php

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

|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar

现在问题是

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

# php MyProject.phar 

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

相反,我什么也看不见。完全没有输出。这意味着我的bootstrap.php脚本未被$phar->createDefaultStub('bootstrap.php')

创建的默认存根包含在内

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

2 个答案:

答案 0 :(得分:11)

回答我自己的问题。

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

它之所以不起作用, 为Mario工作(请参阅下面的问题评论),是因为我安装了Suhosin并需要调整设置。

使用technique outlined here修正:

  

要修复,请输入:

     

suhosin.executor.include.whitelist = “药业股份”

     

/etc/php5/cli/php.ini

答案 1 :(得分:0)

你也可以这样做:

<强> bootstrap.php中;

<?php
function go() {
    print phpversion() . PHP_EOL;
    print 'i am some script' . PHP_EOL;
}

然后:

  

php -r“require   'PHAR://Myproject.phar';去();“

或者没有函数,它会执行你在那里的任何命令,但通常你会在phar中有一些函数或类文件。