Kompilieren dynamischer PECL-Erweiterungen mit phpize

Manchmal ist es nicht möglich, das Installationsprogramm von pecl zu verwenden. Dies könnte daran liegen, dass Sie sich hinter einer Firewall befinden oder dass die zu installierende Erweiterung nicht als PECL-kompatibles Paket verfügbar ist, z. B. weil sie noch nicht auf Git veröffentlicht wurde. Wenn Sie eine solche Erweiterung erstellen müssen, können Sie dies mit einfacheren Build-Tools manuell erledigen.

Mit dem Befehl phpize wird die Build-Umgebung für eine PHP-Erweiterung vorbereitet. Im folgenden Beispiel befinden sich die Quellen für eine Erweiterung in einem Verzeichnis namens extname:

$ cd extname
$ phpize
$ ./configure
$ make
# make install

Wenn alles gutgeht, wird extname.so erstellt und im Verzeichnis für PHP-Erweiterungen abgelegt. Bevor Sie die Erweiterung verwenden können, müssen Sie die Zeile extension=extname.so in die php.ini einfügen.

Wenn es den Befehl phpize auf Ihrem System nicht gibt und Sie vorkompilierte Pakete (z. B. RPMs) verwenden, sollten Sie unbedingt auch die entsprechende Entwicklerversion des PHP-Pakets installieren, da dieses oft den Befehl phpize sowie die entsprechenden Header zum Erstellen von PHP und seinen Erweiterungen enthält.

Mit dem Befehl phpize --help können Sie sich zusätzliche Informationen zur Verwendung anzeigen lassen.

add a note

User Contributed Notes 5 notes

up
72
Brian
15 years ago
If you have multiple PHP versions installed, you may be able to specify for which installation you'd like to build by using the --with-php-config option during configuration.

--with-php-config=[Insert path to proper php-config here]

For example (my case):
./configure --with-php-config=/usr/local/php5/bin/php-config5
up
2
admin at eexit dot net
10 years ago
When compiling an extension for a stack which is 64 bits (for example) and your compiler is configured to compile in 32 bits, you can manually compile your extensions using C flags before your configure.

Example: my system compiler is 32 bits and my stack is 64 bits. To compile my xdebug:

# phpize
# CFLAGS=-m64 CPPFLAGS=-m64 CCASFLAGS=-m64 ./configure --enable-xdebug
# gmake
# file modules/xdebug.so
modules/xdebug.so:      ELF 64-bit LSB dynamic lib AMD64 Version 1, dynamically linked, not stripped, no debugging information available
up
-5
dmytton at php dot net
17 years ago
In some situations (e.g. on a cPanel server), the built extension will not be placed into the correct extensions directory by the make install process. Use your phpinfo() output to determine what the correct extension_dir path is and move the generated .so file into that directory. The extension=extname.so line in php.ini will then find the extension file correctly.
up
-5
Glen
16 years ago
When you have multiple installations of PHP, running phpize from a specific installation will not force the module to be compiled with that installation's include files.

In my case, I had a standard PHP distribution installed, and am evaluating Zend Core / Zend Platform, which installed it's own Apache & PHP in a /usr/local/Zend/.. install path.  It was missing the json.so module, so I had to compile my own.

Running Zend Core's phpize, the output indicates that configuration for that module will occur.  But when running ./configure, the standard installation's include files are used.  The result json.so being compiled against the wrong PHP would not load when Zend Core's php initializes.

The only way I could see to correct the situation was to temporarily change the standard PHP include path to point to the Zend Core's include files.  In my case, I made a backup copy of /usr/include/php5 and did a "ln -s /usr/local/Zend/Core/include/php/ /usr/include/php5".
up
-9
gautama dot himawan at yahoo dot com
8 years ago
If you failed to run phpize command, then you should install php-devel package. Command line to install the php-devel package using yum is: yum install php-devel.

If you failed to compile the PECL extension, then you should install gcc package. Command line to install the gcc package using yum is: yum install gcc.
To Top