わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

UbuntuでCGIとPHP

いきなりですが問題です.

UbuntuCGIを使えるよう,シェルでsudo -iを実行してrootになり,次のコマンドを実行しました.

  • apt-get install apache2
  • a2enmod userdir

ファイルを以下のとおり編集しました.

  • /etc/apache2/mods-enabled/mime.conf
AddHandler cgi-script .cgi
  • /etc/apache2/sites-enabled/000-default.conf
<Directory "/var/www/html">
    AllowOverride All
    Options +ExecCGI
    Require all granted
</Directory>
  • /etc/apache2/mods-enabled/userdir.conf
Options ExecCGI MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

それから,一般ユーザのシェルで,ディレクトリ~takehikom/public_htmlを作ってから,Apacheのソースに入っているprintenv*1をそこに移動させ,先頭行を修正して実行属性をつけました.
rootのシェルで

  • service apache2 restart

を実行し,ブラウザでhttp://サーバ/~takehikom/printenvにアクセスしたのですが…ソースが表示されました.
何か,作業を忘れているのでしょうか?

解答です.次のコマンドを忘れています.

  • a2enmod userdir

実行後,再び「service apache2 restart」を実行しましょう.

もうひとつですが問題です.

UbuntuPHPを使えるよう,シェルでsudo -iを実行してrootになり,次のコマンドを実行しました.

  • apt-get install php5 php5-cgi libapache2-mod-php5 php5-common php-pear

ファイルを以下のとおり編集しました.

  • /etc/apache2/mods-enabled/mime.conf
AddHandler php5-script .php
  • /etc/apache2/mods-available/php5.conf
#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
#</IfModule>

それから次のコマンドで,Webサーバを再起動させました.

  • service apache2 restart

一般ユーザで,以下の内容のファイルを作って ~takehikom/public_html/phpinfo.php に置きました.

<? phpinfo(); ?>

ブラウザでhttp://サーバ/~takehikom/phpinfo.phpにアクセスしたのですが…何も表示されませんでした.ソースを見ると,上の内容そのままでした.
何か,忘れているのでしょうか?

解答です.「<?...?>」ではなく「<?php...?>」です.phpinfo.phpは,次のように書く必要があります.

<?php phpinfo(); ?>

これでブラウザを再読込すると,期待する,設定情報の表示となりました.
「<?...?>」でも,PHPスクリプトとみなすためには,/etc/php5/apache2/php.iniを編集して,「short_open_tag = On」とします.この設定の直前に,「; http://php.net/short-open-tag」と書かれており,ブラウザで開くとhttp://php.net/manual/ja/ini.core.php#ini.short-open-tagに転送され,XMLとの兼ね合いとともに,解説がありました.

*1:昨年度の演習科目で使用したhttpd-2.2.29.tar.bz2だと,httpd-2.2.29/docs/cgi-examples/printenv.この所在は,tar tvjf network-enshu2014/2/httpd-2.2.29.tar.bz2 | grep printenvを実行すれば確認できます.