Installation der PHP-Erweiterung mbstring in PHP 5.6 CentOS 6.8

11512
Sadee

Ich verwende PHP 5.6 auf meinem Server centos-release-6-8.el6.centos.12.3.x86_64.

Ich habe folgende Fehlermeldung von einer meiner PHP-Funktionen erhalten.

Fatal error: Call to undefined function mb_detect_encoding() 

Also habe ich versucht, die MBstring-Erweiterung zu installieren. wenn ich ausführen

sudo yum install php-mbstring 

CLI kehrt zurück

Package php-mbstring-5.6.25-1.el6.remi.x86_64 already installed and latest version Nothing to do 

Und ich habe auch versucht "sudo yum install php56-mbstring" Dies gibt zurück

No package php56-mbstring available. Nothing to do 

Aber trotzdem gibt mir die PHP-Funktion diesen Fehler und es gibt kein "Mbsting" in phpinfo ().

Die folgende Zeile füge ich der httpd.conf hinzu

LoadModule php5_module modules/libphp5.so 

Server neu gestartet

Aktualisieren:

[~]# php -v PHP 5.6.22 (cli) (built: Jun 13 2016 11:43:51)  Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies [~]# php -m | grep mbstring [~]# php -i | grep mbstring 

Nichts kehrt zu php -m | zurück grep mbstring & php -i | grep mbstring

