pecl installiert für frühere PHP-Versionen

Lesezeit: 8 Minuten

Ich habe mein MacBook auf Mavericks aktualisiert und meine Entwicklungsumgebung ruiniert. Das Problem, das ich gerade habe, ist, dass mein Pear/Pecl immer noch versucht, für meine vorherige (5.3) Version von PHP anstelle von Version 5.4 zu installieren.

PHP-Version:

$ php -v
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

Birne

$ pear version
PEAR Version: 1.9.4
PHP Version: 5.4.17
Zend Engine Version: 2.4.0
Running on: Darwin MBP-retina.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64

Wenn ich apc mit installiere

$ sudo pecl install apc
downloading APC-3.1.13.tgz ...
Starting to download APC-3.1.13.tgz (171,591 bytes)
.....................................done: 171,591 bytes
55 source files, building
running: phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
...
Build process completed successfully
Installing '/usr/local/Cellar/php53/5.3.26/include/php/ext/apc/apc_serializer.h'
Installing '/usr/local/Cellar/php53/5.3.26/lib/php/extensions/no-debug-non-zts-20090626/apc.so'
install ok: channel://pecl.php.net/APC-3.1.13
Extension apc enabled in php.ini

Und aktivieren Sie das apc-Modul in meiner php.ini php -v ändert sich wie folgt:

$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20100525/apc.so' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20100525/apc.so, 9): image not found in Unknown on line 0
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

Also installiert pecl meine apc-Erweiterung in /usr/local/Cellar/php53/5.3.26/lib/php/extensions/no-debug-non-zts-20090626 und php erwartet es in /usr/lib/php/extensions/no-debug-non-zts-20100525/.

Das einfache Erstellen eines Symlinks führt zu folgendem Fehler:

$ php -v
PHP Warning:  PHP Startup: apc: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
 in Unknown on line 0
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

Das ist also keine Lösung.

Kann mich jemand in die richtige Richtung weisen? Ich habe wirklich keine Ahnung, was hier los ist.

Benutzer-Avatar
Layke

In meinem Fall habe ich versucht, Gearman zu installieren.

pecl install gearman würde es falsch installieren.

php -i würde zeigen:

PHP Extension => 20100525

Pecl würde jedoch installieren mit:

PHP Api Version:         20090626

Nachdem ich meine Konfigurationseinstellungen geändert habe, verwenden Sie:

Erster Fix

sudo pecl config-set php_ini /etc/php.ini
sudo pecl config-set php_bin /usr/bin/php5

Ich merkte, dass ich noch bekommen würde

WARNUNG: php_bin /usr/bin/php5 scheint ein Suffix 5 zu haben, aber die Konfigurationsvariable php_suffix stimmt nicht überein

Sie können dies beheben, indem Sie die Konfigurationseinstellung verwenden:

Zusätzliche Korrektur

sudo pear config-set php_suffix 5

Warum war das ein Problem?

Bei mir ist dieses Problem aufgetreten, weil ich ein benutzerdefiniertes PPA hinzugefügt und PHP neu installiert habe. Dies bedeutete, dass meine vorherige Installation von php5-dev nicht synchron war.

Wenn Sie jemals in die gleiche Situation geraten, möchten Sie vielleicht einfach weglaufen.

apt-get remove php5-dev
pecl uninstall <extensionname>
apt-get install php5-dev
apt-get remove php5-pear
apt-get install php5-pear
pecl install <extensionname>

Alternativ können Sie die Quelle herunterladen und phpize ausführen.

  • Danke – das Entfernen und Neuinstallieren von php5-dev hat den Trick für mich getan. Puh.

    – Erwin Wessels

    21. April 2016 um 5:51 Uhr

  • Diese Antwort hat mir sehr geholfen, ein etwas anderes Problem zu lösen

    – Oleg Abrazhaev

    6. November 2016 um 10:38 Uhr

  • Ich verstehe den Mac-Hype nicht. Warum kannst du nicht einfach eine Datei herunterladen und dort einfügen??

    – Kapitän Hypertext

    22. Februar 2017 um 13:52 Uhr

  • Ich musste auch laufen sudo pear config-set php_ini /etc/php.ini — pecl hat anscheinend die Konfiguration von pear unsichtbar verwendet.

    – Ben Klar

    21. April 2018 um 19:39 Uhr

  • Du hast mein Leben gerettet sudo pear config-set php_suffix 7.3 Das ist für mich die beste Lösung.

    – giapnh

    5. März 2020 um 4:41 Uhr


