2010-11-17 18 views
7

He compilado esta PHP personalizado (v5.3.3) con las siguientes extensiones activado (mediante 'configure):PHP: Llamada a mb_strlen función no definida() - en la costumbre compilado PHP con MBStrings habilitado

./configure 
--prefix=/usr/local/php5.3.3 
--with-config-file-path=/usr/local/apache2/conf 
--with-apxs2=/usr/local/apache2/bin/apxs 
--with-bz2 
--with-curl=/usr/lib 
--with-curlwrappers 
--with-freetype-dir=/usr/local 
--with-gd=/usr/local 
--with-gettext 
--with-gmp 
--with-iconv=/usr/local 
--with-imap=/usr/local/imap2007e 
--with-imap-ssl 
--with-jpeg-dir=/usr/local/lib 
--with-kerberos 
--with-libxml-dir=/usr/lib 
--with-mcrypt=/usr/local 
--with-mhash 
--with-mysql=/usr/lib/mysql 
--with-mysql-sock=/var/lib/mysql/mysql.sock 
--with-mysqli=/usr/lib/mysql/mysql_config 
--with-openssl=/usr 
--with-pcre-dir=/usr/local/lib 
--with-pear 
--with-png-dir=/usr/local/lib 
--with-readline 
--with-sqlite 
--with-xmlrpc 
--with-xsl=/usr/local 
--with-zlib-dir=/usr/local/lib 
--with-zlib=/usr/local 
--without-pgsql 
--enable-bcmath 
--enable-calendar 
--enable-exif 
--enable-embedded-mysqli=shared 
--enable-ftp 
--enable-gd-jis-conv 
--enable-gd-native-ttf 
--enable-mbstring=all 
--enable-mbregex 
--enable-shared 
--enable-sockets 
--enable-soap 
--enable-sqlite-utf8 
--enable-zend-multibyte 
--enable-zip 
--disable-pdo 
--disable-phar 

phpinfo() establece claramente que MBStrings está habilitado: alt text

lo curioso es que cuando trato de ejecutar algunos scripts PHP (actualizaciones de SugarCRM), informa del siguiente error:

PHP Fatal error: Call to undefined function mb_strlen() in crm/include/pclzip/pclzip.lib.php on line 4165

¿Alguien puede arrojar algo de luz sobre POR QUÉ está pasando esto y cómo solucionarlo?

Gracias, m^e

+0

¿Qué versión de pclzip estás usando? No puedo encontrar ningún uso de mb_strlen() en el origen en ninguna parte de las últimas tres versiones –

+0

. Es posible que exista un problema con el equilibrio de carga que usan los servidores. ¿Tienes más de un servidor?Me enfrenté a un problema similar con el cURL en PHP. – Enthusiast

+0

@Mark: la sección de comentarios dice PhpConcept Library - Zip Module 2.4. Y la línea 4165 de mi versión (una que viene con SugarCRM 6.0.0) contiene un mb_strlen(). El código es como: if (mb_strlen ($ v_binary_data, 'iso-8859-1')! = 18). –

Respuesta

0

Poner este phpinfo() en un archivo php alguna para la salida. Y busque allí la caja separada MbString, si no está presente, entonces no está instalada correctamente.

+0

Hola Sai: Por favor, mira mi pregunta. Ya he adjuntado una captura de pantalla de la sección mbstring() de phpinfo() ... Desde la salida, no hay dudas de que no se haya instalado correctamente. –

2

For PHP 4.3.3 or before, To enable that feature, you will have to supply either one of the following options to the LANG parameter of --enable-mbstring=LANG ; --enable-mbstring=cn for Simplified Chinese support, --enable-mbstring=tw for Traditional Chinese support, --enable-mbstring=kr for Korean support, --enable-mbstring=ru for Russian support, and --enable-mbstring=ja for Japanese support (default). To enable all supported encoding, use --enable-mbstring=all

tratar

  • configurar de nuevo con --enable-mbstring única

  • grep mb_strlen $PATH_TO_YOUR_PHP_BINARY ver es que existe

+0

Mi versión es PHP 5.3.3. Y como puede ver en mis opciones de configuración, todas las opciones relacionadas con mb_string están habilitadas. Lo intenté anteriormente con la opción mbstring, ¡pero con los mismos resultados! :( –

+0

Una pregunta ... ¿Será grep mb_strlen resultados de rendimiento en absoluto? ¿No se supone que es una función en la biblioteca mbstring. ¿Cómo va a aparecer en grep? –

+0

Si la función no está compilada en PHP binario, se devuelve 0 coincidencias – ajreal

0

solución simple.

En su lugar mb_strlen() solo usa strlen().

Para mí, funcionó algunas veces.

+1

Me temo que esto no ayudará al OP, ya que strlen() no siempre es la elección correcta. si su aplicación está utilizando html caracteres sepciales, strlen podría cortar la cadena equivocada, ya que strlen() controla los bytes, por lo que si aparecen caracteres multibyte, cortará antes de lo esperado. – Kao

+0

Es importante pasar la codificación porque algunos caracteres UTF-8 se guardan en 2 fragmentos, strlen no producirá el mismo resultado que mb_strlen en algunos casos –

2

En mi sistema de Windows con PHP y Apache, tuve que modificar el archivo php.ini para que incluya la siguiente línea:

extension=php_mbstring.dll 

(dentro de la sección principal [PHP]) y reiniciar Apache. Después de eso, la llamada al mb_strlen tuvo éxito.

+1

Lo siento, solo noté un voto negativo por error. Intento revertirlo, no pude. Disculpas –

+0

@MubasharAhmad He editado mi texto. Probablemente ahora puedes revertir. –

0

Tuve el mismo problema, este es un problema con la versión de php.

primera carrera

sudo apt install php-mbstring 

instalar mbstring a la última versión instalada de php

continuación, ejecute:

sudo apt-get dist-upgrade 

y reiniciar Apache con

sudo /etc/init.d/apache2 restart 

Buena suerte

Cuestiones relacionadas