My Photo

« May 2015 | Main | August 2015 »

June 19, 2015

PHPメモ051:includeとrequireの使い分け

関連記事:
PHPメモ008:include,require

今更PHPの初歩の初歩みたいな話だが、include, include_once と require, require_once ってどう使い分けるのかがわからない。 どちらもファイルを読み込んで評価する命令だ。違いはわかっている。

  • include はファイルの読み込みに失敗すると warning を発行し、処理は続行する。
  • require はファイルの読み込みに失敗すると fatal error を発行し、処理は停止する。

で、具体的にどういうときに include でどういうときに require なのか?というか inclulde の使いどころが?だ。
必要なファイルが何らかの理由(ファイルがない、ファイルを読む権限がない、etc...)で読み込めませんでした、でも処理は続行というケースがあるだろうか。ファイルを読めなかったらもうその先を実行しても意味がない場合がほとんどのような気がする。
で、ググって調べて、なんとなくわかってきた。以下のような使い分けで良さそうだ。

  • include はビューを読み込むのに使う。
  • require はロジックを読み込むのに使う。

ファイルの読み込みに失敗しても処理を続行しても構わないというのは、例えばページをヘッダ、コンテンツ、フッタに分割して、それぞれファイルを読み込んで表示する場合。
ヘッダの読み込みを失敗したとしても、コンテンツとフッタが読み込めるならそれはそれで読み込んで表示した方がいいよね、ってことだ。
こういう場合に include を使うのがよいと。

一方、require は処理に必要なライブラリを読み込むのに使う。
もしライブラリが読み込めなかったら、それ以降の処理をやろうとしても、クラスや関数がないためにエラーになるだろう。だから読み込み失敗の時点で fatal error にしちゃっていい。

自社のサービスのソースコードを見ると、ライブラリの読み込みに include、include_once を使ってる方が requrie、require_once を使ってるより多い。うーん。。。

参考ページ:
PHP: include - Manual
PHP: require - Manual
【PHP】includeとrequireの使い分け - Furudateのブログ
【PHP】include, requireの違いと使い分け | web codery

June 14, 2015

CakePHPのインストール

仕事でCakePHPを使うことになった。WEBアプリじゃなくてコンソールアプリだが。
とりあえずCentOSにインストールしてみた。

インストール

composerを使ってインストールした。

/var/www/html の下に example-app というフォルダを作成。そのフォルダに公式サイトの応用インストールというページに書いてある以下の composer.json をまるっとコピーして example-app に置いた。

{
    "name": "example-app",
    "require": {
        "cakephp/cakephp": "2.6.*"
    },
    "config": {
        "vendor-dir": "Vendor/"
    }
}

そして、"composer install" を実行。

# composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing cakephp/cakephp (2.6.7)
    Downloading: 100%         

Writing lock file
Generating autoload files
#

これでCakePHP 2.6.7のファイルの配置が完了。ディレクトリ構成は大体以下のようになる。
cakephpの下にさらにcakephp。なんか変な気もするが、こういうものなのか?

example-app/
+-composer.json
+-Vender/
  +-bin/
  +-autoload.php
  +-composer/
  +-cakephp/
    +-cakephp/
      +-app/
        +-Config/
        +-Console/
        +-Controller/
        +-Lib/
        +-Locale/
        +-Model/
        +-Plugin/
        +-Test/
        +-Vender/
        +-View/
        +-tmp/
        +-webroot/
      +-lib/

また、CakePHPはApacheのmod_rewriteを利用するが、これは既に使えるようになっていたので特に何かする必要はなかった。

設定

timezoneの設定

デフォルトのtimzoneを設定。これはCakePHPとか関係なく、PHPをインストールした後すぐにやっておかなければならないことだった。
/etc/php.ini で下記のように設定する。
最初、/etc/httpd/conf.d/php.conf に書き込んだらエラーなって悩んでしまった。このApacheのPHPに関する設定ファイルであって、PHPの設定ファイルではなかったorz

date.timezone = Asia/Tokyo
Security.saltとSecurity.cipherSeedの変更

app/Config/core.php に設定されている Security.salt と Security.cipherSeed を修正する。初期値のままだと初期画面に警告がでる。

app/tmpのパーミッション変更

app/tmpディレクトリ以下に一時ファイルが作られるので、パーミッションの設定をする。

chmod -R 777 app/tmp
DB接続の設定

DB接続の設定は app/Config の datababase.php.default を database.php にリネームして行う。デフォルトではMySQL用。PostgreSQLを使う場合は datasource を書き換え、port と schema を加える。encoding はコメントになっていたので有効にする。host、login、password、database は自分の環境に合わせて変更する。

class DATABASE_CONFIG {

