2008年7月17日木曜日

PHPでモジュールが読み込まれない!

そんな時は php.ini の「extension_dir」を見てみよう。
記述された内容と、実際に「*.so」が置かれている場所が
違ってるかもしれないから。
あと、自分が見ている php.ini が
本当に読み込まれているかも確認した方がいい。
cli/ と間違うことは少ないだろうが、
apache2/ と cgi/ を間違えたことならある。

2008年7月16日水曜日

ExecCGI

ExecCGI と書かれてなきゃCGIは動かない。
それは憶えてた。

けど、どこに書くのか。
「/usr/lib/cgi-bin」は sites-available/default にあったけど…
と思って「public_html」で /etc/apache2/* あたりを grep すると
あるサーバでは apache2.conf
別のサーバでは userdir.conf に

Directory /home/*/public_html>

</Directory>

が記述されていた。ちなみに

前者は Apache/2.0.54
後者は Apache/2.2.3

である。

2008年7月14日月曜日

こんなことまで忘れてしまうのかと

そう思うとちょっと憂鬱だが。

apache2でphpを動かしたい


・事の起こり
php ファイルを作成し、ブラウザにURL打ち込んだらファイルがDLされた。

・確認1
php5.conf、php5.load: enmodされてないどころかavailableに存在してない。

・実行
apt-get install libapache2-mod-php5

・確認2
php5.conf、php5.load: 共にenmodにavailableへのリンクあり。けどやっぱりダウンロードされる。

・実行
apache2 restart

・確認3
これでブラウザからもPHPの実行が確認された。

今回の備忘ポイントは追加するモジュールの名前「libapache2-mod-php5」だな。

2011/07/25 追記
「ドキュメントルート配下ではPHPが動作するが、UserDirでは動作しない」という現象が確認された。
調べてみると mods-enabled/php5.conf の設定に原因があるらしい
     12         <Directory /home/*/public_html>
     13             php_admin_value engine Off
     14         </Directory>
このへんが見るからに怪しいので「php_admin_value engine On」と修正してapacheを再起動する。
結果、動作は変わらず。PHPファイルがダウンロードされる。
よく見るとその直前に
      8     # To re-enable php in user directories comment the following lines
      9     # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
     10     # prevents .htaccess files from disabling it.
     11     <IfModule mod_userdir.c>
     12         <Directory /home/*/public_html>
と書いてあるではないか。なので、とりあえず「php_admin_value engine Off」をコメントする。
apacheを再起動すると、期待通りPHPが実行されるようになった。
コメント行の記述にあるようにIfModule全体をコメントしたほうが処理は軽くなるはずなので、
運用は全体をコメントアウトしよう。

2008年7月11日金曜日

psql 8.1.2

ALTAR TABLE で SET DEFALT CURRENT_TIMESTAMP と指定した。
確認のため \d したところ
「default now()」
と表示された。

なんかちょっとショックだった。

2008年7月10日木曜日

オブジェクトか?

bool is_object($foo)
$foo がオブジェクトであれば真。

bool is_a($foo ,'bar')
$foo がクラス「bar」のオブジェクトであるか、「bar」を継承したクラスのオブジェクトであれば真。
ただしこの関数はPHP5では非推奨であり、演算子「instanceof」を用いて
($foo instanceof bar)
と記述するのが推奨だとか。この「bar」は文字列ではないことに注意。

string get_class($foo)
オブジェクト$fooのクラス名を返す。

bool class_exists ('bar')
クラス「bar」が定義されていれば真。

2008年7月9日水曜日

vsftpd の設定

/etc/vsftpd.conf で設定。
anonymous_enable はNO(アノニマスでの使用はしない)
local_enable はYES(アカウントのあるユーザーでログイン)
write_enable はYES(書き込み権アリ)
local_umask は022(できるファイルのパーミッションは755)
listen はデフォルトでNO。YESにしても動くらしいがよくわからない。
NOにすると自分ではポートをlistenせず、誰かが呼んでくれないかと
ひたすら待つことになるから、vsftpd を呼ぶ人を用意せねばならない。

呼ぶ人は inetd である。inetd じゃなくてもいいのかもしれないが、
他に同じようなことをしてくれる人を知らないので inetd で行く。
inetd は/etc/inetd.conf で設定する。
ここに「/usr/sbin/vsftpd」を含む行を追加すればおk。
(今回、具体的な追加内容は省略)

あと、hosts.deny をちゃんと設定していると新しいサービスは蹴られるので
hosts.allow にサービスを追加しておくように。

2008年7月8日火曜日

userdir

apache2 でモジュール「userdir」を導入しないまま「hoge.com/~user/fuga.html」をリクエストしたらどうなるか。

/var/www/~user/fuga.html を探られた。
当たり前といえば当たり前だな。

どうでもいいけど「~」は「チルダ」か「ティルデ」というのが一般的らしい。
「ティルダ」とかいう人は少ないのか。

補遺
モジュール追加 → a2enmod
モジュール削除 → a2dismod

adduser した時に public_html も作っとく

adduser に先だって /etc/skel/ に public_html を作っておく
これでおk