2012-06-24 115 views
1

我沒有在網上找到任何東西,我不知道爲什麼:調用上FILTER_VALIDATE_EMAIL「連接被重置」用PHP

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\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~][email protected](?:(?:(?:[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\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~][email protected](?:(?:(?:[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); 
} 

我做在此處獲取「驗證後」的輸出。 另外地址是一個非常容易的「[email protected]」地址,所以它甚至是有效的。

好的另一個編輯:我做了一個只運行這個函數的oneliner,並在控制檯上執行它。這是輸出:

/libexec/ld-elf.so.1: /usr/local/lib/php/20090626/filter.so: Undefined symbol "php_pcre_exec" 

我把這個交給服務器管理員。從我在谷歌上發現的,一個簡單的更新可以解決它,但我將不得不等待他的答案。如果問題解決了,我會在這裏註明。在此之前,這將不得不休息,因爲我無法解決這樣的系統深層錯誤。

+1

而如果沒有這條線工作的?請告訴我們其餘的代碼。這聽起來不太可能。 –

+0

如果調用Joomla代碼,但使用某些die(),則會發生此問題;在函數之前和之後,我追查下來。我會在你的原始問題中準確地發佈你的意願和不會死的事情。 – javex

回答

0

在這個suhosin總結他們談論使用該標誌時修復段錯誤,這是一個opensuse報告,但它可能是你的安裝易受它影響。您可能需要確保suhosin補丁至少與opensuse的0.17.1版本相對應。問題是我在suhosin的官方changelog上找不到它。 freebsd在這種情況下從哪裏獲取端口源?

  • 星期二2010年10月26日[email protected]
    • 修復 「段錯誤在filter_var與FILTER_VALIDATE_EMAIL與 大量數據的」[BNC#649210]
    • CVE-2010-3710.patch
+0

謝謝,這可能實際上是相關的。看到我上面的編輯,也許這正是問題修復。由於我不是FreeBSD用戶,所以我無法準確回答你的問題,但問題文件是由php5-filter-5.3.13安裝的,是pkg_info狀態。 – javex

+0

好吧,請讓我們知道,如果你解決這個問題,你永遠不知道什麼時候可能對別人有幫助。 :) –

+0

是的,我當然不會遇到你。 – javex