	public $default = array(
		'datasource' => 'Database/Postgres',
		'persistent' => false,
		'host' => '192.168.1.11',
		'port' => '5432',
		'login' => 'user',
		'password' => 'pass',
		'database' => 'mydb',
		'schema' => 'public',
		'prefix' => '',
		'encoding' => 'utf8',
	);
…
バーチャルホストの設定、SELinuxの無効化、Apacheの再起動

「Laravelのインストール」を app/webroot をドキュメントルートとしてバーチャルホストの設定し、SELinuxを無効化して、Apacheを再起動。

ここまでやって、設定したバーチャルホストにアクセスすると、CakePHPのデフォルトのページが表示される。
#まだ「DebugKitがインストールされていない」というWarningが出ているが。

参考ページ:
応用インストール — CakePHP Cookbook 2.x ドキュメント
CakePHPのダウンロードとインストール - CakePHPの使い方
AWS EC2にPHP5.5環境でCakePHPを導入 - Qiita
インストール — CakePHP Cookbook 2.x ドキュメント
CakePHPでPostgreSQLを使う - Qiita

参考ページ:Composer
Composerを使ってPHPのパッケージを簡単インストール (2/3):CodeZine

June 09, 2015

PHPからPDOでPostgreSQLに接続する

以下のコードでPHPからPDOでPostgreSQLに接続できること確認しようと思った。

$dsn = 'pgsql:dbname=mydb;host=192.168.1.11;port=5432';
$user = 'user';
$pass = 'pass';

try {
    $dbh = new PDO($dsn, $user, $pass);
    $sql = 'SELECT CURRENT_TIMESTAMP';
    foreach ($dbh->query($sql) as $row) {
        print $row[0] . "\n";
    }
    $dbh = null;
} catch (PDOException $e){
    print('[ERROR] ' . $e->getMessage() . "\n");
    die();
}

繋がらない。以下のメッセージが出た。

[ERROR] could not find driver 

"php -i" で確認。
#"php -i" は phpinfo() を出力するそうだ。

# php -i | grep pdo
/etc/php.d/pdo.ini,
/etc/php.d/pdo_sqlite.ini,
PHP Warning:  《省略》
pdo_sqlite
#

pdo_postgresql とかPostgreSQLと関連ありそうなものが見当たらない。これが「ドライバない」ということか。
"yum list" でパッケージを探すとphp-pgsqlというのがあったのでそれをインストールしてみた。

# yum --enablerepo=remi --enablerepo=remi-php55 list | grep pgsql
apr-util-pgsql.x86_64                     1.3.9-3.el6_0.1             base      
dovecot-pgsql.x86_64                      1:2.0.9-8.el6_6.4           updates   
libdbi-dbd-pgsql.x86_64                   0.8.3-5.1.el6               base      
mod_auth_pgsql.x86_64                     2.0.3-10.1.el6              base      
php-pear-MDB2-Driver-pgsql.noarch         1.5.0-0.7.b4.el6.remi       remi      
php-pgsql.x86_64                          5.5.25-1.el6.remi           remi-php55
php54-php-pgsql.x86_64                    5.4.41-1.el6.remi           remi      
php55-php-pgsql.x86_64                    5.5.25-1.el6.remi           remi      
php56-php-pgsql.x86_64                    5.6.9-1.el6.remi            remi      
rsyslog-pgsql.x86_64                      5.8.10-10.el6_6             updates   
rsyslog7-pgsql.x86_64                     7.4.10-3.el6_6              updates   
uuid-pgsql.x86_64                         1.6.1-10.el6                base      
# yum --enablerepo=remi --enablerepo=remi-php55 install php-pgsql
《省略》
インストール:
  php-pgsql.x86_64 0:5.5.25-1.el6.remi                                          

依存性を更新しました:
  php.x86_64 0:5.5.25-1.el6.remi                                                
  php-cli.x86_64 0:5.5.25-1.el6.remi                                            
  php-common.x86_64 0:5.5.25-1.el6.remi                                         
  php-gd.x86_64 0:5.5.25-1.el6.remi                                             
  php-mbstring.x86_64 0:5.5.25-1.el6.remi                                       
  php-mcrypt.x86_64 0:5.5.25-1.el6.remi                                         
  php-pdo.x86_64 0:5.5.25-1.el6.remi                                            
  php-process.x86_64 0:5.5.25-1.el6.remi                                        
  php-xml.x86_64 0:5.5.25-1.el6.remi                                            

完了しました!
# 

インストール完了。PHP関連が一緒に色々アップデートされた。それから httpd を再起動。
"php -i" を見ると、pdo_pgsqlが入っている。
ちなみに、PHPの拡張モジュールの共有ライブラリ自体のディレクトリは
/usr/lib64/php/modules
設定ファイルのディレクトリは
/etc/php.d

これで最初のプログラムを実行すると、ちゃんと接続できてクエリの結果が返ってきた。

参考ページ:
PHP/PDOを使ってPostgreSQLに接続する - 調べる.db
PHP: PDO - Manual
PHP: PostgreSQL (PDO) - Manual

« May 2015 | Main | August 2015 »

May 2017
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof