SuprSonicJetBoy's blog

いろいろです。

CakePHP3をさくらのレンサバにインストールする

さくらのレンタルサーバーで、今まではCakePHP2を問題なく使えていたのですが、CakePHP3になってからは使うことができなくなってしまいました。

CakePHP3からintlモジュールが必要となり、これがさくらのレンサバには入っておらず、CakePHP3を使うことができなくなりました。
(ゴニョればintlをインストールできるようですが…)

CakePHPの2系を使えばいいのですが、そろそろ3系も触っておきたいなと思い、試しにインストールできるかやってみました。

* この記事は、こちらの内容を踏襲していますので、先に一読頂くといいと思います。
CakePHP3 を intl 拡張モジュールなしでインストールする - Qiita

目次

インストールまでの流れ

CakePHP3からは、composer でのインストールが推奨されているので、まずは composer のインストールから始めます。
次に、composer を使って、CakePHP3 のインストール。
CakePHPプラグイン intlless を使用して、intl が無くても CakePHP3 が動くようにする。

と、こんな感じです。

composer をインストー

さくらのレンサバ(スタンダード)でもSSH接続できますので、接続してから composer をインストールします。

$ ssh -p 22 USER@USER.sakura.ne.jp
Welcome to FreeBSD!

% pwd
/home/USER

% echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/home/USER/bin

% mkdir bin

% curl -sS https://getcomposer.org/installer | php -- --install-dir=bin --filename=composer
All settings correct for using Composer
Downloading...

Composer (version 1.4.2) successfully installed to: /home/USER/bin/composer
Use it: php bin/composer

% composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.4.2 2017-05-17 08:17:52

無事、composerはインストールできました。

composer の設定

composerを使ってインストールするのですが、intlがないのでインストールでこけます。
なので、composerにあたかもintlが入っているかのように設定を行います。

% composer config --global platform.ext-intl 0.0.0

この platform というのは、PHP拡張機能のバージョンを偽装することができます。

CakePHP3をインストー

実際にインストールしてみます。

% composer create-project --prefer-dist cakephp/app test/app
Installing cakephp/app (3.4.2)
  - Installing cakephp/app (3.4.2): Loading from cache
Created project in test/app
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 35 installs, 0 updates, 0 removals
  - Installing cakephp/plugin-installer (1.0.0): Downloading (100%)
  - Installing psr/http-message (1.0.1): Downloading (100%)
  - Installing zendframework/zend-diactoros (1.4.0): Downloading (100%)
  - Installing aura/intl (3.0.0): Downloading (100%)
  - Installing mobiledetect/mobiledetectlib (2.8.25): Downloading (100%)
  - Installing psr/log (1.0.2): Downloading (100%)
  - Installing cakephp/chronos (1.1.2): Downloading (100%)
  - Installing cakephp/cakephp (3.4.7): Downloading (100%)
  - Installing symfony/yaml (v3.3.0): Downloading (100%)
  - Installing symfony/debug (v3.3.0): Downloading (100%)
  - Installing symfony/polyfill-mbstring (v1.3.0): Downloading (100%)
  - Installing symfony/console (v3.3.0): Downloading (100%)
  - Installing symfony/filesystem (v3.3.0): Downloading (100%)
  - Installing symfony/config (v3.3.0): Downloading (100%)
  - Installing robmorgan/phinx (v0.6.5): Downloading (100%)
  - Installing cakephp/migrations (1.6.7): Downloading (100%)
  - Installing jakub-onderka/php-console-color (0.1): Downloading (100%)
  - Installing jakub-onderka/php-console-highlighter (v0.3.2): Downloading (100%)
  - Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%)
  - Installing nikic/php-parser (v3.0.5): Downloading (100%)
  - Installing symfony/var-dumper (v3.3.0): Downloading (100%)
  - Installing psy/psysh (v0.8.5): Downloading (100%)
  - Installing jdorn/sql-formatter (v1.2.17): Downloading (100%)
  - Installing symfony/process (v3.3.0): Downloading (100%)
  - Installing symfony/finder (v3.3.0): Downloading (100%)
  - Installing seld/phar-utils (1.0.1): Downloading (100%)
  - Installing seld/jsonlint (1.6.0): Downloading (100%)
  - Installing seld/cli-prompt (1.0.3): Downloading (100%)
  - Installing justinrainbow/json-schema (5.2.1): Downloading (100%)
  - Installing composer/spdx-licenses (1.1.6): Downloading (100%)
  - Installing composer/semver (1.4.2): Downloading (100%)
  - Installing composer/ca-bundle (1.0.7): Downloading (100%)
  - Installing composer/composer (1.4.2): Downloading (100%)
  - Installing cakephp/debug_kit (3.10.2): Downloading (100%)
  - Installing cakephp/bake (1.3.4): Downloading (100%)
cakephp/app suggests installing markstory/asset_compress (An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.)
cakephp/app suggests installing dereuromark/cakephp-ide-helper (After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan compatibility.)
cakephp/app suggests installing phpunit/phpunit (Allows automated tests to be run without system-wide install.)
cakephp/app suggests installing cakephp/cakephp-codesniffer (Allows to check the code against the coding standards used in CakePHP.)
cakephp/cakephp suggests installing lib-ICU (The intl PHP library, to use Text::transliterate() or Text::slug())
symfony/console suggests installing symfony/event-dispatcher ()
symfony/var-dumper suggests installing ext-symfony_debug ()
psy/psysh suggests installing ext-pcntl (Enabling the PCNTL extension makes PsySH a lot happier :))
psy/psysh suggests installing ext-readline (Enables support for arrow-key history navigation, and showing and manipulating command history.)
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
cakephp/debug_kit suggests installing ext-sqlite (DebugKit needs to store panel data in a database. SQLite is simple and easy to use.)
Writing lock file
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump
> App\Console\Installer::postInstall
Created `config/app.php` file
Set Folder Permissions ? (Default to Y) [Y,n]?
Permissions set on /home/USER/www/test/app/tmp/cache
Permissions set on /home/USER/www/test/app/tmp/cache/models
Permissions set on /home/USER/www/test/app/tmp/cache/persistent
Permissions set on /home/USER/www/test/app/tmp/cache/views
Permissions set on /home/USER/www/test/app/tmp/sessions
Permissions set on /home/USER/www/test/app/tmp/tests
Permissions set on /home/USER/www/test/app/tmp
Permissions set on /home/USER/www/test/app/logs
Updated Security.salt value in config/app.php

こんな感じで無事インストールができました。

インストールが完了したら、今後に影響がないように、intlの設定を戻します。

% composer config --global --unset platform.ext-intl

ちなみに、intlが無い場合は、このようにコケます。

% composer create-project --prefer-dist cakephp/app test/app
Installing cakephp/app (3.4.2)
  - Installing cakephp/app (3.4.2): Downloading (100%)
Created project in test/app
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - cakephp/cakephp 3.4.7 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.4.6 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.4.5 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.4.4 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.4.3 requires ext-intl * -> the requested PHP extension intl is missing from your system.

プラグイン intlless をインストー

このままアクセスすると、案の定エラーがでます。

Fatal error: You must enable the intl extension to use CakePHP. in /home/USER/www/test/app/config/bootstrap.php on line 25

なので、intlを使わなくてもCakePHP3が使えるようになる、intlless をインストールします。
github.com

composerで、intllessのインストール。

% cd test/app
% composer require --prefer-dist chinpei215/cakephp-intlless
Using version ^1.0 for chinpei215/cakephp-intlless
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing chinpei215/cakephp-intlless (1.0.1): Loading from cache
Writing lock file
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump

最後に、 config/bootstrap.php でintllessを読み込み、intl関連の記述をコメントアウトします。
詳細は、intllessのgithubページを参照してください。

完了

f:id:suprsonicjetboy:20170601172225p:plain

Your version of PHP does NOT have the intl extension loaded. と正しい警告が。
これで、intlを使わずに、無事CakePHP3を表示できました!
intlless の開発者の @chinpei215 さんには感謝しかありません。

* intlを使わないことで少なからず制限があるので、その辺りは留意しましょう。

参考