カテゴリー別アーカイブ: PHPプログラミング

さくらレンタルサーバーに Xdebug を入れると tmp 領域を食いつぶしてしまう件

さくらインターネットに Xdebug をインストールして利用するというのはあまりお勧めできません。

さくらのレンタルサーバー(スタンダードプラン)で個人が利用できる /tmp ( /var/tmp のエイリアス) の容量は 1GB に制限されているようですが、Xdebug を使ってリモートデバッグを行うと、あっという間にこの1GBのディスク容量を食いつぶしてしまうようなのです。

具体的には /tmp ディレクトリの下に、cachegrind.out.xxxxxx というようなファイルが大量に発生します。

tmp 領域を食いつぶしてしまうとどのような問題が発生するかと言うと、以下のような問題が起きます。

  • Webメールのクライアントからメールの送受信が出来ない様になる。
  • Symfonyのページに Warning: session_write_close(): write failed: Disk quota exceeded というメッセージが出る
  • WordPress のプラグインやテーマの更新が出来ない様になる

上記は私が実際に経験した不具合なのですが、その他にも様々な問題が発生することは間違いありません。

Xdebug を利用するにあたっては、cron などを使って定期的に /tmp の下をクリアするなどの処理を入れて問題を回避する方法も考えられますが、やはり Xdebug を使ったリモートデバッグは本番サイトでは行わないのが一番かと思いますね。

Share Button

さくらレンタルサーバーへの Symfony Demo インストール

Symfony フレームワークを利用するあたっての学習の一環として、Symfony の デモページを さくらのレンタルサーバーに配置してみる作業を行ってみました。

配置済みのデモページは以下のURLの通りです。
https://toshiya.org/symfony_demo/

この作業を行うにあたっての、大きな問題点は以下の2点でした。

  • さくらレンタルサーバーにはそのままの状態では Symfony は入れられない
  • 手順通りに作成したデモページが動かない

これらの問題を以下の通り解決し、無事にインストールを完了しました。

さくらレンタルサーバーへの Symfonyのインストール

PHPのバージョン確認

以下のように確認したところ、私の環境では PHP5.4 になっていました。

% php --version
PHP 5.4.45 (cli) (built: Feb 10 2016 10:17:56)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

PHP5.3以上であれば問題なく動くらしいのですが、さくらのサーバーコントロールパネルを開き、PHP5.6に更新しました。
phpversion

確認後(5.6にアップグレードされています。)

% php --version
PHP 5.6.18 (cli) (built: Feb 10 2016 10:19:55)
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

Symfonyのインストールに必要なコンポーネントのインストール

Symfonyをサーバーで動かすためには、json, ctype, pdo_mysql, pdo_sqlite が必要になるらしいのですが、チェックしたところこちらは大丈夫そうでした。

% php -i | grep json
json
json support => enabled
json version => 1.2.1
proto_binary_fetched_json => 0

% php -i | grep ctype
ctype
ctype functions => enabled

% php -i | grep pdo_mysql
API Extensions => mysqli,pdo_mysql,mysql
pdo_mysql
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

% php -i | grep sqlite
PDO drivers => mysql, sqlite
pdo_sqlite
sqlite3
sqlite3.extension_dir => no value => no value

その他に、icu と intl というライブラリが必要になることが分かりました。

ICU(International Components for Unicode)ライブラリのインストール

ICU ライブラリは C++ や java から呼び出せるネイティブコードで書かれたライブラリであり、PHPのintlコンポーネントが内部で呼び出して利用しています。
http://site.icu-project.org/

% cd ~/local/src
% curl -O http://download.icu-project.org/files/icu4c/57.1/icu4c-57_1-src.tgz
% tar zxvf icu4c-57_1-src.tgz
% cd icu/source
% ./configure --prefix=$HOME/local
% gmake
% gmake install

intlのインストール

国際化拡張モジュールintlは、PHPにICUライブラリの機能を公開します。
この拡張機能は、バージョン5.3以降のPHPに含まれており、intlバージョン3.0はPHP 5.5から利用できます。
http://pecl.php.net/package/intl

