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

【?】あるphpスクリプトの疑問

写メールBBSというスクリプトに関して質問があります。
(配布・参照先:http://php.s3.to/bbs/bbs7.php)
設置し投稿後、パソコンで確認すると本文の後に

<br><br clear="right"><br>

という改行が入る仕様になっています。
この改行部分はスクリプトのどの部分に当たるのでしょうか?
配布先の掲示板は閉鎖してしまったようで場違いかと思いましたが
お力添えをお願い致します。

●質問者: dsa
●カテゴリ:インターネット ウェブ制作
✍キーワード:BBS PHP スクリプト パソコン 仕様
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● ToMmY
●1ポイント

イメージを表示している部分(タグのぶぶん)のようです

たぶん

mailbbs_pc.htmlのここの部分でしょう

[if main/noimg]
添付:{$main/filename}({$main/size}KB)[/if]



{$main/date}

理由はわかりませんが[if :::]から[/if]まで消せば問題ないと思います。

必要な場合はこの部分を直せばいいと思いますが、どこがおかしいのかデバッグできなかったんで勘弁してください。

◎質問者からの返答

ifからifまで消すと改行以外の多くの部分も削られると思うのですが。

改行だけ削りたいのです。


2 ●
●1ポイント

mailbbs.phpの128行目でTemplateファイルを指定しています。

PCで閲覧する場合は、mailbbs.phpの15行目で設定した

$env = "pc";

が有効になるため、

HtmlTemplate::t_include("mailbbs_".$env.".html",$arg);

でt_includeで取り込むファイルはmailbbs_pc.htmlになります。

mailbbs_pc.htmlというファイルの24行目に

<br clear="right"><br><div align="right">{$main/date}</div>

という記述があります。

この部分のことではないでしょうか。

◎質問者からの返答

それがですね



」という部分を削除しUPしても

ソース見るとやっぱり「本文

」と変化が無いんですよね。


3 ●
●36ポイント

実際に動かして確認することが出来ないのでハズレだったら申し訳ありません。

とりあえずソースを見て分かった範囲で説明いたします。

本文はmailbbs.phpでは$bodyという変数で扱われています。

この変数に対する処理は、メールアドレスやURLにハイパーリンクを付与している程度です。

そこで出所を遡っていこうとするとmailbbs.phpの72行目に

 list($id, $ptime, $subject, $from, $body, $att,) = explode("<>", $lines[$i]);

という記述があります。

$linesは31行目で

$lines = file($log);

とあるようにログファイルを行ごとに読み込んだものです。

$logはconfig.phpの13行目で設定されています。

// ログファイルの場所
$log = "./mail.cgi";

そこで、まず確認して欲しいのがmail.cgiの内容です。

この時点で本文の末尾に<br>はありますでしょうか。

ない場合はちょっと対応方法が分かりません…。

この時点で<br>がある場合、受信処理のpop.phpで改行をセットしていることが考えられます。

pop.phpの190行目で

 $line = "$id<>$now<>$subject<>$from<>$text<>$attach<>\n";

として取り込んだ値を、206行目からの

//ログ書き込み
if ($write2) {
 $fp = fopen($log, "w");
 flock($fp, LOCK_EX);
 fputs($fp, implode('', $lines));
 fclose($fp);
}

という部分でファイルに書き込んでいます。

ここで、$linesの<>区切りの5つ目の変数$textが$bodyになっていることが分かります。

つまり、この$textに対する処理を追っていけば良いはずです。

pop.phpの134行目から160行目が$textに対する処理になります。

最終的に$textの最後の改行を削除するために、160行目に以下のような行を追加してみてはいかがでしょうか。

 $text = str_replace("/(<br>)+$", "", $text);

$textの末尾の<br>の繰り返しを削除する置換です。

的外れかもしれませんが、一度確認してみてください。

◎質問者からの返答

2通りやってみましたが駄目でした。



が本文の後に必ず入ります。

[略]

$text = preg_replace("/\n{2,}/", "\n\n", $text);

$text = str_replace("\n", "
", $text);

} $text = str_replace("/(
)+$", "", $text);

-----------------------------------------------------------

[略]

$text = preg_replace("/\n{2,}/", "\n\n", $text);

$text = str_replace("\n", "
", $text);

$text = str_replace("/(
)+$", "", $text);

}


4 ●
●64ポイント ベストアンサー

mail.cgiの本文部分の最後に<br>が2つ含まれていたでしょうか。

取り急ぎ、昨日の回答に誤りがありましたので訂正いたします。

(mail.cgiの本文部分に<br>が含まれている場合には以下の修正で状況が変わる可能性があります。)

 $text = str_replace("/(<br>)+$", "", $text);
 }

ではなく

 $text = preg_replace("/(<br>)+$/", "", $text);
 }

としてみてください。

ご確認よろしくお願いいたします。

◎質問者からの返答

出来ました!

お手数かけて申し訳ございません。

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

関連質問


●質問をもっと探す●



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