私はpreg_replace_callbackを使用して、送信メールの特定のURLにパラメータを追加しています。pcre.trackback limit php preg_replace_callback()
プロセスは、データベースからの電子メールテンプレートをアップロードし、同じデータベースからユーザーのリストを引っ張って、その後、この関数を使用して電子メールの本文を渡すことによって動作します。
function add_user_login($body, $user_id, $user_hash) {
ini_set('pcre.backtrack_limit',1000000000);
$return_string = preg_replace_callback('@(https?://([-\w\.]+)+mydomain.com([^"]*))@', function ($matches) use ($user_id, $user_hash) {
if (strpos($matches[0], "?") === false) {
return $matches[0] . "?user_id=" . $user_id . "&user_hash=" . $user_hash;
} else {
return $matches[0] . "&user_id=" . $user_id . "&user_hash=" . $user_hash;
}
}, $body);
return $return_string;
}
目標が持つことは何もあり"www.mydomain.com"または "mydomain.com"では、GETパラメータ "user_id"と "user_hash"が追加されます。残念ながら、既存のGETパラメータなどが存在していない可能性もありますが、これはこれまでに見つけた最良の方法でした。
私の問題は、何らかの理由でテストでbacktrack_limitエラーが発生し、backtrack_limitを増やさなければならないということです。これはテストでは機能しましたが、それは非常に遅いです。
他に誰かが同様のことをしましたか?正規表現を変更しようとしましたが、バックトラックの問題はワイルドカードの使用に起因していると思いますが、変更しても機能しなくなりました。
ちょうど交換を参照してください([ - \ W \。] +)+' 'と - +'して、再試行してください[W \。]。 –