【问题标题】:Google App Engine PHP 7.2 localhost not using my entrypointGoogle App Engine PHP 7.2 localhost 未使用我的入口点
【发布时间】:2019-03-27 00:21:11
【问题描述】:

我正在试验migration my php 5.5 google app engine site to a php 7.2 网站。我看到的最大区别是,我们需要定义一个入口点(例如 index.php),而不是在 app.yaml 中定义单独的 url 处理程序,并且所有 php 请求都通过它进行路由。然后 index.php 应该包含处理各种 url 路径并需要正确的 php 脚本的代码。

迁移文档说,在 localhost 上进行测试时,我们应该只使用内置的 PHP 网络服务器,而不是运行一个特殊的 GAE dev_server:

php -S localhost:8080

但是,当我这样做时,它不会向我的 index.php 发送所有请求,因此我的路由代码都没有被使用。

我需要做什么才能在 localhost 上测试我的 GAE 站点?

我在 Mac 上,并且在命令行上安装了 php 7.1。 7.1 和 7.2 的区别是不是让我头疼?

编辑:

我阅读了内置 PHP 网络服务器上的文档,看起来我需要在启动网络服务器时将路由器脚本作为参数传递:

php -S localhost:8080 index.php

但是,当我这样做时,我的所有静态资源(列在我的 app.yaml 中)都会停止服务。他们在我的路由器脚本的末尾被捕获,该脚本将任何未找到的内容发送到 404.php 脚本。

【问题讨论】:

  • 安装 MAMP,它将为您提供比 PHP 内置更强大的本地 Web 服务器。
  • Google App Engine 不会这样做,所以这会让我误以为该网站正在运行。而且我在 Mac 上,我永远不会安装 MAMP,因为 Mac 有 UNIX 基础,所以我通常只有自己的 Apache 和 MySQL 实例。

标签: php google-app-engine php-7.1 php-7.2


【解决方案1】:

我也是,我看到他们的文档说我们必须在 app.yaml 的入口点指令中指定一个 php -S 命令,但我不需要。我所要做的就是将此指令添加到我的 app.yaml:

entrypoint: serve src/www/index.php

(或者我的 index.php 所在的位置,从我的应用程序的根文件夹,包含 app.yaml 的级别)。

【讨论】:

    【解决方案2】:

    我也在从 php55 迁移到 php72。我也有同样的问题。

    在 app.yaml 中,“脚本自动”将完全匹配添加到脚本中,它也可以在本地工作。例如:脚本:index.php

    这将在本地和 GAE 中工作

    【讨论】:

    • 错误:(gcloud.app.deploy)INVALID_ARGUMENT:处理程序“/”的脚本字段必须设置为运行时 php72 的“自动”。
    • ^^ 不兼容
    【解决方案3】:

    我越来越近了,但我不得不在我的 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 根本没有被使用,这似乎是一种可怕的方法,因为我的应用程序在生产中的行为可能完全不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2021-07-31
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      相关资源
      最近更新 更多