PHPがlinuxシステムコマンドを実行する一般的な関数の使用説明

3343 ワード

System関数の説明:外部プログラムを実行し、出力資料を表示します.構文:string system(string command,int[return_var]);戻り値:文字列の詳細:この関数はC語の関数system()のように、命令を実行し、結果を出力します.もしもreturn_varパラメータが存在する場合、commandを実行した後の状態がreturn_に入力されます.varで.同様に,ユーザが入力した資料を処理し,ユーザが手品を弄してシステムを解読することを防止する必要がある場合には,EscapeShellCmd()を用いることができることに注目すべきである.PHPがモジュール式で実行されると,本関数は各行出力後にWebサーバの出力バッファを自動的に更新する.完全な戻り文字列が必要で、不要な他の中間の出力インタフェースを通過したくない場合は、PasssThru()を使用します.インスタンスコード:
 
  
< ?php
$last_line = system('ls', $retval);
echo 'Last line of the output: ' . $last_line;
echo '
Return value: ' . $retval;
?>

exec関数
説明:外部プログラムを実行します.
構文:string exec(string command,string[array],int[return_var]);
戻り値:文字列
詳細:この関数はcommandを入力する外部プログラムまたは外部命令を実行します.その戻り文字列は、外部プログラムが実行された後に返される最後の行にすぎません.完全な戻り文字列が必要な場合は、PasssThru()という関数を使用します.
パラメータarrayが存在する場合、commandはarrayをパラメータに追加して実行し、arrayが処理されたくない場合はexec()を実行する前にunset()を呼び出すことができます.もしもreturn_varとarrayの2つのパラメータが存在する場合、commandを実行した後の状態がreturn_に入力されます.varで.
利用者が入力した資料を処理し、利用者がトリックでシステムを解読することを防止する必要がある場合は、EscapeShellCmd()を使用することができることに注目すべきである.
インスタンスコード:
 
  
< ?php
echo exec('whoami');
?>

popen関数の説明:ファイルを開きます.
構文:int popen(string command,string mode);
戻り値:整数
詳細:
この関数は、パイプで処理されたファイルである命令アーカイブを実行します.この関数で開いているファイルは一方向(読み書きのみ)で、必ずpclose()で閉じます.ファイル操作では、fgets()、fgetss()、fputs()を使用できます.アーカイブにエラーが発生した場合はfalse値を返します.
インスタンスコード:
 
  
< ?
$fp = popen("/bin/ls","r" );
?>

PHPモニタlinuxサーバ負荷
実際のプロジェクトの応用において,我々は様々な条件の現実のためにPHPを利用してサーバ負荷監視を実現することはより柔軟な方法である.
WebサーバとPHPの実装方式が限られているため、現実環境ではPHPを利用してLinuxでroot権限が必要なプログラムを呼び出すのは難しい.これに対して、私はネット上で別の方法を見つけてこの制限を迂回した.まずcプログラム中継呼び出しシステムコマンドを書き、PHPでこのcプログラムを実行します.
cプログラム
まずcファイルを書きます.例えば/usr/local/ismole/w.c
 
  
#include
#include
#include
#include

int main()
{
uid_t uid ,euid;

//note uid
uid = getuid();
//note euid
euid = geteuid();

//note id
if(setreuid(euid, uid))
perror("setreuid");

//note linux
system("/usr/bin/w");
return0;
}  

このファイルgcc-o w-Wall w.cをコンパイルすると、現在のディレクトリの下でプログラムwが生成されます.このプログラムの所有者chmod u+s./を変更します.w.
PHP実行
ファイルの内容は以下の通りで、webディレクトリの下に置くと、アクセスは現在のサーバ負荷状況を出力します.
 
  
/*
More & Original PHP Framwork
Copyright (c) 2007 - 2008 IsMole Inc.

$Id: serverMonitor.php 408 2008-12-02 08:07:40Z kimi $
*/

//note key
if($key != $authkey) {
// exit('key error);
}

$last_line = exec('/usr/local/ismole/w', $retval);

$returnArray = explode("load average: ", $retval[0]);
$returnString = $returnArray[1];

echo $returnString; 

上記の例に従って、PHPでLinuxシステムコマンド、SVN更新、サーバモニタリング、バックアップ、リカバリ、日常メンテナンスなどを行うことができます.