人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: 謎のクマしゃん
●カテゴリ:インターネット ウェブ制作
✍キーワード:CLI PHP Ruby エラー プログラム
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ホーエンハイム
●27ポイント

出力の切り替えについては下記のように 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); 
?>

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

◎質問者からの返答

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

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

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

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

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


2 ● Km1967
●27ポイント ベストアンサー

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

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

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

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

◎質問者からの返答

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

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


3 ● b-wind
●26ポイント

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

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

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

php -r 'fclose(STDIN);fclose(STDOUT);fclose(STDERR); echo "test"; '
◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