Der Inhalt dieses Artikels besteht darin, PHP zum Aufrufen des Codes in der SO-Bibliotheksdatei zu verwenden. Er hat einen gewissen Referenzwert.
Originalautor Charlee, Originallink http://tech.idv2.com/2007/07/06/use-local-so-in-php/
Eine bestimmte Funktion wird in die SO-Datei kompiliert. Wie rufe ich sie also über PHP auf? Eine Methode besteht darin, ein PHP-Modul (PHP-Erweiterung) zu schreiben, die Funktion im Modul in PHP aufzurufen, und dann das Modul zum Aufrufen der Funktion zu verwenden also . Hier ist ein einfaches Beispiel mit Fedora Core 6 als Betriebssystem.
Erstellen Sie zunächst eine einfache SO-Datei:
1 /** 2 * hello.c 3 * To compile, use following commands: 4 * gcc -O -c -fPIC -o hello.o hello.c 5 * gcc -shared -o libhello.so hello.o 6 */ 7 8 int hello_add(int a, int b) 9 { 10 return a + b; 11 }
Kompilieren Sie sie dann in eine .so-Datei und legen Sie sie im System ab:
1 ___FCKpd___1nbsp;gcc -O -c -fPIC -o hello.o hello.c 2 ___FCKpd___1nbsp;gcc -shared -o libhello.so hello.o 3 ___FCKpd___1nbsp;su 4 # echo /usr/local/lib > /etc/ld.so.conf.d/local.conf 5 # cp libhello.so /usr/local/lib 6 # /sbin/ldconfig
Schreiben Sie ein kleines Programm, um seine Richtigkeit zu überprüfen:
1/** 2 * hellotest.c 3 * To compile, use following commands: 4 * gcc -o hellotest -lhello hellotest.c 5 */ 6 #include <stdio.h> 7 int main() 8 { 9 int a = 3, b = 4; 10 printf("%d + %d = %d/n", a, b, hello_add(a,b)); 11 return 0; 12 }
Kompilieren und ausführen:
$ gcc -o hellotest -lhello hellotest.c $ ./hellotest 3 + 4 = 7
OK, erstellen wir das PHP-Modul. Stellen Sie zunächst sicher, dass Sie das Paket php-devel installiert haben. Andernfalls finden Sie es auf der Installations-CD. Laden Sie dann den PHP-Quellcode herunter. Ich verwende php-5.2.3.tar.gz, dekomprimiert.
$ tar xzvf php-5.2.3.tar.gz $ cd php-5.2.3/ext
Erstellen Sie dann mit dem folgenden Befehl ein Modul mit dem Namen „hello“.
$ ./ext_skel --extname=hello
Nach der Ausführung dieses Befehls werden Sie gefragt, welcher Befehl zum Kompilieren des Moduls verwendet werden soll. Leider ist dies die Kompilierungsmethode, die das Modul in PHP integriert. Wenn Sie es in eine dynamisch ladbare php_hello.so kompilieren möchten, ist die Methode einfacher.
$ cd hello
Bearbeiten Sie zuerst die Datei config.m4 und entfernen Sie die Kommentare in den Zeilen 16 und 18 (das Kommentarsymbol ist dnl.)
1 16: PHP_ARG_ENABLE(hello, whether to enable hello support, 2 17: dnl Make sure that the comment is aligned: 3 18: [ --enable-hello Enable hello support])
Führen Sie dann das PHPize-Programm aus, um das zu generieren Skript konfigurieren:
$ phpize
Dann php_hello.h öffnen, Funktionsdeklaration unter PHP_FUNCTION(confirm_hello_compiled) hinzufügen;:
1PHP_FUNCTION(confirm_hello_compiled); /* For testing, remove later. */ 2 PHP_FUNCTION(hello_add);
Hallo.c öffnen, unter PHP_FE(confirm_hello_compiled, NULL) hinzufügen die folgende.
<br/>
Dann schreiben Sie den Inhalt der hello_add-Funktion am Ende von hello.c:
1PHP_FUNCTION(hello_add) 2 { 3 long int a, b; 4 long int result; 5 6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) { 7 return; 8 } 9 10 result = hello_add(a, b); 11 12 RETURN_LONG(result); 13 }
Speichern und beenden, kompilieren und installieren:
___FCKpd___12nbsp;./configure ___FCKpd___12nbsp;make LDFLAGS=-lhello ___FCKpd___12nbsp;su # cp modules/hello.so /usr/lib/php/modules
Dann erstellen Sie eine hello.php-Datei unter /var/www/html mit folgendem Inhalt:
<?php dl("hello.so"); echo hello_add(3, 4); ?>
Öffnen Sie dann die hello.php-Datei im Browser. Wenn 7 angezeigt wird, ist der Funktionsaufruf erfolgreich .
Linux-Wissensergänzung:
Aufgrund der Verwendung von Editplus wird das Standardquellprogramm der C-Sprache als .cpp gespeichert und ich kompiliere es dann mit gcc unter Cygwin. Einige Funktionen werden immer nicht deklariert angezeigt. Aber diese Funktionen sind alles Standardsystemaufrufe.
Ich war den ganzen Nachmittag und die ganze Nacht über deprimiert. Dann wusste ich nicht, warum ich versucht habe, das Quellprogramm .cpp in .c zu ändern die Zusammenstellung verlief reibungslos.
Später erfuhr ich im Internet, dass unter Linux gcc zum Kompilieren von .c-Dateien verwendet wird, während für C++-Dateien der Befehl g++ zum Kompilieren des C++-Quellprogramms erforderlich ist.
Verwandte Empfehlungen:
PHP verwendet PHPstorm Detaillierte Erklärung der automatischen Aufforderungsfunktion
Das obige ist der detaillierte Inhalt vonVerwenden Sie PHP, um den Code in der SO-Bibliotheksdatei aufzurufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!