<Homeへもどる>   <前に戻る>

PHPでHTMLの可能性がより広がる

 HTML埋め込み型のスクリプト言語。
Apacheのモジュールとして動作するので高速。
データベースアクセスのインターフェースとしてもよく使われている。



・インストール
・「送信」(Submit)を押しても処理されない・・・?




1.ソースの入手からコンパイル・インストール

http://www.php.net/
 ソースはこのアドレスから入手。
 また、事前にApacheのインストール時にDSOを有効にしてコンパイルしている必要があるので、
Apacheの項目を参照して確認を。
DSOが有効になっているならば、PHPを下記のようにしてインストール。

$tar zxfv php-4.3.1.tar.gz
$cd php-4.3.1
$./configure --enable-trans-sid --enable-session --enable-mbstring --with-pgsql
--enable-track-vars --with-apxs2=/usr/local/apache2/bin/apxs
$make
#make install

オプションは二列になって表示されているが、実際には一列で打ち込むように。
その内容は、--enable-trans-sid --enable-session がセッションを扱えるように
するためのオプションで、 --enable-mbstring でマルチバイト文字が扱えるようにするため。
また、--with-apxs2 とあるが、これはApacheのバージョンが2.0.xの場合。
1.3.xなら --with-apxs とする。"="の後はapxsのある場所を示す。
--with-pgsql はPostgreSQLと連携させるためのオプション。
データベースをWEB上で扱わないようであれば、特に指定の必要はない。
同様に"="の後にPostgreSQLのインストールされたディレクトリを明示できる。
その昔、このオプションを付け忘れたために「pg_connect()が定義されてません」みたいなエラーが出て、
半日以上悩んだことあり。アホでした・・・



2.インストールが完了したら設定

 と言ってもやることは少ない。
ソースファイルを展開したディレクトリに php.ini-dist というファイルがあるので、
これを /usr/local/lib/ に php.ini としてコピーしてやればいい。
 また、Apache の設定ファイル(httpd.conf)にも下記のように変更を加える

httpd.conf
LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

一行目は"#"でコメントアウトされているので、通常は"#"を削除するだけでOK。
下二行は追記しないとダメ(たぶん)。
 PHPとApacheの連携だけですむなら、後はApacheを再起動するのみ。

#/usr/local/apache2/bin/apachectl restart

でよいでしょう。
ちゃんと使えるかどうかの確認は、とりあえず

test.php
<? php phpinfo(); ?>

といった内容のファイルを作り、ブラウザでみてみる。



こんな感じの表示がでれば、とりあえず動作はしている。
 もし、ソースコードがそのまま表示されていたりするのであれば、PHPは上手く動いてない。
ApacheやPHPをコンパイルするときのオプションは正しいかどうかを見直そう。



<HP4.2.0から変数の取り扱いが変わった!>

 これまで4.2.0未満のPHPを使用していた。
いっきに4.3.1に変更したため、変数の扱いが変わっていることに気づかず
しばらく悩むこととなった。

<html>
<head>
<form name="form1" method = "post">
<p>
<input type="submit" name="Submit" value="送信">
</p>
</form>

<?
if($Submit == "送信")
  {
  print("<p align=\"center\">送信ボタンが押された!!</p><br>\n");
  }
else
  {
  print("<p align=\"center\">送信ボタンを押せ!</p><br>\n");
  }
?>

</body>
</html>

 このような単純なスクリプトでもなぜか動作しない。
WEBをあさると、単純に変数の扱いが変わったために起こる問題だということがわかった。
具体的な解決策としてはpnp.ini の中にある、

register_globals = Off

を「On」に変えればいい。
 ただし、この場合、セキュリティ上好ましくないようだ。
脆弱性が発見されたためにデフォルトで「Off」にされたみたいなので、
できれば、ソースファイルを変更するのが正しい道だ。

 しかし、これまで作ってきたものすべてに変更を加えないといけないというのは面倒だ。
とりあえずのところ、「On」にしておいて、徐々にソースに変更を加えてゆき、
最終的に「register_globals = Off」を目指す、という考え方でもいいのでは・・・?

 では、ソースに変更をする場合はどのようにしたらいいか。

<html>
<head>
<form name="form1" method = "post">
<input type="submit" name="Submit" value="送信">
</p>
</form>
<?
if($_POST['Submit'] == "送信")
  {
  print("<p align=\"center\">送信ボタンが押された!!</p><br>\n");
  }
else
  {
  print("<p align=\"center\">送信ボタンを押せ!</p><br>\n");
  }
?>
</body>
</html>

といった感じで、「$Submit」→「$_POST['Submit']」にしてやると上手くいく。

<Homeへもどる>   <前に戻る>