$ html_partで定義された電子メールの生のhhtml本文を検索する一連のif文があります。これは電子メールのcid:text <img src="cid:[email protected]">
を実際のイメージへの相対的なハイパーリンクに置き換えます保存されました。一連のif文が正しく機能していない
電子メールのhtml本文に.jpgイメージのみが含まれていると、image001.jpg、image002.jpg、image003.jpgなどのように連続して番号が付けられます。最初に.png画像を作成した後、それに続く2つの.jpg画像を作成すると、image001.png、image002.jpg、image003.jpgになります。 しかし、現時点では、私は3つの.jpg画像のみで電子メールでテストしていますが、順番ではなく最初の一致した画像ですべての電子メールのcid部分を置き換えます。これで置き換えられるイメージは、ディレクトリ内にあります。これにはサイドスクリプトがあり、自動的にこれが実行されます。電子メールからすべてのイメージを抽出し、フォルダに配置します。
if文には何が問題なのですが、それに応じて置き換えられないのはなぜですか?
/***************************** 1st image in email**********************************/
if (preg_match('/cid:([^"@]*).(png|jpg|gif|bmp)@([^"]*)/', $html_part, $m)){
$find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';
if ($m[2] == 'png') $replace = $png1;
if ($m[2] == 'jpg') $replace = $jpg1;
if ($m[2] == 'gif') $replace = $gif1;
if ($m[2] == 'bmp') $replace = $bmp1;
$html_part = preg_replace($find, $replace, $html_part);
}
if (preg_match('/cid:([^"@]*).(png|jpg|gif|bmp)@([^"]*)/', $html_part, $m)){
$find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';
if ($m[2] == 'png') $replace = $png2;
if ($m[2] == 'jpg') $replace = $jpg2;
if ($m[2] == 'gif') $replace = $gif2;
if ($m[2] == 'bmp') $replace = $bmp2;
$html_part = preg_replace($find, $replace, $html_part);
}
/***************************** 3rd image in email**********************************/
if (preg_match('/cid:([^"@]*).(png|jpg|gif|bmp)@([^"]*)/', $html_part, $m)){
$find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';
if ($m[2] == 'png') $replace = $png3;
if ($m[2] == 'jpg') $replace = $jpg3;
if ($m[2] == 'gif') $replace = $gif3;
if ($m[2] == 'bmp') $replace = $bmp3;
$html_part = preg_replace($find, $replace, $html_part);
}
は(多分あなたの入力ケースが落ちている**最初に**以下の制約条件を入れて、最も限定的なものを継続より制限的であるため、第1の条件の範囲内で)。また、** if/else **ロジック(ifsだけでなく)、** switch/case ** – Kani
を使用してみてください。2番目(3番目)のpreg_matchが、最初の(そして2番目の)preg_replace? – huelbois
@huelboisそれは私も同様に考えています。** Kani **私はelse文も使用しましたが、それでも同じ結果が得られます。 – Tower