我在网上找不到任何内容,我不知道原因:致电
filter_var($address, FILTER_VALIDATE_EMAIL)
导致连接被重置(至少这是Firefox告诉我的)。服务器在FreeBSD上有PHP版本5.3.13 with Suhosin-Patch
。
在我自己的运行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);
}
我不在这里获得类似“After validate”的输出。 地址也是一个非常简单的“no-reply@domain.com”地址,所以它甚至有效。
好的另一个编辑:我让一个oneliner只运行这个函数并在控制台上执行它。这是输出:
/libexec/ld-elf.so.1: /usr/local/lib/php/20090626/filter.so: Undefined symbol "php_pcre_exec"
我把它交给了服务器管理员。从我在谷歌上发现的,一个简单的更新可以解决它,但我将不得不等待他的答案。如果问题解决了,我会在这里注意到这一点。在此之前,这将不得不休息,因为我无法解决这样一个系统深度错误。
答案 0 :(得分:0)