[~]# rpm -qil php-mbstring Name : php-mbstring Relocations: (not relocatable) Version : 5.6.25 Vendor: Remi Collet Release : 1.el6.remi Build Date: Wed 31 Aug 2016 18:33:05 BST Install Date: Mon 05 Sep 2016 16:26:05 BST Build Host: builder.remirepo.net Group : Development/Languages Source RPM: php-5.6.25-1.el6.remi.src.rpm Size : 2856446 License: PHP and LGPLv2 and BSD and OpenLDAP Packager : http://blog.remirepo.net/ URL : http://www.php.net/ /etc/php-zts.d/20-mbstring.ini /etc/php.d/20-mbstring.ini /usr/lib64/php-zts/modules/mbstring.so /usr/lib64/php/modules/mbstring.so /usr/share/doc/php-mbstring-5.6.25 /usr/share/doc/php-mbstring-5.6.25/libmbfl_LICENSE /usr/share/doc/php-mbstring-5.6.25/oniguruma_COPYING /usr/share/doc/php-mbstring-5.6.25/ucgendat_LICENSE  [~]# rpm -qa 'php*' php-pecl-zip-1.13.4-1.el6.remi.5.6.x86_64 php-pecl-jsonc-1.3.10-1.el6.remi.5.6.x86_64 php-mbstring-5.6.25-1.el6.remi.x86_64 php-common-5.6.25-1.el6.remi.x86_64 
0
Es wäre nützlich, die Frage zu bearbeiten, um die Ausgabe von `php -v`,` php -m | grep mbstring` und `php -i | grep mbstring`. Anthony Geoghegan vor 7 Jahren 0
@AnthonyGeoghegan: Mit den Ergebnissen aktualisiert Sadee vor 7 Jahren 0
Interessant. Haben Sie ein Repo eines Drittanbieters für die Installation von PHP 5.6 konfiguriert? Ich würde auch die Ausgabe von `rpm -qa 'php *'` zur Frage hinzufügen. Es kann sich auch lohnen, die Ausgabe `rpm -qil php-mbstring` auf ungewöhnliche Dinge zu überprüfen. Anthony Geoghegan vor 7 Jahren 0
@AnthonyGeoghegan: Ich habe das Ergebnis aktualisiert. Es gibt mbsting.so in /usr/lib64/php-zts/modules/mbstring.so /usr/lib64/php/modules/mbstring.so. Aber mein Erweiterungspfad lautet: / usr / local / lib / php / extensions / no -debug-non-zts-20131226 Und außerdem: Ich habe PHP 5.3 auf 5.6 aktualisiert Sadee vor 7 Jahren 0
Ausgabe von 'rpm -qa' php * '`? Anthony Geoghegan vor 7 Jahren 0
@AnthonyGeoghegan: Aktualisiert mit dem Ergebnis von rpm -qa 'php *' Sadee vor 7 Jahren 0
Ich dachte, auf Ihrem System könnten verschiedene PHP-Versionen installiert sein, aber das ist nicht der Fall. Die einzige andere Sache, die mir einfällt, ist die Überprüfung des Inhalts von `/ etc / php.d / 20-mbstring.ini`, um sicherzustellen, dass die Datei` extension = mbstring.so` enthält. Anthony Geoghegan vor 7 Jahren 0
@AnthonyGeoghegan: Ja, es gibt "extension = mbstring.so". Ich konnte aber keine andere PHP-Version finden. Ist dies ein Problem, wie ich es bereits erwähnt habe, ist mein Erweiterungspfad "/ usr / local / lib / php / extensions / no-debug-non-zts-20131226". Es gibt aber keine mbstring.so. Sadee vor 7 Jahren 0
@AnthonyGeoghegan:: O `rpm -ql php` gibt 'Paket PHP nicht installiert' zurück Sadee vor 7 Jahren 0
Dieses Erweiterungsverzeichnis klingt für mich nicht richtig. [edit] die Frage, um die Ausgabe von 'php -i | grep ^ extension_dir' aufzunehmen. Ich denke, es sollte `/ usr / lib64 / php / modules` sein (wenn nicht, sollten Sie herausfinden, in welcher php.ini-Datei sie geändert wurde, nachdem Sie überprüft haben, dass die Ausgabe von 'ls / usr / lib64 / php / modules' enthält `mbstring.so`). Anthony Geoghegan vor 7 Jahren 0
@AnthonyGeoghegan: Ja, es sieht nach einem anormalen Pfad aus. Jedenfalls ist dies der Pfad, der auch in phpinfo () als Pfad für PHP-Erweiterungen angezeigt wird. Und in den `/ usr / lib64 / php / modules 'gibt es eine mbstring.so. Ich habe den Modulpfad geändert und neu gestartet. Dann gab PDO nicht aus meiner PHP-Funktion heraus. Und noch immer gibt es keinen mbstring in phpinfo (). Dies sieht aus wie eine durcheinandergebrachte Serverkonfiguration. Ich denke, es ist besser, bestehendes PHP auszulöschen und neu zu installieren Sadee vor 7 Jahren 0

1 Antwort auf die Frage

2
Anthony Geoghegan

Durch die Installation von PHP-Erweiterungen / -Modulen über RPM werden die Bibliotheksdateien in installiert /usr/lib64/php/modules/. Running php -i |grep ^extension_dirzeigt das aktuell konfigurierte Erweiterungsverzeichnis.

Ein Erweiterungsverzeichnis von /usr/local/lib/php/extensions/no-debug-non-zts-20131226gibt an, dass PHP zu einem früheren Zeitpunkt von der Quelle installiert wurde und dass php.iniderzeit eine Datei verwendet wird, die sich auf diese Quellinstallation bezieht, anstatt der /etc/php.inivom php-commonPaket bereitgestellten.

Um dieses Problem zu beheben, sollten Sie die Reste dieser Quellinstallation entfernen. Leider enthält das mit PHP-Quellcode gelieferte Makefile kein uninstallZiel, sodass Sie es nicht einfach ausführen können make uninstall. Ich würde vorschlagen, den findBefehl zu verwenden, um diese Dateien nach ihrem Änderungsdatum aufzuspüren.

Ich freue mich sehr über Ihre Zeit und Ihren Einsatz. Alle diese Konfigurationen wurden jedoch über EazyApache ausgeführt. (Ich habe das nach all diesen Versuchen erfahren.) Es gibt einige ungewöhnliche Änderungen (eher direkt auf dem Server), da EazyApache installiert / aktualisiert wird. Also müssen Sie EazyApache folgen, um neue Module zu installieren. Ref: https://forums.cpanel.net/threads/enable-install-mbstring-module.158165/ Sadee vor 7 Jahren 0
@Sadee Das tut weh! Die Tatsache, dass EazyApache auf dem Server installiert wurde, war eine wichtige Information. Wenn Sie diese wichtige Tatsache in der Frage erwähnt hätten, hätten wir uns nicht so viel Mühe beim Debuggen geben müssen. Sollte ich nicht dafür einen guten Ruf bekommen, wenn ich die ganze Zeit mit Ihrer Frage verbringe? Jetzt weiß ich, warum cPanel-Fragen von [sf] verboten wurden. :( Anthony Geoghegan vor 7 Jahren 0