SendmailパスとPHPパスの取得

Perl/CGIプログラム を使って、SendmailとPHPのパスを調べてみましょう。

SendmailもPHPも、利用可能であればレンタルサーバーのホームページに載っています。

しかし、わざわざSendmailのパスやPHPのパスを探すのが面倒だという場合は、ぜひこの方法を使ってみてください。

サーバーOS情報を取得 したときと同様に、SendmailとPHPのパスが一発でわかります。

  1. Sendmailパスを取得する
  2. 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」を表示し終了します。