前回の質問の続きです。

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回まで
  • 13歳以上
  • 登録:2011/04/14 18:50:45
  • 終了:2011/04/15 20:30:36

ベストアンサー

id:bayan No.3

bayan回答回数100ベストアンサー獲得回数132011/04/15 00:13:19

ポイント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ベストアンサー獲得回数972011/04/14 19:16:07

ポイント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

pretaroe回答回数531ベストアンサー獲得回数752011/04/14 20:48:45

ポイント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

bayan回答回数100ベストアンサー獲得回数132011/04/15 00:13:19ここでベストアンサー

ポイント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

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

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

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

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

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