php5.3.3でeregをループ内で使用すると
php5.3.3でeregをループ内で使用すると動作がとまり、エラーログにも何も出力されません。
10回目のループでなぜか動作がとまるようです。
$mail="";
$fp=fopen("php://stdin", "r");
while(!feof($fp))
$mail.=fread($fp, 10240);
fclose($fp);
$MailArray = explode("\n", $mail);
$Counter = 0;
$InputCheck = new InputCheck();
for ($i = 0; $i < count($MailArray); $i++){
if (strpos($MailArray[$i], "From: ") === 0){
$From = str_replace("From: ", "", $MailArray[$i]);
$From = ereg_replace(">.*$", "", $From);
$From = ereg_replace("^.*<", "", $From);
$From = ereg_replace("\r", NULL, $From);
if(!$InputCheck->isRightEMail($From)){
$i++;
$From = str_replace("From: ", "", $MailArray[$i]);
$From = ereg_replace(">.*$", "", $From);
$From = ereg_replace("^.*<", "", $From);
$From = ereg_replace("\r", NULL, $From);
}
}
else if (strpos($MailArray[$i], "To: ") === 0){
$To = str_replace("To: ", "", $MailArray[$i]);
$To = ereg_replace(">.*$", "", $To);
$To = ereg_replace("^.*<", "", $To);
$To = ereg_replace("\r", NULL, $To);
if(!$InputCheck->isRightEMail($To)){
$i++;
$To = str_replace("To: ", "", $MailArray[$i]);
$To = ereg_replace(">.*$", "", $To);
$To = ereg_replace("^.*<", "", $To);
$To = ereg_replace("\r", NULL, $To);
}
}
}
上記は空メールされたfromとtoを取得するものです。
eregをpregに変えれば問題なく動作します。
5.3以降からeregは非推奨になりましたが、使用することはできるようですが、ループ内で使用するとなぜか動作がそこでストップします。
非推奨の関数を使用すると動作が止まりエラーログにも出力されないことはよくあるのでしょうか?
エラーログに出力されなかったため原因を特定するのに苦労しました。
eregなどの非推奨関数を使用した場合の不具合に関してご教示頂けると幸いです。
宜しくお願いいたします。
補足
回答ありがとうございます。 参考URL拝見させてもらいました。 replace で文字を置きかえれるかどうか というのが私の問題だったのです。 それとも置換もREGEXPで行えるということなのでしょうか??