我正在尝试让此存储库在OSX 10.11.1(Capitan)上本地运行
https://github.com/heroku/php-getting-started.git
使用以下命令
var url="index.php"+"?command="+cmd;
xhr.open("GET",url,true);
但我只到目前为止
$ sudo heroku local web
任何可能导致许可的想法都会在设置时被拒绝错误:80即使我sudo?或者为什么heroku本地尝试使用80端口?
当部署到heroku时,一切运行正常。
以下是完整的教程: https://devcenter.heroku.com/articles/getting-started-with-php
修改
当我尝试使用
手动设置端口时[OKAY] Loaded ENV .env File as KEY=VALUE Format
[OKAY] Trimming display Output to 151 Columns
17:30:30 web.1 | DOCUMENT_ROOT changed to 'web/'
17:30:30 web.1 | 4 processes at 128MB memory limit.
17:30:30 web.1 | Starting php-fpm...
17:30:32 web.1 | Starting httpd...
17:30:32 web.1 | Application ready for connections on port 8080.
17:30:32 web.1 | (13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
17:30:32 web.1 | (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
17:30:32 web.1 | no listening sockets available, shutting down
17:30:32 web.1 | AH00015: Unable to open logs
17:30:32 web.1 | Process exited unexpectedly: httpd
17:30:32 web.1 | Going down, terminating child processes...
[DONE] Killing all processes with signal null
17:30:32 web.1 Exited Abnormally
它只是将默认的8080更改为5000 ...
$ heroku local web -p 5000
答案 0 :(得分:7)
因为“heroku local”依赖于可预测的环境,所以PHP应用程序不支持它。与Ruby,Python,Node,Java等不同,侦听流量的Web服务器是用这些相应的语言编写的,PHP应用程序与Apache或Nginx一起启动PHP-FPM(已经排除了例如Windows)。
在开始时动态注入一个配置,所以你需要一个非常标准的PHP和Nginx(Debian等不会工作,例如,因为它甚至没有工作“nginx”或“httpd”二进制文件可以开始)。只有Nginx 1.8兼容; Apache需要启用一些模块(主要是mod_proxy_fcgi),不能绑定到本地端口。
这意味着Heroku必须提供大量不同的客户特定本地设置,因此最好的答案是“只需为您的应用设置vhost,就像您一直使用的那样,并使用例如{ {3}}为你的env vars“。也就是说,不幸的是,目前在PHP中设置Web服务器的状态。
在您的特定情况下,Apache正在启动,然后它加载其/etc/apache2/httpd.conf
配置,它绑定到端口80.这不是heroku-php-apache2
启动脚本可以阻止的,因为它会有发送与您的特定环境匹配的配置,这是不可能的,因为它无法知道本地系统配置的所有方面,例如要加载哪些模块,或者它们甚至在哪里?它们驻留在/usr/libexec/apache2/
,/usr/local/apache2/modules/
或其他地方? (Apache支持多种目录布局)。
<强>解决方案强>
你仍然可以尝试让这个工作;实际上它在Mac OS上相当容易。我总是使用来自https://packagist.org/packages/josegonzalez/dotenv(brew install homebrew/apache/httpd24 --with-mpm-event
)的Apache。在全局配置中(在/usr/local/etc/apache2/
中),启用mod_proxy
和mod_proxy_fcgi
,并注释掉Listen
指令。