有人在运行MAMP时遇到了iconv_strlen函数的问题吗?
有人在运行MAMP时遇到了iconv_strlen函数的问题吗?
我正在使用Zend Framework网站,出现了超时问题,但没有抛出任何异常。通过深入跟踪调试器,我将问题追踪到iconv_strlen的使用上。它不是在任何奇怪的字符串上调用的,而是一个简单的函数被用于验证主机名。
为了验证这个问题,我尝试了一个简单的iconv_strlen("test", 'UTF-8'); 这导致错误出现 - 浏览器中无限旋转加载器但没有错误日志消息,并且脚本超过了最大执行时间。看起来这是这个版本PHP中未捕获的大bug。
我的同事找到了这篇文章,可能解决了这个问题。我使用最新的Snow Leopard更新了Mac OS X机器,即10.6。看起来这是一个已知的bug,如果你构建自己的php或使用内置的苹果版本或使用端口,则有一种解决方法。
长话短说,您可以深入重新编译自己的php并使用上述补丁,但这有点违背了MAMP的初衷。
最快的解决方案是根本不使用iconv_strlen()(或任何iconv_函数) - 如果使用Zend Framework,则这不是一个选项 - 或将MAMP还原为使用php 5.2。
除非MAMP开始包含PHP源文件并提供一种方法来轻松重新编译与所有必要库捆绑的PHP,否则这将必然成为该软件包的一个限制。MAMP在需要重新编译PHP时会存在问题。当出现这种情况时,最简单的方法是使用端口。
wbond,你有点混淆了。MAMP 1.9.4 完全正常。问题出在从 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);
}
?>
\0
还是带有长度? - alexiconv_strlen
会在字符编码之间转换字符串,然后返回字符计数,而不是字节长度。 - Charlesrawurlencode
运行它后在此安全地发布,以确保我们获得实际的正确字节。(我已重新标记了您的帖子。) - Charles