Die Lösung war ziemlich einfach. Ich musste Änderungen an meiner Pecl-Konfiguration vornehmen. Es stellte sich heraus, dass diese beiden Befehle den Zweck erfüllten:

sudo pear config-set php_ini /etc/php.ini
sudo pecl config-set bin_dir /usr/bin/

pecl hat die falsche phpize verwendet. Es gab zwei Versionen von phpize. Dasselbe gilt für meine php.ini-Datei.

  • Oh mein Gott, danke. Ich habe 12 Stunden lang gegen dieses Problem gekämpft und konnte nicht herausfinden, warum pecl nicht für PHP 5.5 erstellt wurde. Das Ausführen dieser beiden Befehle hat das Problem behoben. Du hast mir buchstäblich den Arsch gerettet.

    – atxpunkrock

    8. Januar 2015 um 6:48 Uhr

Benutzer-Avatar
Ben Johnson

Keine der anderen Antworten scheint (noch) darauf abzuzielen, mehrere “co-installierbare” PHP-Versionen zu haben, während eine bestimmte Erweiterung für alle installierten PHP-Versionen erstellt werden soll.

Um das Szenario zu veranschaulichen, in dem ich mich befinde (ich verwende die Ondrej Surý PHP PPAs für Ubuntu 16.04 LTS):

root@localhost:~# ls -lah /usr/bin/*php*
-rwxr-xr-x  1 root   root     11K Apr 19 12:50 dh_php
-rwxr-xr-x  1 root   root    3.1K Apr  5  2016 dh_phpcomposer
-rwxr-xr-x  1 root   root    5.4K Apr  5  2016 dh_phppear
lrwxrwxrwx  1 root   root      21 Jul 24 00:44 php -> /etc/alternatives/php
-rwxr-xr-x  1 root   root    4.3M Jul  6 10:04 php5.6
-rwxr-xr-x  1 root   root    4.3M Jul  6 10:04 php7.0
-rwxr-xr-x  1 root   root    4.4M Aug  4 14:22 php7.1
lrwxrwxrwx  1 root   root      28 Jul 24 00:44 php-config -> /etc/alternatives/php-config
-rwxr-xr-x  1 root   root    4.3K Jul  6 10:03 php-config5.6
-rwxr-xr-x  1 root   root    4.1K Jul  6 10:03 php-config7.0
-rwxr-xr-x  1 root   root    4.1K Aug  4 14:21 php-config7.1
lrwxrwxrwx  1 root   root      24 Jul 24 00:44 phpize -> /etc/alternatives/phpize
-rwxr-xr-x  1 root   root    4.7K Jul  6 10:03 phpize5.6
-rwxr-xr-x  1 root   root    4.6K Jul  6 10:03 phpize7.0
-rwxr-xr-x  1 root   root    4.6K Aug  4 14:21 phpize7.1

pecl install extension-name macht den Job für PHP 7.1, aber nicht die anderen.

Die anderen Antworten weisen darauf hin, dass eine Deinstallation/Neuinstallation zwar möglich ist php*-devwürde ich lieber nicht, angesichts der absichtlich mitinstallierten PHP-Versionen auf dem System.

Eine Lösung besteht darin, die Erweiterung für jede auf dem System vorhandene Version zu erstellen.

Dieses Snippet demonstriert das Erstellen mit PHP 5.6, aber ich habe dasselbe für 7.0 und 7.1 gemacht und die Schritte sind dieselben.

Dieses Beispiel zeigt das Klonen der Erweiterung aus einem Git-Repository, aber man kann jedes Quellverzeichnis verwenden.

