日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP 5 » シェル実行時の出力の問題

シェル実行時の出力の問題

ページ: 1

投稿者 投稿
会員
登録者: 2 2010
返信数: 5
はじめまして。osamuと申します。
PHPでsystem関数を利用してシェルコマンドを実行した際に自動的に出力される文字列をコントロールするにはどうしたらよいでしょうか?
例えば、シェルのzipコマンドなど非常に便利なのですが、
<?
system("zip -r test.zip test");
?>
というものを実行すると特にvar_dumpしているわけでもないのに実行結果がブラウザーに「updating: test/ (stored 0%) updating: test/readme.txt (deflated 34%) updating: test/files/ (stored 0%) updating: test/form.html (deflated 37%) updating: test/upload.php (deflated 54%)」という風に出力されてしまいます。
system関数の戻り値も他の関数と違うようでして成功時と失敗時の区別がなかなかできません。
やりたいこと、知りたいことは、
・自動的に出力される文字列を制御したい(表示されないようにする、や、変数に入れて河口する。)ということと、
・system関数の戻り値
です。
詳しい方がらしたらご教授ねがいます。
会員
登録者: 2 2010
返信数: 5
追伸::
PHPの環境は、
OS Ubuntu9.10
PHP5
Webサーバー Apache2.x
です。よろしくお願いします。
管理者
登録者: 10 2005
返信数: 38
http://php.net/system
をくまなく見てみましたか?
多分ヒントがあると思いますが
会員
登録者: 8 2009
返信数: 103
おはようございます。

> ・system関数の戻り値
マニュアルをみるとsystem関数の戻り値は最後の行を返すとあります。
ELFさんが提示されたリンク先を参照。

> ・自動的に出力される文字列を制御したい(略
system関数でするならリダイレクトを使います。
変数に入れて加工するのならいったんファイルに出力するか
バッククォートを使うかですね。

> 成功時と失敗時の区別
$ret2の処理が成功時と失敗時の区別に該当します。



<?php

header("Content-Type: text/plain; charset=utf-8");

$result1 = system("/bin/date '+%Y-%m-%d %H:%M:%S' > /dev/null", $ret1);


$log_file = "log.txt";
$result2 = system("/bin/date '+%Y-%m-%d %H:%M:%S' > $log_file", $ret2);
echo "result2: " . "\n";
if($ret2 == 0) {
$log_txt = file_get_contents($log_file);
echo $log_txt . "\n";
}
else {
echo "failure" . "\n";
}


$result3 = `/bin/date "+%Y-%m-%d %H:%M:%S"`;
echo "result3: " . "\n";
echo $result3;

?>
会員
登録者: 2 2010
返信数: 5
>nullaさん
 ありがとうござます。
/dev/null", $ret1がありました!あまりシェルを使う機会が少ないのですっかり忘れていましたありがとうござます。
 その後もいろいろ調べた結果、shell_exec()だと出力が簡単に取り出せるようです。テストしてみたら自動的にシェルから出力されるということがなくなりました。

>ELFさん
 ヒントがわからなかったのでここで質問をしております。
管理者
登録者: 10 2005
返信数: 38
「参考」欄のexec()がおそらくsystem()より適していると考えていました.
「参考」にある関連関数について調べたのかなということでした.

ページ: 1

日本PHPユーザ会 掲示板 » PHP 5 » シェル実行時の出力の問題

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています