【发布时间】:2011-06-13 20:47:38
【问题描述】:
我正在尝试创建一个非常简单的 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 脚本时相同的输出。
相反,我什么也没看到。根本没有输出。这意味着$phar->createDefaultStub('bootstrap.php') 创建的默认存根不包含我的bootstrap.php 脚本
我想我误解了 Phar 及其存根是如何创建的。请你解释一下我哪里出错了。
【问题讨论】:
-
你的例子对我有用。但请尝试使用
->setDefaultStub快捷方式(通过 ::createDefault 和 ::setStub)进行测试。 -
谢谢马里奥。我尝试使用
->setDefaultStub,但它仍然无法正常工作。奇怪的是你让它工作而我没有。我想问题与代码无关。 -
我的
PHP_VERSION是5.3.3-1ubuntu9.5,但只有一个与 phar 扩展相关的小安全错误修复。它一定是别的东西。您是否使用 hexeditor 查看了生成的文件?引导内容是否在其中的任何位置? (我得到了一个带有一些混合二进制乱码的普通 php 脚本。) -
是的。看看
MyProject.phar,里面有引导代码和一些乱码。感谢您的建议。我怀疑我在某个地方做了一些非常愚蠢的事情——所以我要睡着了,明天再试一次。