WordPressとPHP/Laravelの共存をCloud9で検証
共存という言葉だけだと理解しにくいですが、WordPressとLaravelを同じURLで扱うことを言います。
連携とか共存という言葉で検索されることが多いです。
実際にどのように連携するのかというと、考え方はとても簡単です。
WordPressのindex.phpとlaravelのindex.phpをそれぞれ動かしたい方に合わせてhtaccessで制御することができればいいのです。
今回も作ったらすぐに廃棄することができるCloud9を使って実際にやってみます。
まずはCloud9のPHPのバージョンを確認してみます。
Cloud9デフォルトのPHPバージョン確認
cloud9:~/workspace $ php -v PHP 5.5.9-1ubuntu4.19 (cli) (built: Jul 28 2016 19:31:33) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies with Xdebug v2.4.1, Copyright (c) 2002-2016, by Derick Rethans
LaravelはPHP5.6以上が動作条件なのでPHPのアップデートが必要です。
PHP7へのアップデートはコチラを。
soudan.hatenablog.jp
PHP/Laravelコース新設
PHPだけでは仕事はできない。もっとも職場で選ばれるPHPフレームワーク「Laravel」をパーソナルメンターが週2回のマンツーマンで対応してくれる学習プログラム。
・1回30分のビデオチャットサポート
・毎日8時間待機、テキストチャットサポート
・回数無制限の課題レビュー
詳しくはコチラ
PHP5.6アップデート
PHP5.6へのアップデートは下記の英語のサイトが役にたちました。
sudo add-apt-repository ppa:ondrej/php sudo apt-get update sudo apt-get install libapache2-mod-php5.6 sudo a2dismod php5 sudo a2enmod php5.6 sudo add-apt-repository ppa:ondrej/php5-compat sudo apt-get update sudo apt-get dist-upgrade
このコマンド通りでPHP5.6にアップデートすることができます。
ENTERとYを入力させるのが数度ありましたが、気にしませんでした。
Cloud9のコンソールでPHPのバージョンを確認します。
cloud9:~/workspace $ php -v PHP 5.6.28-2+deb.sury.org~trusty+1 (cli) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
5.6になっていますね。
PHP5.6の変更点、新機能はこちらをご覧ください。
qiita.com
WordPressをインストール
今回はworkspace直下にWordPressをそのままインストールしました。
cloud9:~/workspace $ ls -la total 304 drwxr-xr-x 12 ubuntu ubuntu 4096 Dec 9 10:29 ./ drwxr-xr-x 38 ubuntu ubuntu 4096 Dec 9 10:30 ../ drwxr-xr-x 3 ubuntu ubuntu 4096 Nov 15 02:09 .c9/ -rw-r--r-- 1 ubuntu ubuntu 235 Nov 17 09:25 .htaccess -rw-r--r-- 1 ubuntu ubuntu 929 Nov 1 05:45 README.md -rw-rw-r-- 1 ubuntu ubuntu 261 Nov 1 05:45 hello-world.php -rw-r--r-- 1 ubuntu ubuntu 418 Sep 25 2013 index.php -rw-r--r-- 1 ubuntu ubuntu 11620 Dec 8 10:28 install.txt -rw-r--r-- 1 ubuntu ubuntu 19935 Mar 5 2016 license.txt -rw-r--r-- 1 ubuntu ubuntu 69092 Nov 1 05:45 php.ini -rw-r--r-- 1 ubuntu ubuntu 10214 Nov 17 09:26 readme.html drwxr-xr-x 2 ubuntu ubuntu 4096 Nov 1 06:08 wordpress/ -rw-r--r-- 1 ubuntu ubuntu 5456 May 24 2016 wp-activate.php drwxr-xr-x 10 ubuntu ubuntu 4096 Nov 17 09:26 wp-admin/ -rw-r--r-- 1 ubuntu ubuntu 364 Dec 19 2015 wp-blog-header.php -rw-r--r-- 1 ubuntu ubuntu 1477 May 23 2016 wp-comments-post.php -rw-r--r-- 1 ubuntu ubuntu 3834 Nov 17 09:26 wp-config-sample.php -rw-r--r-- 1 ubuntu ubuntu 3058 Nov 1 06:08 wp-config.php drwxr-xr-x 9 ubuntu ubuntu 4096 Dec 9 10:27 wp-content/ -rw-r--r-- 1 ubuntu ubuntu 3286 May 24 2015 wp-cron.php drwxr-xr-x 17 ubuntu ubuntu 4096 Nov 17 09:26 wp-includes/ -rw-r--r-- 1 ubuntu ubuntu 2382 May 23 2016 wp-links-opml.php -rw-r--r-- 1 ubuntu ubuntu 3353 Apr 14 2016 wp-load.php -rw-r--r-- 1 ubuntu ubuntu 34057 Jun 14 21:51 wp-login.php -rw-r--r-- 1 ubuntu ubuntu 7786 Jul 13 12:37 wp-mail.php -rw-r--r-- 1 ubuntu ubuntu 13920 Aug 13 16:02 wp-settings.php -rw-r--r-- 1 ubuntu ubuntu 29890 May 24 2016 wp-signup.php -rw-r--r-- 1 ubuntu ubuntu 4035 Nov 30 2014 wp-trackback.php -rw-r--r-- 1 ubuntu ubuntu 3064 Jul 6 12:40 xmlrpc.php
WordPressは https://[プロジェクト名].c9users.io/ でアクセスできる状態です。
フォルダアップでもgitからのインストールでもどちらでも構いません。
Laravelをインストール
続いてLaravelのインストールです。
同じくCloud9のコンソールからコマンドを使いインストールします。
最後の「laravel」というフォルダのlaravelプロジェクトを作成します。
cloud9:~ $ composer create-project --prefer-dist laravel/laravel laravel Installing laravel/laravel (v5.3.16) - Installing laravel/laravel (v5.3.16) Downloading: 100% Created project in laravel > php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies (including require-dev) - Installing vlucas/phpdotenv (v2.4.0) Downloading: 100% - Installing symfony/polyfill-mbstring (v1.3.0) Loading from cache - Installing symfony/var-dumper (v3.1.7) Downloading: 100% - Installing symfony/translation (v3.1.7) Downloading: 100% - Installing symfony/routing (v3.1.7) Downloading: 100% - Installing symfony/process (v3.1.7) Downloading: 100% : - Installing phpdocumentor/reflection-docblock (3.1.1) Downloading: 100% - Installing phpspec/prophecy (v1.6.2) Downloading: 100% - Installing myclabs/deep-copy (1.5.5) Downloading: 100% - Installing phpunit/phpunit (5.7.2) Downloading: 100% - Installing symfony/css-selector (v3.1.7) Downloading: 100% - Installing symfony/dom-crawler (v3.1.7) Downloading: 100% symfony/var-dumper suggests installing ext-symfony_debug () : paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.) ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter) : psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.) monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB) : league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2) : sebastian/global-state suggests installing ext-uopz (*) phpunit/php-code-coverage suggests installing ext-xdebug (>=2.4.0) phpunit/phpunit suggests installing phpunit/php-invoker (~1.1) phpunit/phpunit suggests installing ext-xdebug (*) Writing lock file Generating autoload files > Illuminate\Foundation\ComposerScripts::postUpdate > php artisan optimize Generating optimized class loader The compiled class file has been removed. > php artisan key:generate Application key [base64:XXXXXXX=] set successfully.
処理結果を貼り付けると長くなりましたので一部省略しましたが、こちらもスムーズにインストールできました。
LaravelとWordPressのディレクトリ構成はいろいろ考えられますが、今回はLaravelをインターネットで見えない場所に配置(rootより上の階層)、WordPressと同じディレクトリにLaravelのpublicディレクトリ内のファイルを配置するという方法をとっています。
Cloud9 ┬ laravel ┬ app │ ├ : │ └ vendor └ workspace ┬ index.php ├ wp-config.php ├ wp-content ├ wp-admin ├ : └ wp-includes
ひとまずLaravelを動かせるようにするため、laravel/publicフォルダ内のファイルをworkspaceへ移動させます。
その時、Laravel側のindex.phpをindex_laravel.phpとしておきます。
Cloud9 ┬ laravel ┬ app │ ├ : │ └ vendor └ workspace ┬ index.php ├ index_laravel.php ← laravelのindex.php ├ css ← laravelのcssフォルダ ├ js ← laravelのjsフォルダ ├ wp-config.php ├ wp-content ├ wp-admin ├ : └ wp-includes
次に移動させたindex_laravel.phpの修正です。
autoloadとappを読み込ませるためにパスを正しいものに書き換えます。
ロリポップやエックスサーバーの場合は、フルパスでもOKです。
/* |-------------------------------------------------------------------------- | Register The Auto Loader |-------------------------------------------------------------------------- | | Composer provides a convenient, automatically generated class loader for | our application. We just need to utilize it! We'll simply require it | into the script here so that we don't have to worry about manual | loading any of our classes later on. It feels nice to relax. | */ require "../laravel/bootstrap/autoload.php"; /* |-------------------------------------------------------------------------- | Turn On The Lights |-------------------------------------------------------------------------- | | We need to illuminate PHP development, so let us turn on the lights. | This bootstraps the framework and gets it ready for use, then it | will load up this application so that we can run it and send | the responses back to the browser and delight our users. | */ $app = require_once "../laravel/bootstrap/app.php";
index_laravelへアクセスしてみてください。
https://[プロジェクト名].c9users.io/index_laravel.php
Laravelの初期画面が表示されれば問題はありません。
htaccessを使って共存させる
この状態だとindex_laravel.phpにアクセスしない限り、Laravel側のプログラムを実行することができません。
特定のパスだったらLaravel側のプログラム処理を行う(WordPressを通さない)ようにしてみましょう。
たとえばLaravel側にeventというパスで何らかの処理を作っていた場合はRewriteRuleを追加します。
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^event/(.*) /index_laravel.php [L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
これで https://[プロジェクト名].c9users.io/event/ へアクセスされた場合はWordPressを通さず、Laravelを呼び出すことが可能です。
ただしWordPressの固定ページやカテゴリ名に「event」を作ると正常に遷移できなくなるので注意してください。
htaccessは上から有効になります。
・ディレクトリ構成
・htaccessとファイルパスの設定
この2点を意識すれば、WordPressとLaravelの共存は可能です。
この記事に載せた方法とは別の方法も存在しています。