前回の質問の続きです。

http://q.hatena.ne.jp/1302708059
ファイル出力し$dataの中は見ることができたのですが、今度は$structureの中を見たいのですが方法がわかりません。
構造がわからない配列をブラウザ出力のprint_r();みたいに展開できないものでしょうか?
よろしくお願いします。


<?php
require_once "Mail/mimeDecode.php";
$data = file_get_contents("php://stdin");

// メールをデコードする
$decoder = new Mail_mimeDecode($data);

$structure = $decoder->decode(array(
  'include_bodies' => true,
  'decode_bodies' => true,
  'decode_headers' => true,
));
?>

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/04/15 20:30:36
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:bayan No.3

回答回数100ベストアンサー獲得回数13

ポイント70pt

print_r() は、第二引数に true をセットすると、

出力しないで結果を取得できます。


$dataの内容をファイル出力できたのであれば、

file_put_contents() の第1引数にそのファイルのパスを

指定して、そこに書き込めると思います。


<?php
require_once "Mail/mimeDecode.php";
$data = file_get_contents("php://stdin");

// メールをデコードする
$decoder = new Mail_mimeDecode($data);

$structure = $decoder->decode(array(
  'include_bodies'	=> true,
  'decode_bodies'	 => true,
  'decode_headers'	=> true,
));

$outstr = print_r($structure, true);
file_put_contents('そのファイルのパス', $outstr);
?>

1番の方の回答も、file_put_contents() に 'php://stdout' じゃなくて、

出力したいファイルのパスを渡せば、目的は達成できると思います。


'php://stdout' は標準出力なので、file_put_contents('php://stdout', $outstr); は

echo $outstr; と同じことですかね。

メール振り分け時は行き場がなくて捨てられちゃう?

(サーバーのmaillogには出てるかもしれませんが)


コマンドラインから実行すれば画面に出てくるでしょう。


例えば $data の内容をファイルに保存しておき、サーバーに ssh 等でログインして、

以下を実行するとか。

cat '$dataの内容を保存したファイル名' | php postmail.php




http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E3%82%B9%E3%83%8...

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

id:seadwell

できました!

かゆい所に手が届く回答でとても助かりました。

バックグラウンドで稼働するプログラムの変数の中を見るのはずっとずっと以前からの疑問でした。

これからのデバック作業がとても楽になります。

ありがとうございました。

http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E3%82%B9%E3%83%8...

勉強になります。

2011/04/15 11:12:52

その他の回答2件)

id:asuka645 No.1

回答回数856ベストアンサー獲得回数97

ポイント5pt

以下のようにしてはいかがでしょう。


<?php
ob_start();
var_dump($structure);
$outstr = ob_get_contents();
ob_end_clean();
file_put_contents('php://stdout', $outstr);
?>
id:seadwell

すみません。

file_put_contents('php://stdout', $outstr);

の部分が良くわからないのですが、

'php://stdout'

を指定するとどういう動きになるのですか?


教えていただいたコードを関数にし、$structureを引数に渡し動かしてみますが何もおきません。

よろしくお願いします。

2011/04/14 21:50:33
id:pretaroe No.2

回答回数531ベストアンサー獲得回数75

ポイント5pt

var_dumpを使ってみては?

http://php.plus-server.net/function.var-dump.html

id:seadwell

var_dumpをどのように使えばいいのですか?

すいません。

いままで他の回答も含め、ご紹介いただいた関数はあらかたわかります。

しかし、どうやれば吐き出せるのか?イメージがわきません。

どなたか、その辺も含めよろしくお願いします。

2011/04/14 21:51:29
id:bayan No.3

回答回数100ベストアンサー獲得回数13ここでベストアンサー

ポイント70pt

print_r() は、第二引数に true をセットすると、

出力しないで結果を取得できます。


$dataの内容をファイル出力できたのであれば、

file_put_contents() の第1引数にそのファイルのパスを

指定して、そこに書き込めると思います。


<?php
require_once "Mail/mimeDecode.php";
$data = file_get_contents("php://stdin");

// メールをデコードする
$decoder = new Mail_mimeDecode($data);

$structure = $decoder->decode(array(
  'include_bodies'	=> true,
  'decode_bodies'	 => true,
  'decode_headers'	=> true,
));

$outstr = print_r($structure, true);
file_put_contents('そのファイルのパス', $outstr);
?>

1番の方の回答も、file_put_contents() に 'php://stdout' じゃなくて、

出力したいファイルのパスを渡せば、目的は達成できると思います。


'php://stdout' は標準出力なので、file_put_contents('php://stdout', $outstr); は

echo $outstr; と同じことですかね。

メール振り分け時は行き場がなくて捨てられちゃう?

(サーバーのmaillogには出てるかもしれませんが)


コマンドラインから実行すれば画面に出てくるでしょう。


例えば $data の内容をファイルに保存しておき、サーバーに ssh 等でログインして、

以下を実行するとか。

cat '$dataの内容を保存したファイル名' | php postmail.php




http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E3%82%B9%E3%83%8...

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

id:seadwell

できました!

かゆい所に手が届く回答でとても助かりました。

バックグラウンドで稼働するプログラムの変数の中を見るのはずっとずっと以前からの疑問でした。

これからのデバック作業がとても楽になります。

ありがとうございました。

http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E3%82%B9%E3%83%8...

勉強になります。

2011/04/15 11:12:52

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

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

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

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

回答リクエストを送信したユーザーはいません