2011-03-23 11 views
12

¿Alguien ha tenido problemas con la función iconv_strlen mientras ejecuta MAMP?función iconv_strlen que causa el tiempo de espera de ejecución, ejecutándose en MAMP

+0

¿Cómo se almacenan las cadenas en PHP? ¿Con un '\ 0' o llevan una longitud? – alex

+1

Tienen una longitud en bytes, pero no hay codificación. ['iconv_strlen'] (http://us2.php.net/manual/en/function.iconv-strlen.php) convierte la cadena en codificaciones de caracteres y luego devuelve el recuento de * caracteres *, a diferencia de la longitud del byte. – Charles

+0

@ blacktie24, ¿podría proporcionarnos una cadena de muestra que cause problemas? Puede publicarlo de forma segura aquí después de ejecutarlo a través de 'rawurlencode' para asegurarse de obtener los bytes correctos reales. (He vuelto a marcar su publicación.) – Charles

Respuesta

16

He estado teniendo un problema de tiempo de espera con él, pero no con ninguna excepción lanzada. Estoy trabajando en un sitio de Zend Framework. Al seguir el depurador profundamente en las agallas, rastreé el problema hasta el uso de iconv_strlen. No está siendo invocado en ninguna cadena extraña, es una función simple que se utiliza para validar un nombre de host.

Para verificar el problema, intenté con un simple iconv_strlen ("prueba", "UTF-8"); Esto hace que surja un error: un cargador infinito en el navegador pero ningún mensaje de registro de errores, y el script va más allá del tiempo máximo de ejecución. Parece que esto es un gran problema en esta versión de PHP.

Mi colega encontró este artículo que podría resolver el problema. Estoy en una máquina Mac OS X actualizada con la última versión de Snow Leopard, que es 10.6. Parece que se trata de un error conocido y hay una solución si construyes tu propio php o utilizas la versión de Apple integrada o usas puertos.

Para resumir, se puede profundizar en su propio recompilar PHP con el parche anterior, pero este tipo de derrotas el punto de MAMP en el primer lugar.

La solución más rápida es simplemente o nunca usar iconv_strlen() (o cualquiera de las funciones iconv_) - y esta no es una opción si usa Zend Framework - o revertir MAMP para usar php 5.2.

Hasta que MAMP comience a incluir archivos fuente php y proporcione un método por el cual recompilar fácilmente el php incluido con todas las bibliotecas necesarias, esto será necesariamente una limitación del paquete. MAMP funciona muy bien hasta que llegas al punto donde necesitas recompilar php. Cuando eso sucede, es mucho más fácil simplemente usar puertos.

+0

user673450, este es el problema exacto que estoy teniendo. Thx para la información sobre posibles soluciones. – blacktie24

+0

Tengo el mismo problema con iconv_strpos pero solo en 5.3.5. Funciona en mi otra máquina con 5.3.2 ... entonces, ¿cómo puede ser esto? – spankmaster79

+0

gracias. genial saber que no me estoy volviendo loco esto sigue siendo un problema para mí en Mamp Pro 2.0.1. – Steve

0

wbond, lo tienes un poco mezclado. MAMP 1.9.4 funciona 100% bien. Es cualquier versión de MAMP de 1.9.5 a 2.0.1 que contiene el problema "iconv". Además, probé tu solución en PHP 5.3.6 en MAMP 2.0.1 y no funciona. La única solución es retrotraer a MAMP 1.9.4 o utilizar el último MAMP, pero volver a pasar PHP a 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

En caso de que alguien sigue teniendo este problema, luché para las edades con esto, pero la actualización a la última versión de MAMP Pro en OSX Lion parecía funcionar para mí.

+0

Tengo Mamp Pro 2.0.1 y PHP5.3 todavía está roto – Steve

+3

Se corrigió el problema en MAMP 2.0.2 – Zifius

Cuestiones relacionadas