运行 PHP 本地 MacOS Jekyll 站点上的代码,端口 4000

Run PHP code on local MacOS Jekyll site, port 4000

我在我的本地主机 (MacOS Mavericks) 上建立了一个 Jekyll 网站。该网站在 http://localhost:4000/website/ 提供服务,关于 Jekyll 的一切都很好 运行。

但是,我现在想在 PHP 中添加一个联系表单,以便我接收电子邮件。我在 website/ 文件夹中放置了一个 contact.php 文件,该文件的格式为 POST。在我的远程 Web 服务器上,它运行良好。但是,在本地主机上,PHP 未被解析,纯文本显示在 contact.php 上。然而,PHP 在 localhost/contact.php.

上被完美解析

How do I get my localhost (Apache? PHP?) to process PHP files on my local Mac http://localhost:4000/ (without breaking my Jekyll website that listens on the same :4000 port)?

您不能使用同一个端口。该端口确定将处理 IP 地址请求的应用程序端点。 Jekyll 服务器(WEBrick 库)默认使用端口 4000。

处理此问题的典型方法是使用 "web service" 添加动态功能。例如,jekyll docs 建议使用 FormKeepSimpleForm.

您要的是自己设置 "web service"。为此,它需要在另一个端口或另一个 IP 地址上。 "service" 将简单地作为一个端点来接受和处理您的表单 post。在这种情况下,您可以在与 Jekyll 不同的端口上使用 Apache/PHP 设置网络服务器——例如标准端口 80——然后编写一个 PHP 脚本(例如 webform.php),在与静态表单的组合设置为响应和处理您的表单。

注意: 可以 配置 Jekyll 和 Apache 以响应端口 4000 上的请求。但是,这两个应用程序(又名服务器)不能同时为 运行。 ip:port 组合确定将 Internet 请求发送到哪个应用程序。

我知道 post 很旧,但这可能对某人有帮助...

Mike Stewart 的回答非常好,描述了实现目标需要做的事情。

为了补充这个答案,以下是我如何在 Mac.

上进行此类开发的具体细节
  • 在 Apache 中配置 CORS
  • 运行 默认端口 4000 上的 Jekyll 站点
  • 运行 默认端口 8888 上的 MAMP 堆栈
  • 代码进入 MAMP 的 htdocs 文件夹 (htdocs/your_project)
  • PHP 位于单独的 "php" 或 "your_project" 文件夹内的其他文件夹中
  • Jekyll 监视 "your_project" 文件夹并正常编译到 _site

您将遇到的 CORS 问题可以在开发过程中通过多种方式在本地解决。这是在 Apache 上启用 CORS 的一个很好的资源:http://enable-cors.org/server_apache.html

配置 CORS 后,您将能够 Ajax 调用端口 8888 上的 PHP。

我是 运行 Jekyll 服务器旁边的 PHP 内置网络服务器。我打开了第二个终端 window 并导航到 _site 文件夹。命令是 php -S localhost:8000(或者你想使用的任何端口不是 4000)。

请注意,我在浏览器中使用查看 localhost:8000,但同时拥有 Jekyll 服务器 运行 很好,因为 Jekyll 在我更改源代码时保持构建更新(刷新必填)。