(# gibt an, dass Sie root oder use sein müssen sudo)

# apt-get install php-dev

# cd ~

# git clone https://github.com/vendor/extension-name

# cd ./extension-name

# phpize5.6

# ./configure --with-php-config=/usr/bin/php-config5.6

# make clean

# make

# make install

# ln -s /etc/php/5.6/mods-available/extension-name.ini /etc/php/5.6/fpm/conf.d/20-extension-name.ini

# service php5.6-fpm reload

Benutzer-Avatar
Zu groß.

Es gibt eine Möglichkeit, die PHP-Version unter Ubuntu zu wechseln:

sudo update-alternatives --set php /usr/bin/php5.6

und optional:

sudo update-alternatives --set phar /usr/bin/phar5.6
sudo update-alternatives --set phar.phar /usr/bin/phar.phar5.6
sudo update-alternatives --set phpize /usr/bin/phpize5.6
sudo update-alternatives --set php-config /usr/bin/php-config5.6

Quelle: https://superuser.com/a/1100911/371795

Es ist besser, phpize-Erweiterungen neu zu installieren, da sie von PECL verwendet werden und keine Hacks machen.

Als nächstes tun (php 5.5 => php 5.6-Beispiel):

sudo apt-get remove php5-dev
sudo apt-get install php5.6-dev 

(Sie können 5.6 auf die Version ändern, die Sie benötigen)

Dann:

sudo pecl install extensionname

  • Dies ist eigentlich der richtige Weg, um dies zu beheben, anstatt die Konfiguration durcheinander zu bringen, was meistens zu mehr Problemen führt.

    – Vishnu Nair

    30. August 2017 um 10:58 Uhr

Benutzer-Avatar
Shiji.J

Vor kurzem auf ein ähnliches Problem gestoßen.

(Debian, PHP 7.3 gerade installiert, verwendete PHP 7.2)

Wenn jemand die am höchsten bewertete Antwort versucht hat, aber immer noch nicht funktioniert. Hier sind die Schritte zum Debuggen:

  • Entfernen Sie alle anderen PHP-Versionen, insbesondere das Dev-Paket (in meinem Fall php7.2-dev)
  • Installieren Sie das dev-Paket für die aktuelle Version (php7.3-dev)

Und im Grunde ist es das.

Grund:

PECL erfordert phpize, das Teil des php-dev-Pakets ist. Wenn phpize für die aktuelle Version nicht gefunden wird, wird nach der vorherigen Version gesucht, was zu einer älteren PHP-API-Nummer führt

  • Dies ist eigentlich der richtige Weg, um dies zu beheben, anstatt die Konfiguration durcheinander zu bringen, was meistens zu mehr Problemen führt.

    – Vishnu Nair

    30. August 2017 um 10:58 Uhr

Unter Ubuntu 16.04 bei Verwendung von ppa:ondrej/php (und wahrscheinlich andere Alternativen), um pecl/php-Erweiterungen für PHP 5.6 zu installieren, müssen Sie Folgendes tun:

pecl config-set ext_dir /usr/lib/php/20131226
pecl config-set php_bin /usr/bin/php5.6
pecl config-set php_ini /etc/php/5.6/cli/php.ini
pear config-set ext_dir /usr/lib/php/20131226
pear config-set php_bin /usr/bin/php5.6
pear config-set php_ini /etc/php/5.6/cli/php.ini
update-alternatives --config php #select php 5.6
update-alternatives --config php-config #select php 5.6
update-alternatives --config phpize #select php 5.6

Als nächstes können Sie pecl wie gewohnt verwenden:

pecl install raphf-1.1.2

downloading raphf-1.1.2.tgz … Beginne mit dem Download von raphf-1.1.2.tgz (15.915 Bytes) ……erledigt: 15.915 Bytes 8 Quelldateien, Gebäude

läuft: phpize

Konfigurieren für:

PHP-API-Version: 20131106

Zend-Modul-API-Nr.: 20131226

Zend-Erweiterungs-API-Nr.: 220131226

installiere ok: channel://pecl.php.net/raphf-1.1.2

Erweiterung raphf in php.ini aktiviert

Mir ist aufgefallen, dass, wenn keine Erweiterung in php.ini aktiviert ist, pecl die Zeile hinzufügen extension="xxx.so" am Anfang der php.ini, also verschiebe ich es normalerweise manuell an das Ende der Datei und danach ist es für die nächsten Erweiterungen in Ordnung.

Abhängig davon, was Sie auf Ihrem System haben, kann es notwendig sein, Ihre Änderungen nach der Installation rückgängig zu machen, insbesondere für die Verwendung der Standard-PHP-Version mit Update-Alternativen

1098580cookie-checkpecl installiert für frühere PHP-Versionen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy