2014年05月10日

php pdo_mysql のインストールと設定

PHPでWebアプリケーションを構築する場合、何かしらのフレームワークを利用することが多いと思います。
モデルやデータベースの記述をしたときに、突然以下のようなエラーが出る場合は、使用するデータベースのPDOドライバーがインストールされていない、もしくは設定が不足しています。
Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in ...


そんな場合の対処方法です。以下は mysql の場合の例です。

エクステンションの確認


共有モジュールががインストールされているかどうかを確認します。
$ php -i | grep extension_dir
extension_dir => /usr/local/php-5.5.11/lib/php/extensions/no-debug-non-zts-20121212

extension_dirに指令されているディレクトリ(上記の場合は"/usr/local/php-5.5.11/lib/php/extensions/no-debug-non-zts-20121212")に目的の共有ライブラリが存在するかどうかを確認します。
今回はmysqlなので、"pdo_mysql.so"と"mysqli.so"が存在するかどうかを確認します。

pdo_mysql のインストール


存在しない場合は、以下のようにpeclコマンドでインストールします。
$ sudo pecl install pdo_mysql


pdo_mysql の設定


php.ini の内容を確認してください。以下の2行が存在しない場合、追加します。
extension=mysqli.so
extension=pdo_mysql.so

"php -i" コマンドの表示に以下のような行が含まれていれば設定は有効です。
php -i | grep mysql
...
PDO drivers => sqlite, mysql
pdo_mysql
...

FastCGI マネージャーとかを使っている場合は、サービスを起動し直してください。



ラベル:Install PDO MySQL PHP
posted by ayagu at 09:57| Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする

2014年04月30日

PHP Warning: PHP Startup: Unable to load dynamic library

PHP で拡張モジュール(ライブラリ)の指定でエラーが出た場合の対処法です。

以下、例としてPhalcon PHP framework をインストールしたときの場合を例に、説明します。
php.ini に以下の記述をしてフレームワークの設定をしたと仮定します。
extension=phalcon.so

この設定でコマンドラインのphp (php-cli) 以下のような警告が出た場合、エクステンションはロードされません。
$ php -r "print_r(get_loaded_extensions());" | egrep phalcon
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php-5.5.11/lib/php/extensions/no-debug-non-zts-20121212/phalcon.so' - /usr/local/php-5.5.11/lib/php/extensions/no-debug-non-zts-20121212/phalcon.so: cannot open shared object file: No such file or directory in Unknown on line 0


詳しくはphp -i などれ調べると分かりますが、エクテンションのダイナミック・ライブラリ(.so)のファイルが、設定上のディレクトリ(上記の場合:/usr/local/php-5.5.11/lib/php/extensions/no-debug-non-zts-20121212)に存在しないという事です。

この場合、対処法としてPHPの設定まで含めるといくつかあるのですが、以下の2つが最初の処方箋となるでしょう。

  • 警告で指定されているディレクトリにダイナミック・ライブラリ(.so)をコピーする

  • php.iniでダイナミック・ライブラリをフルパスで指定する


Phalcon framework のインストール時のログを確認すると、soは以下の場所にありました。
/usr/lib64/php/5.5/modules/phalcon.so

前者は、このファイルを「/usr/local/php-5.5.11/lib/php/extensions/no-debug-non-zts-20121212」にコピーする方法。
後者は、phalcon.soのフルパス(/usr/lib64/php/5.5/modules/phalcon.so)をphp.iniの「extension=」に記述するやり方です。

いずれもPHPの環境に依存しますので、phpinfo 等で確認して設定してみてください。


ラベル:Extension Phalcon PHP
posted by ayagu at 10:37| Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする

2014年04月28日

AWS 時間を合わせる - タイムゾーンの設定

アマゾンのクラウド・サービス AWS(Amazon Web Service)が熱いです。
どこから始めたらいいのかと思う人は、入門として「AWSをはじめよう」を参照してみて下さい。

EC2 というクラウドの中のホスティング・サービスが中心となると思いますが、タイムゾーンの設定は、EC2インスタンスを作ったあと、始めにやっておかないといけないことの一つです。

サーバーサイドには、データベースやアクセスログなど、正確な時間が要求される要件がサービスが数多く有ります。後回しにしていると、後々、痛い目にあうかもしれません。

以下は、まっさらなインスタンスを作ったあと、リモートログインして時間表示したものです。

[ec2-user@ip-xxx-xx-xx-xx ~]$ date
2014年 4月 27日 日曜日 23:21:43 UTC


「UTC」(協定世界時 - Wikipedia) になってます。これを日本標準時間に設定し直します。

やり方は2通り、(以下はFedra/CentOSでも共通です)

  • 環境変数TZに設定する

  • /etc/localtimeを設定する



環境変数TZに設定する


TZを「Asia/Tokyo」に設定すると瞬時に変わります。
[ec2-user@ip-xxx-xx-xx-xx ~]$ date
2014年 4月 27日 日曜日 23:21:43 UTC
[ec2-user@ip-xxx-xx-xx-xx ~]$ export TZ='Asia/Tokyo'
[ec2-user@ip-xxx-xx-xx-xx ~]$ date
2014年 4月 28日 月曜日 08:32:39 JST

ただし、使用しているシェルの環境のみの設定なので、起動時にシステムレベルの有効になるように、「/etc/bashrc」の最後の行に以下の項目を加えます。
export TZ='Asia/Tokyo'

その後反映させるには、再起動するか、もしくは
[ec2-user@ip-xxx-xx-xx-xx ~]$ source /etc/bashrc

で読み込みます。

/etc/localtimeを設定する


個人的にはこちらがオススメです。
各国タイムゾーンの情報は「/usr/share/zoneinfo」ディレクトリにあります。
ここからタイムゾーン情報を選んで「/etc/localtime」にコピーします。
/etc/localtime はUTCを表示しているデフォルトのものが既に存在しますので、必要であれば、バックアップをとっておきましょう。
[ec2-user@ip-xxx-xx-xx-xx ~]$ date
2014年 4月 27日 日曜日 23:48:48 UTC
[ec2-user@ip-xxx-xx-xx-xx ~]$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime
[ec2-user@ip-xxx-xx-xx-xx ~]$ date
2014年 4月 28日 月曜日 08:50:23 JST


以下の例でもOKです。
[ec2-user@ip-xxx-xx-xx-xx ~]$ sudo cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime


ラベル:timezone cloud AWS
posted by ayagu at 08:57| Comment(0) | AWS | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。