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.bz2
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"
(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:
phpize
/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.13
./configure --with-php-c/local/php/bin/php-config
make make install
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.