Heim >Backend-Entwicklung >PHP-Tutorial >So erweitern Sie PHP (so verpackt) mit C unter Linux
In diesem Artikel geht es hauptsächlich um die Unterschiede zwischen dem Packen von C-Erweiterungsdateien unter Linux und Windows. Detaillierte Code- und Konfigurationspläne finden Sie in einem anderen Blog: http://blog.csdn.net/maverick1990/article /details/. 46519045
Schritte:
1. Installieren Sie die PHP-Umgebung im Verzeichnis /usr/local/php/
2. Laden Sie die gleiche Version des PHP-Quellcodepakets herunter , Installiert im Verzeichnis /root/php-5.6.9/, können Sie es von der offiziellen Website http://www.php.net/downloads.php herunterladen
Führen Sie den Befehl aus:
cd /root wget http://us1.php.net/distributions/php-5.6.9.tar.bz2 tar -xf php-5.6.9.tar.bz2Hinweis: Einige historische Versionen verfügen nicht über Quellcodepakete und Sie müssen PHP auf eine Version aktualisieren, die Quellcodepakete bereitstellt.
3. Gehen Sie in das Verzeichnis /php-5.6.9/ext/ und verwenden Sie ext_skel, um das erweiterte Skelett zu generieren
cd ./php-5.6.9/ext ./ext_skel --extname=test
Brechen Sie die folgenden zwei Zeilen Dnl-Kommentare ab:
PHP_ARG_ENABLE(test, whether to enable test support, dnl Make sure that the comment is aligned: [ --enable-test Enable test support])
PHP_REQUIRE_CXX() PHP_ADD_LIBRARY(stdc++, 1, EXTRA_LDFLAGS) PHP_NEW_EXTENSION(test, test.cpp, $ext_shared)
PHP_MINIT_FUNCTION(test); PHP_MSHUTDOWN_FUNCTION(test); PHP_RINIT_FUNCTION(test); PHP_RSHUTDOWN_FUNCTION(test); PHP_MINFO_FUNCTION(test); PHP_FUNCTION(confirm_test_compiled); /* For testing, remove later. */ PHP_FUNCTION(testFunc);
(1) Führen Sie zunächst die an dieser Stelle verwendete Header-Datei ein:
#ifdef HAVE_CONFIG_H #include "config.h" #endif #include <stdio.h> #include <string.h> #include <math.h>
#include "php.h" #include "php_ini.h" #include "ext/standard/info.h" #include "php_test.h"Andernfalls wird es eine geben viele Probleme mit der Funktionsneudefinition. Weitere Informationen finden Sie in einem anderen Blog: http://blog.csdn.net/maverick1990/article/details/46786685
(2) Fügen Sie dann den Funktionseintrag an dieser Stelle hinzu:
const zend_function_entry test_functions[] = { PHP_FE(confirm_test_compiled, NULL) /* For testing, remove later. */ PHP_FE(testFunc, NULL) PHP_FE_END /* Must be the last line in test_functions[] */ };
PHP_FUNCTION(testFunc) { char *x = NULL; char *y = NULL; int argc = ZEND_NUM_ARGS(); int x_len; int y_len; if (zend_parse_parameters(argc TSRMLS_CC, "ss", &x, &x_len, &y, &y_len) == FAILURE) return; int result_length = x_len + y_len; char* result = (char *) emalloc(result_length + 1); strcpy(result, x); strcat(result, y); RETURN_STRINGL(result, result_length, 0); }
Einzelheiten zum Schreiben der PHP_FUNCTION-Funktion finden Sie im Blog: http://weizhifeng.net/write-php-extension-part2-1.html
7. Erstellen Sie im Verzeichnis /root/php-5.6.9/ext/test/ ein PHP-Erweiterungsmodul:
phpizeMöglicherweise müssen Sie den Pfad hinzufügen:
/usr/local/php/bin/phpize
8. Kehren Sie zum Verzeichnis /root/php-5.6.9/ zurück und stellen Sie die für die Kompilierung erforderliche Konfiguration wieder her:
cd ../.. ./buildconf --force
Wenn ein ähnlicher Fehler auftritt:
buildconf: You need autoconf 2.59 or lower to build this version of PHP. You are currently trying to use 2.63 Most distros have separate autoconf 2.13 or 2.59 packages. On Debian/Ubuntu both autoconf2.13 and autoconf2.59 packages exist. Install autoconf2.13 and set the PHP_AUTOCONF env var to autoconf2.13 and try again.
yum install autoconf213 export PHP_AUTOC/bin/autoconf-2.139. Gehen Sie in das Verzeichnis /root/php-5.6.9/ext/test/ und generieren Sie die Konfiguration:
./configure --with-php-c/local/php/bin/php-config
make make installWenn make eine Fehler, ändern Sie den Code, bis die Kompilierung erfolgreich ist
Wenn bei make install ein Fehler auftritt, müssen Sie nach der Änderung die aktuell generierten Erweiterungsmodule löschen:
phpize --clean
11. Überprüfen Sie, ob test.so generiert wurde
Nach erfolgreicher Make-Installation wird der Generierungspfad angegeben, zum Beispiel: /usr/local/php/lib/php/extensions/no-debug -non-zts- 20131226/test.so
12. Ändern Sie php.ini
Ändern Sie die Datei /usr/local/php/etc/php.ini und fügen Sie den Erweiterungspfad und -namen hinzu :
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/" extension = "teste.so"
service php-fpm restart
14. Verwenden Sie C++-Erweiterungsfunktionen in PHP
<?php $concat_str = testFunc("concat1","concat2"); echo $concat_str; ?>
PHP Warning PHP Startup Unable to initialize module Module compiled with module API=20121212 PHP compiled with module API=20090626 These options need to match in Unknown on line 0
Copyright-Erklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden.
Das Obige stellt die Methode zur Verwendung von C zum Erweitern von PHP (in PHP verpackt) unter Linux vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.