把wordpress從php 5.2(win32)移轉到php 5.3(win64),發生了相容性的問題。
一開始是發生在首頁,但如果指定某些頁面又是正常。經過持續不斷的echo , die之後,
最後問題是在wp/wp-includes/formatting.php這隻檔案裡的wptexturize函數。
php 5.3(win64)一般情況還是可以正常執行的。但若是丟給這隻函數處理的文字內容有個 [ 字元,它的解析過程就直接崩潰,連錯誤訊息也沒有,一點反應都不給。
發生問題的是下列片段。這個在php 5.2(win32)完全正常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $regex = '/(' // Capture the entire match. . '<' // Find start of element. . '(?(?=!--)' // Is this a comment? . '.+?--\s*>' // Find end of comment . '|' . '[^>]+>' // Find end of element . ')' . '|' . '\[' // Find start of shortcode. . '\[?' // Shortcodes may begin with [[ . '(?:' . '[^\[\]<>]' // Shortcodes do not contain other shortcodes. . '|' . '<[^>]+>' // HTML elements permitted. Prevents matching ] before >. . ')++' . '\]' // Find end of shortcode. . '\]?' // Shortcodes may end with ]] . ')/s'; $textarr = preg_split( $regex, $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY ); |
主要是上面數來第10行的 \[? 造成的,拿掉 ? 就正常了。至於為什麼會比對到崩潰,完全無法理解。