2010-11-17 8 views
7

Ich habe diese Gewohnheit kompilierte PHP (v5.3.3) mit den folgenden Erweiterungen aktiviert (über configure):PHP: Call to undefined function mb_strlen() - auf kundenspezifischen kompilierte PHP mit mbstring aktiviert

./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() eindeutig fest, dass mbstring aktiviert ist: alt text

Lustige Sache ist, wenn ich versuchen, einige PHP-Skripte (SugarCRM-Updates) ausführen, meldet es die folgende Fehlermeldung:

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

Kann jemand etwas Licht in WARUM, was passiert, und wie man das beheben?

Danke, m^e

+0

Welche Version von pclzip benutzen Sie? Ich kann keine Verwendung von mb_strlen() in der Quelle irgendwo in den letzten drei Versionen finden –

+0

Es könnte möglicherweise ein Problem mit der Lastverteilung, die Ihre Server verwenden. Haben Sie mehr als einen Server?Ich hatte ein ähnliches Problem mit dem cURL in PHP. – Enthusiast

+0

@Mark: Der Kommentarabschnitt sagt PhpConcept Library - Zip Module 2.4. Und Zeile 4165 meiner Version (eine, die mit SugarCRM 6.0.0 kommt) enthält eine mb_strlen(). Der Code lautet: if (mb_strlen ($ v_binary_data, 'iso-8859-1')! = 18). –

Antwort

0

diesen phpinfo Put() in einer einig PHP-Datei für die Ausgabe. Und suchen Sie nach MbString separate Box dort, wenn es nicht vorhanden ist, dann ist es nicht richtig installiert.

+0

Hallo Sai: Bitte sehen Sie meine Frage. Ich habe bereits einen Screenshot des Abschnitts mbstring() von phpinfo() angehängt ... Von der Ausgabe gibt es keine Frage, dass sie nicht richtig installiert wird. –

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

versuchen

  • configure erneut mit --enable-mbstring nur

  • grep mb_strlen $PATH_TO_YOUR_PHP_BINARY zu sehen ist

+0

Meine Version ist PHP 5.3.3. Und wie Sie aus meinen Konfigurationsoptionen sehen können, sind alle mb_string-bezogenen Optionen aktiviert. Ich habe früher mit nur der Mbstring-Option versucht - aber gleiche Ergebnisse !! :( –

+0

Eine Frage, obwohl .. Werden mb_strlen Ausbeute Ergebnisse bei allen grep? Ist es eine Funktion in der mbstring Bibliothek wird nicht zugelassen. Wie wird das in grep aufdrehen? –

+0

Wenn die Funktion nicht in PHP-Binary kompiliert, es Rückkehr 0 Matches – ajreal

0

Einfache Lösung existieren.

Stattdessen mb_strlen() nur strlen() verwenden.

Für mich funktionierte es ein paar Mal.

+1

Ich fürchte, das wird dem OP nicht helfen, da strlen() nicht immer die richtige Wahl ist. Wenn er Anwendung HTML-Sonderzeichen verwendet, Strlen möglicherweise die Zeichenfolge falsch, da strlen() couts die Bytes, wenn also ein Multibyte-Zeichen zeigt, wird es früher geschnitten als erwartet. – Kao

+0

Es ist wichtig, die Kodierung zu übergeben, weil einige UTF-8 Zeichen in 2 Bissen gespeichert sind - strlen erzeugt in einigen Fällen nicht die gleiche Ausgabe wie mb_strlen –

2

Auf meinem Windows-System mit PHP und Apache, hatte ich die php.ini-Datei zu ändern, so dass es die folgende Zeile enthält:

extension=php_mbstring.dll 

(innerhalb des Haupt [PHP] Abschnitt), und starten Sie Apache. Danach war der Anruf zu mb_strlen erfolgreich.

+1

Entschuldigung, ich habe gerade festgestellt, dass es aufgrund eines Fehlers passiert ist. Ich versuche es zurückzugeben, ich konnte es nicht. Entschuldigung. –

+0

@MubasharAhmad Ich habe meinen Text bearbeitet. Wahrscheinlich können Sie jetzt zurückkehren. –

0

Ich hatte das gleiche Problem, das ist ein Problem mit PHP-Version.

ersten Lauf

sudo apt install php-mbstring 

zu installieren, um die neueste installierte Version von PHP mbstring

dann laufen:

sudo apt-get dist-upgrade 

und starten Sie Apache mit

sudo /etc/init.d/apache2 restart 

Viel Glück