PHP

普通のPHPサイトをGAE(php72)上で実現する方法

投稿日:2019年7月30日 更新日:

1. はじめに

Google App Engine の PHP 7.2 用ランタイム (runtime: php72) は、ウェブブラウザからのアクセスを「1つのPHPファイルで受け付ける」仕様になっています(デフォルトでは、public/index.php もしくは index.php)。PHP用のCMSやフレームワークなどは、この仕様にマッチしているのであまり困ることはないかもしれません。

しかし、フレームワークなどを使わない普通のPHPサイトは、以下のような感じになっているはずです。

  • URL: https://example.com/foo//foo/index.php ファイルにアクセスさせる。
  • URL: https://example.com/bar/baz//bar/baz/index.php ファイルにアクセスさせる。

こちらの場合、URL上のパスに合致した位置の PHPファイルがアクセスを受け付けるようになっています。

GAE でこのようなアクセスをさせたい場合にはどうすればよいのでしょうか?

本ページでは、このタイプのPHPサイトを GAE (runtime は php72) で実現する方法を紹介します。

2. 普通のPHPサイトを実現する方法

ポイントだけ説明しますが、まずは app.yaml に以下を記述します。

runtime: php72
entrypoint: serve controller.php

この記述により、ウェブブラウザからのアクセスを controller.php ファイルで一括して受け付けることになります。

controller.php ファイルには以下を記述します。

<?php
$path = @parse_url($_SERVER['REQUEST_URI'])['path'];
switch ($path) {
    case '/':
        require 'index.php';
        break;
    // e.g. /home/ → require home/index.php
    case (preg_match('@^/(.*)/?$@i', $path, $matches) ? true : false):
        require $matches[1] . '/index.php';
        break;
    default:
        http_response_code(404);
        exit('Not Found');
}

こちらでは switch 文を使い、アクセスのあったパスに見合った index.php ファイルを読み込ませています。case のところに preg_match 関数を使うのが少し変わっていますが、ちゃんと動くはずです。

必要な記述は以上です。

思ったより簡単に実現できますので、是非参考にしてみてください。

3. 参考

📂-PHP

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

PHP

Ubuntu で 複数のバージョンの PHP を使う手順

目次1. はじめに2. 前提とする環境 3. PHP 7.2 を導入する手順手順1:リポジトリを追加するツールをインストール手順2:リポジトリを追加手順3:PHP 7.2 をインストール4. PHP …

Google App Engine

SendGrid でメール送信する(Google App Engine, PHP7)

Google App Engine (runtime: php72) の環境における、SendGrid を使ったメール送信方法について説明しています。

PHP

pecl install xxxx する際は、php -v と php-config –version が一致しているか確認してから行う

pecl install xxxx する際は、php -v と php-config –version が一致しているか確認してから行うとよいという話しです。

PHP

PHPで即時実行関数を使って名前空間を汚さない

JavaScript だとよく見るやり方なのですが、「即時実行関数を使って名前空間を汚さない」やり方って、PHP の場合はあまりやらないのでしょうか? PHPで関数を宣言すると、その名前はグローバル空 …

PHP

Composer を使って PSR-4 オートロードしている場合、composer.json は必要なくなる

PHP を使った開発でよく使う Composer に関するお話しです。 例えば、composer.json に以下のように記述して開発を行ったとします。 { … “autoload”: { “ps …