Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie PHP, um den Code in der SO-Bibliotheksdatei aufzurufen

Verwenden Sie PHP, um den Code in der SO-Bibliotheksdatei aufzurufen

不言
不言Original
2018-04-09 10:04:157331Durchsuche

Der Inhalt dieses Artikels besteht darin, PHP zum Aufrufen des Codes in der SO-Bibliotheksdatei zu verwenden. Er hat einen gewissen Referenzwert.

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:

Verwenden Sie PHP, um Besucher-IP, regionalen Standort, Browser und Quellseiteninformationen zu erhalten

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn