Web 上で何も見つからず、理由もわかりません: 電話中
filter_var($address, FILTER_VALIDATE_EMAIL)
接続がリセットされることにつながります(少なくともFirefoxが教えてくれます)。5.3.13 with Suhosin-Patch
サーバーには、FreeBSDの PHP バージョンがあります。5.3.3
Debian と PHP のバージョンを Suhosinで実行している自分のサーバーでこれをテストしても問題なく動作しますが、以前は同じ動作を示していたことを覚えているようです。
PHP のマニュアルには、これが PHP 5.2.0 で導入されたことが示されているので、動作するはずです。
編集:何が失敗したかをよりよく示すために、2つの例を示します。1つはリセットを使用し、もう1つは適切なdie("message");
Before validate
この例では、ブラウザ ウィンドウに次のように出力されます。
if (function_exists('filter_var')) { //Introduced in PHP 5.2
die("Before validate");
if(filter_var($address, FILTER_VALIDATE_EMAIL) === FALSE) {
return false;
} else {
return true;
}
} else {
return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $address);
}
この例は、前述の「接続がリセットされました...」につながります。
if (function_exists('filter_var')) { //Introduced in PHP 5.2
if(filter_var($address, FILTER_VALIDATE_EMAIL) === FALSE) {
die("After validate");
return false;
} else {
die("After validate");
return true;
}
} else {
return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $address);
}
ここでは「検証後」のような出力は得られません。また、アドレスは非常に簡単な「no-reply@domain.com」アドレスであるため、有効です。
別の編集: この関数のみを実行するワンライナーを作成し、コンソールで実行しました。これは出力です:
/libexec/ld-elf.so.1: /usr/local/lib/php/20090626/filter.so: Undefined symbol "php_pcre_exec"
これをサーバー管理者に渡しました。Googleで見つけたものから、簡単な更新で解決できますが、彼の答えを待つ必要があります. 問題が解決した場合は、ここにメモします。このようなシステムに深いエラーを修正することはできないため、それまでは休む必要があります。