18

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

# php myProject.phar

这是我迄今为止尝试过的:

我的项目

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

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

引导程序.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

创建Phar.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 和他们的存根是如何被创建的。请你解释一下我哪里出错了。

4

2 回答 2

11

回答我自己的问题。

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

它对我不起作用并且对马里奥起作用的原因请参阅问题下方的评论),是因为我安装了 Suhosin 并且需要调整设置。

使用此处概述的技术修复:

要修复,请输入:

suhosin.executor.include.whitelist="phar"

在 /etc/php5/cli/php.ini

于 2011-07-12T22:55:29.697 回答
0

你也可以这样做:

引导程序.php;

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

然后:

php -r "需要'phar://Myproject.phar'; go();"

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

于 2011-06-13T21:07:13.963 回答