SendmailパスとPHPパスの取得
Perl/CGIプログラム を使って、SendmailとPHPのパスを調べてみましょう。
SendmailもPHPも、利用可能であればレンタルサーバーのホームページに載っています。
しかし、わざわざSendmailのパスやPHPのパスを探すのが面倒だという場合は、ぜひこの方法を使ってみてください。
サーバーOS情報を取得 したときと同様に、SendmailとPHPのパスが一発でわかります。
Sendmailパスを取得する
Perl/CGIプログラム を使って、Sendmailのパスを調べてみましょう。
#!/usr/bin/perl
use strict;
my @PATH = &GetCommandPath('sendmail');
print "Content-type: text/html\n\n";
if (scalar(@PATH)) {
print join ("<br>\n", @PATH);
} else {
print 'Unknown';
}
exit;
sub GetCommandPath {
my $command = shift;
my @whereis = ('whereis', '/usr/bin/whereis', '/usr/ucb/whereis');
my @path = ();
if ($command eq '') {return;}
if ($^O =~ /MSWin32/i) {return;}
foreach (@whereis) {
my $response = `$_ $command`;
next if ($response eq '');
foreach (split(/\s/, $response)) {
if (/\/${command}$/) {
push @path, $_;
}
}
last;
}
unless (scalar @path) {
my $response = `which $command`;
if ($response =~ /$command$/) {
push @path, $response;
}
}
return @path;
}
__END__
Perl/CGIプログラムサンプル はこちらに設置してあります。
このPerl/CGIプログラムを実行するとSendmailのパスを取り出し表示します。
/usr/sbin/sendmail
/usr/lib/sendmail
サーバー上で実行するとこんな感じに表示されます。
サブルーチン GetCommandPathで取得したSendmailのパスを表示させています。
このGetCommandPath関数は、「 Perlパスを調べるPerl/CGIプログラム 」で使ったものを一部改造したものです。
なのでGetCommandPath関数の詳細についてはそちらを参照してください。
GetCommandPath関数は、引数には調べたいコマンド(今回であればsendmail)、戻り値には取得したパスが 配列 形式で返されます。
Sendmailのパスが取得できたら、 join関数 で1要素1行で表示させています。
もしSendmailのパスを取得できなかった場合には、戻り値は何もありません。
なのでそれらを if文で判断 し、もしSendmailのパスを取得できなかった場合には「Unknown」を表示させています。
PHPのパスを取得する
Perl/CGIプログラム を使って、PHPのパスを調べてみましょう。
#!/usr/bin/perl
use strict;
my $flag = 0;
print "Content-type: text/html\n\n";
foreach ('php', 'php3', 'php4') {
my @PATH = &GetCommandPath($_) or next;
foreach (@PATH) {
print $_,"<br>\n";
$flag = 1;
}
}
unless ($flag) {
print 'Unknown';
}
exit;
sub GetCommandPath {
my $command = shift;
my @whereis = ('whereis', '/usr/bin/whereis', '/usr/ucb/whereis');
my @path = ();
if ($command eq '') {return;}
if ($^O =~ /MSWin32/i) {return;}
foreach (@whereis) {
my $response = `$_ $command`;
next if ($response eq '');
foreach (split(/\s/, $response)) {
if (/\/${command}$/) {
push @path, $_;
}
}
last;
}
unless (scalar @path) {
my $response = `which $command`;
if ($response =~ /$command$/) {
push @path, $response;
}
}
return @path;
}
__END__
Perl/CGIプログラムサンプル はこちらに設置してあります。
このPerl/CGIプログラムを実行するとPHPのパスを取り出し表示します。
/usr/bin/php
/usr/local/bin/php
/usr/local/bin/php4
/usr/local/lib/php4
/usr/local/php4
サーバー上で実行するとこんな感じに表示されます。
PHPのパスを取得しているGetCommandPath関数は、前述のSendmailパスを取得しているものと同じです。
ただし今回は foreachループ を使って、「php」「php3」「php4」コマンドで、PHPパスの取得を試みています。
PHPのパスを取得できたらprint関数で表示させ、もし取得できなかったら次を試しています。
そしてPHPのパスがひとつも取得できなかった場合には、「Unknown」を表示し終了します。