PHP: 2009年6月アーカイブ

PHPをコマドライン(cli)から起動すると、表題のようなエラーが出ることがあります。
Fatal error: Call to undefined function pg_connect() 
ブラウザから動かしたらちゃんと動くのにおかしいなーと思っていろいろ調べたら、原因がわかりました。

原因

phpは、Apacheと連動して動く場合と、コマンドライン(cli)から起動して動く場合で、別々のphp.iniファイルを参照しているようです。

私の場合は、
  • Apacheモジュールとして動作する場合: c:\windows\php.ini
  • コマンドラインのコマンドとして動作する場合: c:\php5\php.ini
となっていたようです。
前者ではphp_pgsql.dll(PostgreSQL接続用モジュール)が読み込まれる設定になっていたのに、後者では何も設定していなかったので、上記のエラーが出た次第です。

対処法

コマンドライン(cli)用のphp.iniを、下記のように書き換えれば、動くと思います。
;extension=php_pgsql.dll
↓
extension=php_pgsql.dll

php_pgsql.dllが読み込まれているかを確認する方法

コマンドラインから、
>php -i
と打って、"PostgreSQL"または"pgsql"という文字が出てくればOKです。

spp/Sample_Controller.php

再びindex.phpを見てみましょう。
<?php
require_once 'C:¥xampp¥htdocs¥sample¥app/Sample_Controller.php';

Sample_Controller::main('Sample_Controller', 'index');
?>
Sample_Controllerのmain関数を呼び出しています。

では、Sample_Controller.phpを開いて、Sample_Controllerクラスを探しましょう。

おっ、ありました。

class Sample_Controller extends Ethna_Controller
{
...
よしよし。
では、main関数はと・・・

あれ、ない。

Sample_Controllerにmain関数はないようです。

この場合、Sample_Controllerの親クラスであるEthna_Controllerのmain関数が呼び出されることになっています。

次回は、Ethna_Controllerの中を覗いてみましょう。

はじめに

この連載では、Ethna2.3.6のソースコードとその読み方を解説します。

Ethnaコマンドを使って"Sample"という名前のプロジェクトを作ったという前提で話を進めます。

手元にEthnaがない方は、公式サイトを見てインストールしてみてください。
Ethnaインストールガイド

Windowsユーザの方はコレ↓で一発です。
5分でまっさらなWindowsにEthnaをインストールしてHello Worldを表示する方法

話を単純化するために、CLI,XML-RPC,SOAPなどには一切触れませんのでご了承ください。


Ethnaのプログラム実行はどこから始まるのか


EthnaでWebアプリを作るとき、通常はアクション、ビュー、テンプレートファイルの3セット(+DBクラスや自作ライブラリ)をバリバリ記述することになると思います。

では、問題です。

Ethnaで作ったWebアプリの実行はどこから始まるのでしょうか?



こたえ:index.php



全てはindex.phpから始まる

これは重要です。

そのアプリが、たとえ"hello world"と表示するだけの簡単なアプリであろうと、
あるいは、何百人のユーザを抱える大規模なソーシャルネットワーキングSNSサービスであろうと、

ユーザがindex.phpにアクセスしてきたなら、プログラムの実行はindex.phpから始まります。

つまりここから始まります。

<?php
require_once 'C:¥xampp¥htdocs¥sample¥app/Sample_Controller.php';

Sample_Controller::main('Sample_Controller', 'index');
?>
これがEthnaの第一歩です。

解説

1行目では、Sampleプロジェクトのコントローラーファイルを読み込んでいます。
コントローラというのは、メインのプログラムのことです。
require_once 'C:¥xampp¥htdocs¥sample¥app/Sample_Controller.php';

2行目では、読み込んだファイルの中の、Sample_Controllerクラスのmain関数を実行しています。
Sample_Controller::main('Sample_Controller', 'index');

さあここからが、Ethna内部への旅の始まりです。

つづく

余談:MVCなど忘れてしまえ

公式サイトやEthna本によると、
Ethnaとは、
MVCモデル2とフロントコントローラパターンに基づいたスタンダードなウェブアプリケーションフレームワーク
であると書かれています。

んがっ、そんな話は忘れてしまいましょう。

Ethnaとは、PHPで書かれたプログラムである。
これで十分です。

このアーカイブについて

このページには、2009年6月以降に書かれたブログ記事のうちPHPカテゴリに属しているものが含まれています。

前のアーカイブはPHP: 2009年1月です。

次のアーカイブはPHP: 2009年9月です。