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

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

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

PHP

【PHP】Composer の使い方

Composer は、PHPのパッケージ管理ツールです。利用するパッケージ(ライブラリ)間の依存関係も解決してくれます。 スポンサードリンク 目次1. Composer の特徴2. 対応している PH …

PHP

PHP: ob_start() 関数によるバッファリングの動作

PHP の ob_start() 関数によるバッファリングの動作について説明します。

PHP

画像ファイルの拡張子でないURLから 画像ファイルを返すPHPコードの例

ウェブブラウザで画像ファイルをダウンロードする場合、URL は https://example.com/foo/bar.png というように、末尾がそのファイル名になっていることが多いと思います。 こ …

PHP

PHP 7.3.0 新機能

目次はじめにFlexible Heredoc and Nowdoc SyntaxPCRE2 MigrationMultiple MBString Improvements はじめに PHP 7.3.0 …