2009-09-28 29 views
0

我有兩個問題,一個是羅嗦,一個是programmy! 1)我知道PHP報告通知會導致performnace問題(需要時間來報告這些錯誤,並找出它是什麼樣的錯誤),但是如果error_reporting被關閉,這是相同的情況嗎?我想它仍然會降低性能,但不如顯示它的輸出?這是真的?性能:PHP錯誤處理和正則表達式

2)可能有人還幫我把這個:

//Remove characters. Anything apart from a-z(upper and lower case), numbers, periods [.] 
$cleanstring = ereg_replace("[^A-Za-z0-9]^[,]^[.]^[_]^[:]", "", $critvalue); 

在的東西更高效和利用預浸取代而不是額日格替換。我只是嘗試更換功能,但我得到一個未知的修飾符'^'

此外,將很高興獲得一些鏈接,提高性能和調整技巧,你們使用!

感謝所有

+0

下次你應該問兩個單獨的問題。可能有兩個截然不同的答案,以最佳方式解決您的問題,在這種情況下您將無法接受問題。 – soulmerge 2009-09-28 10:51:45

+0

好點,我想我可能會重新提出這個詞的部分,並解釋得很好。 – Abs 2009-09-28 10:55:46

回答

1

1 。)關閉錯誤報告應該會提高性能,錯誤報告過程中消耗大部分時間的部分是輸出錯誤消息或調用自定義錯誤處理程序(我不知道,沒有測量過。他是我的猜測)。

2.)PCRE正則表達式要求你劃定你的RE,看看docs。除此之外,你再看起來有點壞了,我想它的意思是這樣的(更換任何不是字母,數字,逗號,句號,下劃線或空字符串冒號):

preg_replace('/[^A-Za-z0-9,._:]/', '', $string); 
# If you want to support characters in any language (like umlauts in german, 
# for example - öäü), not just the letters a-z, you should use the unicode 
# properties: 
# http://php.net/manual/en/regexp.reference.unicode.php 
preg_replace('/[^\PL\PN,._:]/', '', $string); 
+0

比較你的正則表達式(第一個)和Bart--哪個更快或者都很好,時間差異可以忽略不計?我問巴特同樣的問題。 – Abs 2009-09-28 11:03:40

+0

他們是不一樣的,他的正則表達式不捕獲字符',_:' – soulmerge 2009-09-28 11:24:26

+0

嗯,不是很可讀,讓我們再試一次:他的正則表達式不捕獲逗號,下劃線和冒號 – soulmerge 2009-09-28 11:25:24

1

如果你真的只需要0-9和AZ(不區分大小寫)和期間:

//Remove characters all non-listed characters from string 
$cleanString = preg_replace('/[^a-z0-9.]/i', '', $unCleanString); 

,如果你也想在逗號,下劃線和冒號:

$cleanString = preg_replace('/[^a-z0-9.,_:]/i', '', $unCleanString); 

對於錯誤報告:
這是更快地開關的錯誤報告F。

另一種選擇是嘗試編寫不會生成警告和通知的代碼,而是進行適當的檢查。所以,如果發生一些通知/錯誤,請記錄並修復代碼。
我認爲,在這到底是制勝戰略

+0

最後ereg_replace可以用preg替換完成嗎? – Abs 2009-09-28 10:46:16

+0

無需逃離角色職業的DOT。 – 2009-09-28 10:47:57

+0

你說得對「關閉錯誤報告更快」。但是,PHP是否會放緩,因爲它必須弄清楚這些通知本身? – Abs 2009-09-28 10:50:15

0

的參看preg_功能期待正則表達式來分隔(如Perl的正則表達式-ES):

preg_replace('/[a-zA-Z\d.]++/', '', $str); 
+0

啊我錯過了這個事實! – Abs 2009-09-28 10:51:24

+0

比較你的正則表達式和靈魂融合 - 哪個更快,哪個更好,時間差別可以忽略不計?我問了同樣的問題。 – Abs 2009-09-28 11:04:51

+0

我懷疑時差可以忽略不計。如果你真的想知道:測試它! – 2009-09-28 11:33:24

-2
//Remove characters. Anything apart from a-z(upper and lower case), 
numbers, periods 
preg_replace('/[A-Za-z0-9.]/', '',$string); 

Read more

+0

使用*將匹配(並替換)$ string中的所有空字符串。更好地使用+(或++來使其佔有慾以提高性能)。 – 2009-09-28 10:47:02

+0

隨着克拉(^)這個條件將消除與你期望的完全相反。最好進行編輯。 – scragar 2009-09-28 11:50:12

+0

@scragar - 爲什麼你不在乎把你的答案呢? – TigerTiger 2009-09-28 16:46:34