我正在尝试migration my php 5.5 google app engine site to a php 7.2网站。我看到的最大区别是,我们无需定义app.yaml中的单个url处理程序,而是需要定义一个入口点(例如index.php),所有php请求都将通过该入口点进行路由。然后index.php应该包含处理各种URL路径的代码,并需要正确的php脚本。
迁移文档说,我们不必运行特殊的GAE dev_server,而应在本地主机上进行测试时使用内置的PHP网络服务器:
php -S localhost:8080
但是,当我这样做时,它没有将所有请求发送到我的index.php,因此没有使用我的路由代码。
我需要做什么才能在本地主机上测试我的GAE网站?
我在Mac上,并且在命令行上安装了php 7.1。 7.1和7.2之间的区别是让我震惊吗?
编辑:
我通读了内置PHP网络服务器上的文档,看来我在启动网络服务器时需要像这样传递路由器脚本作为参数:
php -S localhost:8080 index.php
但是,当我这样做时,所有我的静态资源(列在app.yaml中)将停止服务。它们被我的路由器脚本结尾捕获,该脚本将未找到的任何内容发送到404.php脚本。
答案 0 :(得分:1)
我还从php55迁移到php72。我也有同样的问题。
在app.yaml中,“脚本自动”将完全匹配的内容添加到脚本中,它也将在本地运行。例如:脚本:index.php
这将在本地和GAE中工作
答案 1 :(得分:0)
我越来越近了,但是我不得不在index.php路由器脚本的顶部添加一些代码,以便出于路由目的它会忽略静态文件:
if (preg_match('/\.(?:png|jpg|jpeg|gif|svg|js|css|csv)$/', $_SERVER["REQUEST_URI"])) {
return false; // serve the requested resource as-is.
}
所有这些似乎都值得怀疑,因为当我在localhost上进行开发和测试时,app.yaml
根本没有被使用,这似乎是一种可怕的方法,因为我的应用程序在生产中的行为可能完全不同。