根据标题,我创建了一个非常简单的测试工具。我想用内置的网络服务器(PHP 5.4)测试它,但似乎不可能。
php -S localhost:80 /path/to/myphar.php
结果:空白页面(在phar前端控制器中 index.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 &#34;前缀&#34;!
使用Apache并将目录索引设置为app.phar按预期工作。
答案 0 :(得分: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
答案 1 :(得分:5)
php -S localhost:8080 phpinfo.phar
从我创建的简单的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'));
修改强>
具体来说,这就是我所做的。
#!/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
和index.php只是:
<?php phpinfo();
答案 2 :(得分:3)
经过几个小时的内置Web服务器,终于找到了您正在寻找的解决方案。关键是Web服务器的路由器文件。请遵循以下程序
1)为内置Web服务器创建一个router.php文件,其中包含以下内容
$path = $_SERVER["REQUEST_URI"];
if($pathPosition = strpos($path,'/myapp') !== false){
//Request has been made to Phar-ed application
$pathPosition += strlen('/myapp');
$file = substr($path, $pathPosition);
//Here include the base path of your Phar-ed application with file path
//I placed myphar.phar and router.php in the root directory for this example
require_once("phar://myphar.phar/$file");
exit;
}
return FALSE;
这是做什么的:它检查Uri的应用程序名称,在我的情况下&#34; / myapp&#34;然后解压缩您要访问的文件路径。然后将所需的phared文件包含到当前脚本中并退出。否则正常处理请求。
2)按如下方式启动内置Web服务器:
php -S localhost:80 -t . router.php
这是做什么的:启动内置的web服务器,将当前目录作为文档根文件夹,并使用router.php作为路由器文件(放在同一个文件夹中)
3)在浏览器中发出如下请求:
http://localhost/myapp/foo/bar
您将从应用程序.phar文件中获取Phar-ed文件
如有疑问,请告诉我。
注意:您还可以使用正则表达式匹配router.php中的Uri模式
答案 3 :(得分: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.
意味着一切顺利,你去浏览器的地址栏写
http://localhost:80
并查看脚本执行的结果
答案 4 :(得分:2)
如果您愿意更灵活一点,那么您可以通过创建index.php
文件然后包含.phar
可能的according to the documentation来表达以下内容:< / p>
使用Phar存档库与使用任何其他PHP库完全相同:
因此,你可以正常包含它:
<?php require_once "app.phar";
运行php -S localhost:80
后,将执行index.php,您只需通过http://localhost
访问它。
答案 5 :(得分:1)
如果您正在使用xampp服务,则在Windows上,您可以在命令行中使用此命令。
C:\xampp\php>"C:\xampp\php\php.exe" "C:\xampp\php\pharcommand.phar"
答案 6 :(得分:0)
如何在与该app.phar相同的目录中创建index.php文件。它的内容应该是:
<?php
require "myapp.phar";
?>
然后通过使用命令php -S localhost:80 /path/to/pharapp/index.php
答案 7 :(得分:-1)
您可以使用内置的Web服务器运行webphar,方法是将phar重命名为.php
扩展名(例如mv app.phar app.php
),指向该目录:
php -S localhost:80 -t /path/to/phar
并以http://localhost/app.php/someroute.php
的身份访问它。棘手的部分通常是setting up the stub,munging the environment和generating the phar。