如何从内置的PHP 5.4 Web服务器运行webphar PHP文件?

2022-08-31 01:10:11

根据标题,我创建了一个非常简单的测试phar。我想用内置的Web服务器(PHP 5.4)测试它,但这似乎是不可能的。

php -S localhost:80 /path/to/myphar.php

结果:空白页(在 phar 前端控制器中是索引.php执行一些 HTML 输出)。

php -S localhost:80 -t /path/to/folder_with_index_and_phar

使用加载程序脚本:

<?php

require 'phar://myphar.php'

再次导致空白页。

这有可能吗,或者我必须使用Apache?

编辑:一年后,我再次需要这个。以下是正在发生的事情(来自答案):

php -S localhost:80 -t /path/to/app.phar
php -S localhost:80 -t /path/to/app.phar

导致错误:/path/to/app.phar 不是目录。

而:

php -S localhost:80 -t .
http://localost/app.phar/foo/bar

工作,但我不需要app.phar“前缀”!

使用 Apache 并将目录索引设置为 app.phar 按预期工作。


答案 1

php -S localhost:80 -t /path/to/phar不起作用,因为该参数旨在用于目录。诀窍是php Web服务器支持将路由器作为参数传递。因此,假设您的 phar 位于 /tmp 中(它可以在任何地方),这就是您创建简单路由器并设置 Web 服务器的方式:-t

echo '<?php require("/path/to/phar");'>/tmp/router.php
php -S localhost:80 /tmp/router.php

答案 2
php -S localhost:8080 phpinfo.phar

这似乎对我有用,从我创建的简单phar文件到放出来phpinfo();

在创建PHAR文件时,我确实注意到PHP文档中,您似乎需要为CLI和WWW接口设置存根。

http://php.net/manual/en/phar.buildfromdirectory.php

<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
// add all files in the project
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));

编辑

具体来说,这就是我所做的。

#!/usr/bin/env php
<?php

$phar = new Phar('phpinfo.phar', 0, 'phpinfo.phar');

$phar->buildFromDirectory(__DIR__ . '/phpinfo');
$phar->setStub($phar->createDefaultStub('index.php'));

创建目录的 phar 文件:

phpinfo/
└── index.php

和索引.php只是:

<?php phpinfo();

推荐