我在网上找不到任何东西,也不知道为什么:打电话
filter_var($address, FILTER_VALIDATE_EMAIL)
导致连接被重置(至少 Firefox 是这样告诉我的)。5.3.13 with Suhosin-Patch
服务器在 FreeBSD 上有 PHP 版本。在我自己的运行 Debian 和 PHP 版本的服务器上测试这个5.3.3
也可以使用 Suhosin 工作正常,尽管我似乎记得它之前确实表现出相同的行为。
PHP 手册表明这是在 PHP 5.2.0 上引入的,所以它应该可以工作,不是吗?
编辑:为了更好地展示失败的原因,我向您展示了两个示例,一个带有重置,另一个带有正确的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"
我把它交给了服务器管理员。从我在谷歌上找到的内容来看,一个简单的更新可以解决它,但我将不得不等待他的回答。如果问题解决了,我会在这里注明。在那之前,这将不得不休息,因为我无法修复这样一个系统深度的错误。