Как запустить PHP файл webphar со встроенного веб-сервера PHP 5.4?
В соответствии с заголовком я создал очень простой тестовый phar. Я бы хотел протестировать его со встроенным веб-сервером (PHP 5.4), но это кажется невозможным.
php -S localhost:80 /path/to/myphar.php
Результат: пустая страница (в контроллере phar front index.php
выполняется некоторый вывод HTML).
php -S localhost:80 -t /path/to/folder_with_index_and_phar
С загрузчиком script:
<?php
require 'phar://myphar.php'
Результат снова на пустой странице.
Возможно ли это, или я должен использовать Apache?
EDIT: через год мне это нужно снова. Вот что происходит (из ответов):
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
не будет работать, поскольку аргумент -t
предназначен для использования в каталогах. Фокус в том, что веб-сервер php поддерживает передачу маршрутизатора в качестве аргумента. Поэтому предположим, что ваш phar находится в /tmp (он может быть где угодно), вот как вы создаете простой маршрутизатор и настраиваете веб-сервер:
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();
В документах 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();
Ответ 3
После нескольких часов общения со встроенным веб-сервером, наконец, нашли решение того, что вы ищете. Ключ - это файл маршрутизатора для веб-сервера. Следуйте процедуре ниже.
1) Создайте файл 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 для вашего имени приложения, в моем случае "/myapp", а затем извлекает путь к файлу, к которому вы хотите получить доступ. Затем включает желаемый файл с файлами в текущий script и завершает работу. Else обрабатывает запрос как обычно.
2) Запустите встроенный веб-сервер следующим образом:
php -S localhost:80 -t . router.php
Что это делает: запускает встроенный веб-сервер, создавая текущий каталог в качестве корневой папки документа и использует router.php в качестве файла маршрутизатора (помещается в одну папку)
3) Сделайте запрос в браузере следующим образом:
http://localhost/myapp/foo/bar
Вы получите файл Phar-ed из вашего приложения .phar file
Сообщите мне в случае вопросов.
Примечание. Вы также можете использовать регулярное выражение для соответствия шаблону Uri в файле router.php
Ответ 4
Итак, я не понимаю, зачем нужен сервер 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
и увидеть результат выполнения script
Ответ 5
Если вы готовы быть более гибким, вы можете сделать то, что хотите, создав файл index.php
, а затем включив .phar
, который возможен в соответствии с документацией, которая гласит, что:
Использование библиотеки архивов Phar идентично использованию любой другой библиотеки PHP:
Поэтому вы можете просто включить его как обычно:
<?php require_once "app.phar";
После запуска php -S localhost:80
будет запущен index.php, и вы можете просто получить к нему доступ через http://localhost
.
Ответ 6
В окнах, если вы используете службу xampp, вы можете использовать эту команду в командной строке.
C:\xampp\php>"C:\xampp\php\php.exe" "C:\xampp\php\pharcommand.phar"
Ответ 7
Как создать файл index.php в том же каталоге, что и app.phar. его содержимое должно быть:
<?php
require "myapp.phar";
?>
Затем зайдите в него, выполнив этот файл index.php с помощью команды php -S localhost:80 /path/to/pharapp/index.php
Ответ 8
Вы можете запустить webphar со встроенным веб-сервером, переименовав phar, чтобы иметь расширение .php
(например, mv app.phar app.php
), указывая на этот каталог:
php -S localhost:80 -t /path/to/phar
и доступ к нему как http://localhost/app.php/someroute.php
. Обычно сложная часть настройка заглушки, перемещение среды, и генерирует phar.