按照标题,我创建了一个非常简单的测试工具。我想用内置的网络服务器(PHP 5.4)来测试它,但似乎不可能。
php -S localhost:80 /path/to/myphar.php
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可按预期工作。
发布于 2018-04-13 13:49:38
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
发布于 2018-04-13 14:05:49
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();
https://stackoverflow.com/questions/-100008097
复制相似问题