CGIとPHP全般

よくあるトラブル

利用可能な言語

Perl

/usr/bin/perl /usr/local/bin/perl (どちらも同じ)

PHP

/usr/local/bin/php (CLI版)

Python

/usr/local/bin/python

Ruby

/usr/local/bin/ruby

sh

/bin/sh

csh

/bin/csh

パーミッション

仕様#パーミッションを参照してください。

実行権限

CGI(Perl・Python・Ruby等)とSSIはsuEXECで所有者権限で動作します。

PHPはCGI版をラッパーを利用して所有者権限で動作します。

CGIを勉強・練習・実験したい

XAMPPを利用してください。 XAMPPを使えば自分のパソコンにPHP/CGI/MySQL等を簡単にインストールできます。 勉強・練習・実験は自分のパソコンで存分にやってください。

大勢が共用するサーバで、十分テストしていないCGIを動かすのは非常に危険です。 最悪の場合、サーバを破壊し、損害賠償を請求されることもありえます。 これはどこのレンタルサーバでも同じです。

Perl

バージョン

バージョンは5.8.?です。

正確なバージョンを確認するには次のようなプログラムをperl-v.cgi等の名前でアップロードし、ブラウザから呼び出します。

#!/bin/sh
echo "Content-Type: text/plain"
echo
perl -v

Perlモジュール

非公式FAQのあるサーバ(sv102)にインストール済みのモジュールについては、Perlモジュールを参照してください。 公式サイトのリストは少し古いらしく、わずかに異なるようです。

自分の使っているサーバのPerlモジュールを確かめるには、次のプログラムをperlmodule.cgiのような名前でアップロードし、ブラウザから呼び出します。

#!/usr/bin/perl
use strict;
print "Content-Type: text/plain\n\n";

my %modules;
foreach (grep {$_ ne '.'} @INC) {
    &search($_);
}

foreach (sort keys %modules) {
    print "$_\n";
}

sub search {
    my ($base, $path) = @_;

    opendir DIR, "$base/$path" or return;
    my @files = grep {$_ ne '.' and $_ ne '..'} readdir DIR;
    closedir DIR;

    my $module = "$path";
    $module =~ s!/!::!g;
    foreach (@files) {
        if (/^(.+)\.pm$/) {
            $modules{"$module$1"} = 1;
        }
        elsif (-d "$base/$path$_") {
            &search($base, "$path$_/");
        }
    }
}

socket

使えます。 モジュールもいくつかインストール済みです。 ただし詳細は未確認です。

PHP

設定の取得

バージョンは5.2.?です。

PHPの設定を取得するには次のプログラムをphpinfo.phpのような名前でアップロードし、ブラウザから呼び出します。

<?php phpinfo(); ?>

なお、この情報を一般に公開するのはセキュリティ上好ましくありません。 確認した後はこのプログラムを削除しておくのがよいでしょう。

設定の変更

php.iniを書き換えれば設定を変更できます。 場所は/home/httpd/アカウント名/php.iniです。 FTPから見た場所は/php.iniです。

一部のphpスクリプトのみの設定を変更するには、書き換えたphp.iniを別のディレクトリ、例えば/home/httpd/アカウント名/ini1/の下に置きます。 そして.htaccessに次のように書きます。

suPHP_ConfigPath /home/httpd/アカウント名/ini1/

すると、.htaccessのあるところとその下のディレクトリにあるphpスクリプトの設定が変わります。

PHPが動作しない(ソースが表示される)

PHPスクリプトで <?php ではなく <? を使用している場合、デフォルトのままでは正常に動作しません。 php.iniのshort tagの項目を次のように書き換えます。

short_open_tag = On

あるいは、<? を全て <?php に書き換える方法もあります。 一般に公開するスクリプトでは <?php が推奨されています。

アップロードファイルサイズ

PHPスクリプトを利用してアップロードできるファイルはデフォルトで2MBまでです。 これはphp.iniを書き換えれば大きくできます。

具体的には、upload_max_filesizeの値を変更します。

upload_max_filesize = 7M

より大きなファイルをアップロードしたい場合は、memory_limit > post_max_size > upload_max_filesizeとなるように値を設定します。

CGI版とモジュール版

NEXTSPACEのPHPはCGI版です。 CGI版とモジュール版とでは細かい差がありますが、普通に使う分には気にしなくても大丈夫です。

主な相違点は以下の通りです。

セーフモード

