是的,在即将发布的PHP 5.4中有一个内置的Web服务器,您可以在他们的候选版本中试用(我最近也发现了这个!)
http://php.net/manual/en/features.commandline.webserver.php
我需要帮助搞清楚的是,有没有办法让它在localhost以外的域名上运行(它在localhost,端口80上运行正常)?甚至127.0.0.1都不起作用.我在我的hosts文件中放入了虚拟主机名,指向127.0.0.1并且它们也不起作用.我知道它只是一个候选版本,但我想知道是否有其他人已经提出了解决此问题的解决方案,以便我可以使用指向我的hosts文件中127.0.0.1的实际域名来测试我的应用程序.操作系统是Windows 7 Professional SP1.
我已经尝试过的事情:1.谷歌搜索(duh)2.通过php.ini查看选项3.尝试127.0.0.1,我的局域网IP,我的WAN IP转发端口80并修复NAT环回问题(路由器运行DD -WRT)
我有一台带有 apache2 和 php7 的计算机,我将php.ini其设置为使用 xdebug 并且可以,我可以使用编辑器进行调试。
但是我想在另一台只有php的计算机上调试。
我使用以下方法启动服务器: php -S localhost:8080
我尝试使用相同的php.ini,但似乎 php 内置的网络服务器无法理解php.ini
我使用了命令: php -S localhost:8080 -c <<path to my php.ini>>
这里是 apache 服务器的 phpinfo 输出:
这里是内置网络服务器的输出:
我正在开发一个涉及PHP内置Web服务器的测试项目,我正在测试一些想法.
我想为常用资源(png,jpg,json,txt等)实现我自己的缓存机制,以减少php中内置服务器的负载.
我像这样启动内置服务器:
php -S 127.0.0.1:80 -t public router.php
因此,内置服务器的文档根目录设置为public并运行router.php(因为我正在考虑实现一个简单的重写功能).
这是我的router.php文件的内容:
<?php
// Register request uri
$requestUri = isset($_SERVER['REQUEST_URI'])
? $_SERVER['REQUEST_URI']
: '/';
// Handle app resources with caching
if (preg_match('/\.(?:png|jpg|jpeg|gif|xml|json|css|eot|svg|otf|ttf|woff|woff2|scss|less|txt|ico)$/', $requestUri))
{
// Generate file name
$fileName = __DIR__ .'/public'. $requestUri;
// Parse file data
$lastModified = filemtime($fileName);
$etagFile = md5_file($fileName);
$ifModifiedSince = (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
$etagHeader = (isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);
// Set caching header
header('Last-Modified: '. gmdate('D, d …Run Code Online (Sandbox Code Playgroud) 我经常使用Apache作为我的php应用程序的Web服务器.但我发现php 5.4带有一个内置的Web服务器.
在我尝试加载php -S的第一个应用程序中,我注意到重写规则未启用或无法正常工作.
有人知道内置服务器是否有这样的东西?
我正在使用 PHP 内置服务器,如下所示:
$ composer serve
> php -S localhost:8000 -t public/
Run Code Online (Sandbox Code Playgroud)
但超时了..?
[Symfony\Component\Process\Exception\ProcessTimedOutException]
The process "php -S localhost:8080 -t public/" exceeded the timeout of 300 seconds.
Run Code Online (Sandbox Code Playgroud)
所以,我尝试再次启动它:
$ composer serve
> php -S localhost:8000 -t public/
[Thu May 26 21:31:51 2016] Failed to listen on localhost:8000 (reason: Address already in use)
Script php -S localhost:8000 -t public/ handling the serve event returned with error code 1
Run Code Online (Sandbox Code Playgroud)
为什么超时之前服务器运行的同一端口仍在使用中?我可以停止服务器内置的所有 PHP 实例吗?
如果重要的话,下面是我的composer.json 文件:
{
.
.
.
"scripts": {
"serve": "php …Run Code Online (Sandbox Code Playgroud) 我刚刚创建了一个新的Symfony 3.4应用程序。根据Symfony的文档,我可以通过运行以下命令使用PHP的内置Web服务器对应用程序进行服务器处理
php bin/console server:start
Run Code Online (Sandbox Code Playgroud)
但是,这似乎是在开发模式下运行该应用程序。哎呀,异常打印已打开,显示开发人员工具栏,等等。
有没有办法在Symfony的生产模式下使用内置的Web服务器?这不是将应用程序发布给公众(这是愚蠢的),而是因为我要测试一个问题,可能只会在生产模式下出现。
我正在尝试使用Phalcon中的Micro应用程序开发RESTful API .现在我正在使用面向PHP的Facebook SDK进行社交登录,但我发现当Facebook将我重定向到我的回调(显然内部有查询字符串)时,路由器找不到任何处理程序方法.
GET: http://localhost:8000/api/v1/register/facebook/callback?code=...&state=...#_=_
Not-Found handler is not callable or is not defined
#0 /home/adrian/PhpstormProjects/myproject/index.php(39): Phalcon\Mvc\Micro->handle()
#1 {main}
Run Code Online (Sandbox Code Playgroud)
我所有的其他路由都正常工作,但这是我第一次面对查询字符串,所以我不知道我做错了什么.
我正在使用Micro Collections进行路由和PHP 内置服务器.
这是我的.htrouter.php.当我抑制从查询字符串$_SERVER['REQUEST_URI']的路径工作正常,但因为它期待参数Facebook的SDK失败.我试图找出Phalcon是否将URL和查询字符串保存在不同的$_GET变量中,但我认为情况并非如此.
<?php
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
$_GET['_url'] = $_SERVER['REQUEST_URI'];
}
return false;
Run Code Online (Sandbox Code Playgroud)
我的 micro-collection.php
<?php
use \Phalcon\Mvc\Micro\Collection as MicroCollection;
$register = new MicroCollection();
$register->setHandler('App\Controllers\V1\RegisterController', true);
$register->setPrefix('/api/v1/register');
$register->get('/facebook', 'getAuthFacebook');
$register->get('/facebook/callback', 'facebookCallback');
return $register; …Run Code Online (Sandbox Code Playgroud) 我有一个太基本的 php 应用程序,我想通过内置 php 服务器运行它,并且它位于 Windows 计算机的虚拟机中:
\n\n<?php\nuse \\Psr\\Http\\Message\\ServerRequestInterface as Request;\nuse \\Psr\\Http\\Message\\ResponseInterface as Response;\n\nrequire \'../vendor/autoload.php\';\n\n$app = new \\Slim\\App();\n\n$app->get(\'/\', function (Request $req, Response $res, $arg = []) {\n return \'hello world!!\';\n});\n\n$app->run();\nRun Code Online (Sandbox Code Playgroud)\n\n我的项目结构
\n\ntree -I vendor\n.\n|-- cache\n| `-- 6a\n| `-- 532bg9987gt23f4356546poo999vvb234234.php\n|-- composer.json\n|-- composer.lock\n|-- public\n| `-- js\n| `-- app.js\n|-- routes\n| `-- web.php\n`-- views\n `-- templates\n `-- index.html\n\n7 directories, 7 files\nRun Code Online (Sandbox Code Playgroud)\n\n当我从虚拟机中运行curl时,它显然可以工作:
\n\nphp -S localhost:9899&\ncurl localhost:9899/routes/web.php\n\nHello world!!\nRun Code Online (Sandbox Code Playgroud)\n\n问题是当我尝试从浏览器(Windows 机器)连接到该服务器时,我得到
\n\nThis site can\xe2\x80\x99t be reached\nRun Code Online (Sandbox Code Playgroud)\n\n虽然这不适用于我的 php …
我有一个相对简单的脚本,如下所示:
<?php
$url = "localhost:2222/test.html";
echo "*** URL ***\n";
echo $url . "\n";
echo "***********\n";
echo "** whoami *\n";
echo exec('whoami');
echo "* Output **\n";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
Run Code Online (Sandbox Code Playgroud)
当我在命令行上执行它时,它可以正常工作 - 我从test.html中获得了微薄的结果.
当我通过加载内置的PHP服务器并浏览到脚本来运行此脚本时,它会挂起.没有输出到屏幕,没有写入日志.
我读到有时用户权限可能会妨碍,所以我尝试使用whoami来确保运行内置PHP服务器的用户与在命令行上执行脚本的用户相同; 他们是谁.
safe_mode关闭,disable_functions设置为空.我可以成功执行其他命令(比如whoami).
我还应该检查什么?内置的PHP服务器在满足请求时是否算作其他用户?
我正在尝试将一个简单的PHP网站部署到基于云代工厂的Swisscom Application Cloud.
我的网站在本地工作正常,由Apache提供服务.
我已经按照教程,但我不清楚某些方面.
在本教程中,检查应用程序是否正常工作的方法是在php中的内置Web服务器中运行它php -S.这对我不起作用,因为我的网站有文件html扩展名,php内置服务器无法正确解释这些扩展名.在Apache中,我可以在httpd.conf文件中配置得很好,但在这里我不知道如何配置这样的行为.
这对我来说很好,因为我仍然可以检查本地通过Apache服务的网站.问题是它看起来在云中这也是运行应用程序的方式,虽然我在文档中找不到更多信息.
我很惊讶这是应用程序在生产中的运行方式,因为php文档说明了有关内置服务器的以下内容:
"它不是一个功能齐全的网络服务器.它不应该在公共网络上使用."
Web应用程序是否在Swisscom Application Cloud中的Apache上运行?如果是,我如何获得配置httpd.conf和php.ini文件的访问权限?如果不是,我该如何配置我的应用程序所需的特殊行为?
更新:
这是一个示例php应用程序,它总结了我想要实现的目标:将它部署在云代工厂将html文件解释为php文件.
https://github.com/atineoSE/sample-php-app-cloudfoundry
按照@ daniel-mikusa的文档链接,我添加了与mime类型相关的特殊配置.bp-config/httpd/extra/httpd-mime.conf.但是,这并不像预期的那样有效.从firefox访问,我被提示下载该文件.当我通过Apache在本地提供它并在httpd.conf文件中使用相同的指令时,它工作正常.
php ×8
caching ×1
composer-php ×1
curl ×1
phalcon ×1
php-5.6 ×1
query-string ×1
routing ×1
swisscomdev ×1
symfony ×1
xdebug ×1