如何从内置的PHP 5.4 webserver运行webphar PHP文件?

gre*_*emo 16 php phar php-5.4

按照标题,我创建了一个非常简单的测试工具.我想用内置的webserver(PHP 5.4)测试它,但似乎不可能.

php -S localhost:80 /path/to/myphar.php
Run Code Online (Sandbox Code Playgroud)

结果:空白页面(在phar前端控制器中index.php正在进行一些HTML输出).

php -S localhost:80 -t /path/to/folder_with_index_and_phar
Run Code Online (Sandbox Code Playgroud)

使用加载器脚本:

<?php

require 'phar://myphar.php'
Run Code Online (Sandbox Code Playgroud)

再次生成一个空白页面.

这甚至是可能的还是我必须使用Apache?

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

php -S localhost:80 -t /path/to/app.phar
php -S localhost:80 -t /path/to/app.phar
Run Code Online (Sandbox Code Playgroud)

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

而:

php -S localhost:80 -t .
http://localost/app.phar/foo/bar
Run Code Online (Sandbox Code Playgroud)

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

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

Sjo*_*jon 5

php -S localhost:80 -t /path/to/phar由于该-t参数旨在用于目录,因此无法工作.诀窍是php webserver支持将路由器作为参数传递.因此,假设你的phar在/ tmp(它可以在任何地方),这就是你如何创建一个简单的路由器,并设置网络服务器:

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


Hay*_*den 5

php -S localhost:8080 phpinfo.phar
Run Code Online (Sandbox Code Playgroud)

从我创建的一个简单的phar文件开始,这似乎对我很有用 phpinfo();

我在PHP文档中注意到,在创建PHAR文件时,您似乎需要为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'));
Run Code Online (Sandbox Code Playgroud)

编辑

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

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

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

$phar->buildFromDirectory(__DIR__ . '/phpinfo');
$phar->setStub($phar->createDefaultStub('index.php'));
Run Code Online (Sandbox Code Playgroud)

创建目录的phar文件:

phpinfo/
??? index.php
Run Code Online (Sandbox Code Playgroud)

和index.php只是:

<?php phpinfo();
Run Code Online (Sandbox Code Playgroud)


小智 2

所以,我不明白为什么你需要 Apache 服务器。命令后

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

PHP 5.5.9-1ubuntu4 Development Server started at Fri Jun  6 22:27:49 2014
Listening on http://localhost:80
Document root is /tmp/http
Press Ctrl-C to quit.
Run Code Online (Sandbox Code Playgroud)

意味着一切都很好,你到浏览器的地址栏写

http://localhost:80
Run Code Online (Sandbox Code Playgroud)

并查看脚本执行的结果