デフォルトでsafe_mode offです。 CGI版なので深い意味はありませんが。

なお、safe_mode offはセキュリティ上危険という見方がありますが、それは誤解です。 たとえモジュール版であっても、適切に設定すればセキュリティを確保できます。 セーフモードは悪意ある攻撃に対する防御ではなく、うっかりミスによる被害を抑えるフェイルセーフです。 PHP6でセーフモードがなくなるのは、「safe_mode offは危険という誤解」と「safe_mode onは安全という過信」があまりに広まりすぎたせい、との話もあります。

インストール済みのPEAR

以下はインストール済みのPEARのリストです。

なお、このリストは非公式FAQが入っているサーバのもので、他のサーバでは異なる可能性があります。

自分の使っているサーバのPEARとそのバージョンを確認するには、次のCGIプログラムをpear-list.cgiのような名前でアップロードし、ブラウザから呼び出します。

#!/bin/sh
echo "Content-Type: text/plain"
echo
pear list

PEARのインストール

PEARをインストールする方法はいくつかあります。 参照: http://pear.php.net/manual/ja/installation.shared.php

やさしいのはgo-pear.phpを使う方法でしょう。 以下、それについて説明します。

PEARインストールの準備

  1. public_htmlの下にPEARをインストールするディレクトリを作ります。以下、pearというディレクトリを作ったとして説明します。
  2. 自分以外がpearの下の内容を読んでしまわないよう、BASIC認証で制限しておきます。

  3. http://pear.php.net/go-pear の内容を go-pear.php というファイル名で保存します。
    go-pear.phpをpearの下にアップロードします。

  4. go-pear.phpをブラウザから読みます。

    例えば http://faq.crz.jp/pear/go-pear.php です。
    「Next >>」をクリックし、次にページ下部の「Install」ボタンを押します。
    しばらく待つと「Installation Completed !」と表示され、PEARをインストールできる状態になります。
    Noteにある次のようなメッセージに注意します。

    Note: To use PEAR without any problems you need to add your
    PEAR Installation path (/home/httpd/n000000000/public_html/pear/PEAR)
    to your include_path.
  5. php.iniのinclude_pathを自分の環境に合わせて次のように書き換えます。もちろんn000000000は自分のアカウントにします。
    include_path = ".:/home/httpd/n000000000/public_html/pear/PEAR"

準備が完了したらgo-pear.phpは削除しても大丈夫です。

PEARインストールの実行

準備でgo-pear.phpをアップロードしたディレクトリをブラウザから呼び出します。 例えば http://faq.crz.jp/pear/ です。 ブラウザのブックマーク(お気に入り)に入れておき、必要なときに追加・削除・更新するとよいでしょう。

「list all packagenames」をクリックすればPEARパッケージの一覧が表示されます。 必要なパッケージ名をクリックすればインストールできます。

下部にPECLのリストがありますが、NEXTSPACEではコンパイル環境を提供しているわけではないので、インストールはできないようです。

fsockopen

使えるようです。 ただし詳細は未確認です。

Python

バージョン

バージョンは2.5.?です。

正確なバージョンを確認するには次のようなプログラムをpython-v.cgi等の名前でアップロードし、ブラウザから呼び出します。

#!/bin/sh
echo "Content-Type: text/plain"
echo
python -V 2>&1

Pythonの動向

Ver. 3はVer. 2と仕様がかなり変わっています。 また、現在のVer. 2の動向はそれほど単純ではありません。

Ver. 2.5まで

Ver. 2として互換性を維持

Ver. 2.6.?

Ver. 3に近づけるため仕様を若干変更

Ver. 2.7.?

Ver. 3に近づけるため仕様を若干変更

そのため、Python Ver. 2用に作られたWebアプリケーションの中には、Ver. 2.5を推奨しているものもあります。

例えばMoinMoin 1.8.6では次のように解説してありました。

Pythonのバージョンを見る場合はこのような動向に気をつけましょう。

Ruby

バージョン

バージョンは1.8.?です。

正確なバージョンを確認するには次のようなプログラムをruby-v.cgi等の名前でアップロードし、ブラウザから呼び出します。

#!/bin/sh
echo "Content-Type: text/plain"
echo
ruby --version

SSI

拡張子は.shtmlにします。

execは使えません。 それ以外に機能上の制限は特にないとのことです。

CGIとPHP (最終更新日時 2010-01-20 20:41:53 更新者 admin)