% cd ~/local/src
% curl -O http://pecl.php.net/get/intl-3.0.0.tgz
% tar zxvf intl-3.0.0.tgz
% cd intl-3.0.0
% phpize
% ./configure --prefix=$HOME/local --with-icu-dir=$HOME/local
% make
$ mkdir ~/local/lib
% mkdir ~/local/lib/php
% mkdir ~/local/lib/php/extensions
% cp ~/local/src/intl-3.0.0/modules/intl.so ~/local/lib/php/extensions 

intl を利用できるように LD_LIBRARY_PATH を追加

% vi ~/.cshrc

以下の環境変数を追加

setenv  LD_LIBRARY_PATH ~/local/lib/php/extensions

.cshrc の読込み

% source ~/.cshrc

xdebug のインストール

% curl -O https://xdebug.org/files/xdebug-2.4.0.tgz
% tar zxfv xdebug-2.4.0.tgz
% cd xdebug-2.4.0
% phpize
% ./configure
% make
% cp modules/xdebug.so ~/local/lib/php/extensions/

【注意】さくらのレンタルサーバーには、Xdebug をインストールしない方が良いです。

php.ini の編集

さくらサーバーコントロールの「PHP設定の編集」から以下の設定を追加する

※ (your_account)の部分はご自身のさくらサーバーのアカウント名です。

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Asia/Tokyo"
extension_dir = /home/(your_account)/local/lib/php/extensions
extension=intl.so

zend_extension = /home/(your_account)/local/lib/php/extensions/xdebug.so
xdebug.remote_enable=1
;xdebug.remote_host=121.2.XXX.XXX
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

動的ライブラリの読み込み確認

% php -c ~/www/php.ini -m

intl
xdebug
が表示されていれば完了

Symfony本体のインストール

% cd
% mkdir local/bin
% curl -LsS http://symfony.com/installer > symfony.phar
% mv symfony.phar ~/local/bin/symfony
% chmod a+x ~/local/bin/symfony
% symfony

最後の symfony コマンドを実行すると、正しくインストールされていれば以下のようなメッセージが表示されます。

 Symfony Installer (1.5.1)
 =========================

 This is the official installer to start new projects based on the
 Symfony full-stack framework.

 To create a new project called blog in the current directory using
 the latest stable version of Symfony, execute the following command:

   symfony new blog

 Create a project based on the Symfony Long Term Support version (LTS):

   symfony new blog lts

 Create a project based on a specific Symfony branch:

   symfony new blog 2.3

 Create a project based on a specific Symfony version:

   symfony new blog 2.5.6

 Create a demo application to learn how a Symfony application works:

   symfony demo

 Updating the Symfony Installer
 ------------------------------

 New versions of the Symfony Installer are released regularly. To update your
 installer version, execute the following command:

   symfony self-update

Symfonyデモページの作成

% cd ~/www
% symfony demo

本番サーバーで動かす際の注意

Symfony デモのソースコードはローカルのDev環境での動作しますが、Prod(本番)環境ではデータベースの接続情報が設定されていない為、そのまま Webサーバーに配置しても動作しません。
このため Dev環境のDB接続設定を Prod環境にもコピーします。

~/www/symfony_demo/app/config/config_prod.yml を編集します。

#doctrine:
#    orm:
#        metadata_cache_driver: apc
#        result_cache_driver: apc
#        query_cache_driver: apc
doctrine:
    dbal:
        # temp workaround for https://github.com/doctrine/dbal/issues/1106: define DB path here
        path: "%kernel.root_dir%/data/blog.sqlite"

修正を反映させるためにサーバー上のキャッシュの削除します

% cd ~/www/symfony_demo
% php app/console c:c --env=prod --no-debug

ブラウザでの動作確認

PCのブラウザを開き、以下のURLを入力します。(XXXX は さくらインターネットの初期ドメイン名)
http://XXXX.sakura.ne.jp/symfony_demo/web/ にアクセスします。

Share Button