2011-03-23 73 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