Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请解释如何创建PHP';s Phar存根_Php_Stub_Phar - Fatal编程技术网

请解释如何创建PHP';s Phar存根

请解释如何创建PHP';s Phar存根,php,stub,phar,Php,Stub,Phar,我正在尝试创建一个非常简单的PHP CLI应用程序,它可以从命令行作为文件运行: # php myProject.phar # cd MyProject # php bootstrap.php 这就是我迄今为止所尝试的: 我的项目 我的项目位于名为MyProject的目录中,其中包含以下两个文件: |-- createPhar.php `-- bootstrap.php bootstrap.php bootstrap.php文件包含以下内容: <?php print phpve

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

# php myProject.phar
# cd MyProject 
# php bootstrap.php
这就是我迄今为止所尝试的:

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

 |-- createPhar.php
 `-- bootstrap.php
bootstrap.php
bootstrap.php
文件包含以下内容:

<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
我得到以下输出:

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') );
。。。在我的项目目录中创建了一个名为
MyProject.phar
的新文件

|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar
现在问题来了 当我运行phar文件时

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

相反,我什么也看不见。根本没有输出。这意味着由
$phar->createDefaultStub('bootstrap.php')


我想我误解了Phar和他们的存根是如何产生的。请你解释一下我哪里出错了。

你也可以这样做:

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

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

回答我自己的问题

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

为什么它对我不起作用,对马里奥也起作用(见他在问题下面的评论),是因为我安装了Suhosin,需要调整设置

使用以下选项修复:

要修复,请将:

suhosin.executor.include.whitelist=“phar”

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


你的例子对我很有用。但是请尝试使用
->setDefaultStub
快捷方式(over::createDefault和::setStub)进行测试。谢谢mario。我尝试使用
->setDefaultStub
,但它仍然不起作用。奇怪的是,你让它工作,我却没有。我想问题不在于代码。我的
PHP_版本
5.3.3-1ubuntu9.5
,但其间只有一个与phar扩展相关的小安全漏洞修复。一定是别的原因。您是否使用hexeditor查看生成的文件?引导内容是否在其中的任何位置?(我得到了一个简单的php脚本,里面混合了一些二进制乱码。)是的。看了一下
MyProject.phar
,里面有引导代码和一些胡言乱语。谢谢你的建议。我怀疑我在做一些非常愚蠢的事情,所以我要好好考虑一下,明天再试一次。谢谢你的建议。我试过使用函数,但没有。运行'php-r“require”phar://Myproject.phar';"`. 真正奇怪的是,如果我一起删除phar文件,然后运行'php-r“ini_set('display_errors',1);error_reporting(E_ALL);require'phar://Myproject.phar“;”`我仍然没有得到任何输出。这是Linux并且启用了SELinux吗?还有系统错误吗?啊哈!对系统日志显示了一些东西。我通过管道将
syslog
文件的输出传输到
grep
中,以了解对php的任何提及:
cat/var/log/syslog | grep php
。看起来苏霍辛在插手:
Jun 13 21:43:41 ubuntu苏霍辛[3264]:警报-包括文件名('phar:///MyProject/MyProject.phar/bootstrap.php“)是不允许的URL(攻击者“未设置远程地址”,文件“/MyProject/MyProject.phar”,第9行)
Yep。这就是问题所在。固定使用。谢谢你的帮助。