有没有人在运行MAMP时有iconv_strlen函数的问题?iconv_strlen函数导致执行超时,在MAMP上运行
回答
我一直有一个超时问题,但没有任何异常被抛出。我正在开发一个Zend Framework网站。通过深入研究调试器,我将问题追溯到iconv_strlen的使用。它不会被任何奇怪的字符串调用,它是一个用于验证主机名的简单函数。
为了验证问题,我尝试了一个简单的iconv_strlen(“test”,'UTF-8');这会导致错误出现 - 浏览器中的无限旋转加载器,但没有错误日志消息,并且脚本超出了最大执行时间。看来这是这个版本的PHP中未被捕获的大事。
我的同事发现这篇文章可能解决这个问题。我在一台Mac OS X机器上升级到最新的Snow Leopard,它是10.6。看起来,这是一个已知的错误,如果您构建自己的php或使用内置Apple版本或使用端口,则有一种解决方法。
- Bug #49267 Linking fails for iconv: "Undefined symbols: _libiconv"
- PHP 5.3.0 on Mac OS 10.6 (Snow Leopard) - Fabien Potencier; 05 Nov 2009
长话短说,你可以深入到上述补丁重新编译自己的PHP,但这种失败的MAMP的摆在首位的点。
最快的解决方案是简单地不要使用iconv_strlen()(或任何iconv_函数) - 如果您使用Zend Framework,这不是一个选项 - 否则还原MAMP以使用PHP 5.2。
直到MAMP开始包含php源文件并提供一种方法来轻松地重新编译与所有必要的库捆绑在一起的php,这将是必然的限制。 MAMP很好,直到你到了需要重新编译php的地步。当发生这种情况时,简单地使用端口就容易得多。
user673450,这是我遇到的确切问题。 Thx提供潜在解决方法的信息。 – blacktie24 2011-03-23 19:36:43
我与iconv_strpos有同样的问题,但只在5.3.5。它在我的另一台机器上运行5.3.2 ....所以这怎么可能? – spankmaster79 2011-04-06 15:32:50
谢谢。很高兴知道我不会发疯。这对我在Mamp Pro 2.0.1中仍然是个问题。 – Steve 2011-08-02 07:48:04
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. 在mamp上运行php
- 2. xdebug不在mamp上运行
- 3. 在PHP超时运行PHP函数
- 4. 运行cron.php thows“超出最大执行时间”致命错误
- 5. fwrite函数在酒中运行时导致异常
- 6. 导致运行时崩溃!
- 7. RSA加密导致服务器执行超时
- 8. 删除行导致锁定超时
- 9. 在MAMP上运行mysql的问题
- 10. OpenCV 2.4.2 imread函数导致运行时错误
- 11. 调用静态成员函数会导致运行时错误
- 12. 程序正在运行,但导致垃圾值执行显示
- 13. 在定时器上运行函数
- 14. 如何停止点击运行超时jquery函数并运行新函数?
- 15. 如果AssemblyCleanup超时,如何导致测试运行错误?
- 16. 在多行上执行表值函数?
- 17. 在很多行上执行函数
- 18. 致命错误:在64行上超过30秒的最大执行时间
- 19. 在运行时更改函数执行代码
- 20. 如何在constexpr函数中执行运行时断言?
- 21. 在第一次运行Greasemonkey脚本时执行函数
- 22. 在运行某个函数之前估计执行时间
- 23. PHP PhantomJS导致408超时响应,如果在之前已经运行的页面重新执行
- 24. 从Oracle SQL * Plus内执行函数时的行为不一致?
- 25. MySQLdb执行超时
- 26. JavaScript执行超时
- 27. ActionMailer执行超时
- 28. 执行c#超时
- 29. 执行SELECT-导致语句
- 30. 存储过程仅在从应用程序运行时导致超时
字符串如何存储在PHP中?用'\ 0'或者他们携带一个长度? – alex 2011-03-23 02:24:47
它们以字节为单位,但没有编码。 ['iconv_strlen'](http://us2.php.net/manual/en/function.iconv-strlen.php)通过字符编码转换字符串,然后返回*字符*计数,而不是字节长度。 – Charles 2011-03-23 02:59:59
@ blacktie24,你能否给我们提供一个导致问题的示例字符串?通过'rawurlencode'运行后,您可以放心地发布它,以确保获得实际正确的字节。 (我已经重新发布了你的帖子。) – Charles 2011-03-23 03:01:19