PHPをCLIで使用した時に、プログラム上で標準入出力とエラー出力を/dev/nullに変更する方法について教えて下さい。

Rubyで書くと下記の通りの方法でできますが、同様のことをPHPでも行いたいと考えています。

STDIN.reopen("/dev/null", "r+")
STDOUT.reopen("/dev/null", "w")
STDERR.reopen("/dev/null", "w")

別の方法としては、

php /foo/var.php < /dev/null >/dev/null 2>&1

のように起動時にリダイレクト先を指定すること方法もありますが、プログラム上で変更する方法を探しています。

どうぞよろしくお願い致します。

回答の条件
  • 1人3回まで
  • 13歳以上
  • 登録:2010/03/17 12:26:35
  • 終了:2010/03/24 12:30:02

ベストアンサー

id:Km1967 No.2

Km1967回答回数224ベストアンサー獲得回数352010/03/17 14:53:40

ポイント27pt

回答1のように直接書くという手もあるが、それはそれで面倒だから一発で対処できないかという趣旨の質問なのだろう。だが残念ながらphpにはお望みのコマンド類は用意されていない。

http://www.php.net/manual/ja/wrappers.php.php

http://www.php.net/manual/ja/features.commandline.php

既にご存知のとおり起動時に示してやるのが間違いない方法だ。

id:pcmaster

回答ありがとうございます。

やっぱりなさそうですね。

2010/03/18 21:21:15

その他の回答(2件)

id:Bombastus No.1

ホーエンハイム回答回数409ベストアンサー獲得回数522010/03/17 13:05:49

ポイント27pt

出力の切り替えについては下記のように ob_start などを使って行います。

<?php
    echo 'へげへげ';
    ob_start();         //標準出力トラップ開始
    echo 'ほげほげ';
    $output = ob_get_contents();    //トラップした文字列
    ob_end_clean();     //トラップ終了
    // /dev/nullへ出力
    $fp = fopen('file:///dev/null', 'w'); 
    fwrite($fp, $output); 
    fclose($fp); 
?>

入力の切り替えは、コマンドライン以外でやったことがないので分かりません。ごめんなさい。

id:pcmaster

回答ありがとうございます。

デーモンを作りたいたいのですが、

デバイスファイルが開いた状態だとログアウトすることが出来ない為、プログラム上で標準入出力とエラー出力を/dev/nullに変更したいのです。

下記の方法で一応できるのですが、プログラム上で変更できるスマートな方法を探しています。

php /foo/var.php < /dev/null >/dev/null 2>&1

2010/03/18 21:21:03
id:Km1967 No.2

Km1967回答回数224ベストアンサー獲得回数352010/03/17 14:53:40ここでベストアンサー

ポイント27pt

回答1のように直接書くという手もあるが、それはそれで面倒だから一発で対処できないかという趣旨の質問なのだろう。だが残念ながらphpにはお望みのコマンド類は用意されていない。

http://www.php.net/manual/ja/wrappers.php.php

http://www.php.net/manual/ja/features.commandline.php

既にご存知のとおり起動時に示してやるのが間違いない方法だ。

id:pcmaster

回答ありがとうございます。

やっぱりなさそうですね。

2010/03/18 21:21:15
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402010/03/17 16:53:41

ポイント26pt

PHP: PHP をコマンドラインから使用する - Manual

シェル環境での動作を容易とするために、以下の定数が定義されています。

デーモン化は試したことは無いけど、単に閉じてやれば良いんじゃない?

php -r 'fclose(STDIN);fclose(STDOUT);fclose(STDERR); echo "test"; '
id:pcmaster

回答ありがとうございます。

fcloseも5.1.6および5.3.0で試してみましたが、閉じる事が出来ないようです。

2010/03/18 21:21:24

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません