2011-03-23 76 views
12

有沒有人在運行MAMP時有iconv_strlen函數的問題?iconv_strlen函數導致執行超時,在MAMP上運行

+0

字符串如何存儲在PHP中?用'\ 0'或者他們攜帶一個長度? – alex 2011-03-23 02:24:47

+1

它們以字節爲單位,但沒有編碼。 ['iconv_strlen'](http://us2.php.net/manual/en/function.iconv-strlen.php)通過字符編碼轉換字符串,然後返回*字符*計數,而不是字節長度。 – Charles 2011-03-23 02:59:59

+0

@ blacktie24,你能否給我們提供一個導致問題的示例字符串?通過'rawurlencode'運行後,您可以放心地發佈它,以確保獲得實際正確的字節。 (我已經重新發布了你的帖子。) – Charles 2011-03-23 03:01:19

回答

16

我一直有一個超時問題,但沒有任何異常被拋出。我正在開發一個Zend Framework網站。通過深入研究調試器,我將問題追溯到iconv_strlen的使用。它不會被任何奇怪的字符串調用,它是一個用於驗證主機名的簡單函數。

爲了驗證問題,我嘗試了一個簡單的iconv_strlen(「test」,'UTF-8');這會導致錯誤出現 - 瀏覽器中的無限旋轉加載器,但沒有錯誤日誌消息,並且腳本超出了最大執行時間。看來這是這個版本的PHP中未被捕獲的大事。

我的同事發現這篇文章可能解決這個問題。我在一臺Mac OS X機器上升級到最新的Snow Leopard,它是10.6。看起來,這是一個已知的錯誤,如果您構建自己的php或使用內置Apple版本或使用端口,則有一種解決方法。

長話短說,你可以深入到上述補丁重新編譯自己的PHP,但這種失敗的MAMP的擺在首位的點。

最快的解決方案是簡單地不要使用iconv_strlen()(或任何iconv_函數) - 如果您使用Zend Framework,這不是一個選項 - 否則還原MAMP以使用PHP 5.2。

直到MAMP開始包含php源文件並提供一種方法來輕鬆地重新編譯與所有必要的庫捆綁在一起的php,這將是必然的限制。 MAMP很好,直到你到了需要重新編譯php的地步。當發生這種情況時,簡單地使用端口就容易得多。

+0

user673450,這是我遇到的確切問題。 Thx提供潛在解決方法的信息。 – blacktie24 2011-03-23 19:36:43

+0

我與iconv_strpos有同樣的問題,但只在5.3.5。它在我的另一臺機器上運行5.3.2 ....所以這怎麼可能? – spankmaster79 2011-04-06 15:32:50

+0

謝謝。很高興知道我不會發瘋。這對我在Mamp Pro 2.0.1中仍然是個問題。 – Steve 2011-08-02 07:48:04

0

wbond,你有點混淆起來。 MAMP 1.9.4工作100%。它是從1.9.5到2.0.1的任何版本的MAMP,其中包含「iconv」問題。另外,我在MAMP 2.0.1的PHP 5.3.6中測試了你的解決方案,但它不起作用。唯一的解決辦法是回滾到MAMP 1.9.4或使用最新的MAMP,但將PHP回滾到5.2.x.

<?php 

$str = 'Hello, world!'; 
$str = iconv_function('UTF-8', 'UTF-8//IGNORE', $str); 
echo $str; 

function iconv_function ($in_charset, $out_charset, $str) { 
    return iconv($in_charset, $out_charset, $str); 
} 

?> 
1

在任何人的情況下仍然有這個問題,我奮鬥了這個年齡,但升級到OSX獅子MAMP臨的最新版本似乎爲我工作。

+0

我有Mamp臨2.0.1和PHP5.3仍然打破 – Steve 2011-08-02 07:45:38

+3

問題是在MAMP 2.0.2中修復的。 – Zifius 2011-08-23 10:26:22