Maison > Article > développement back-end > Utilisez php pour appeler le code dans le fichier de bibliothèque so
Le contenu de cet article est d'utiliser PHP pour appeler le code dans le fichier de la bibliothèque so. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer
Auteur original charlee, lien original http://tech.idv2.com/2007/07/06/use-local-so-in-php/
Une certaine fonction est compilée dans le fichier so, alors comment l'appeler via php ? Une méthode consiste à
écrire un module php (extension php), à appeler la fonction dans le module en php, puis à utiliser le module pour appeler la fonction dans donc . Voici un exemple simple utilisant Fedora Core 6 comme système d'exploitation.
Créez d'abord un fichier so simple :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 }Ensuite, compilez-le dans un fichier .so et mettez-le dans le système :
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Écrivez un petit programme pour vérifier son exactitude :
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 }Compilez et exécutez :
$ gcc -o hellotest -lhello hellotest.c $ ./hellotest 3 + 4 = 7OK, créons le module PHP. Tout d’abord, assurez-vous d’avoir installé le package php-devel. Sinon, veuillez le trouver sur le CD d’installation. Téléchargez ensuite le code source php. J'utilise php-5.2.3.tar.gz, décompressé.
$ tar xzvf php-5.2.3.tar.gz $ cd php-5.2.3/extCréez ensuite un module nommé bonjour via la commande suivante.
$ ./ext_skel --extname=helloAprès avoir exécuté cette commande, il vous demandera quelle commande doit être utilisée pour compiler le module. Malheureusement, c'est la méthode de compilation qui intègre le module dans PHP. Si vous souhaitez le compiler dans un php_hello.so chargeable dynamiquement, la méthode est plus simple.
$ cd helloModifiez d'abord le fichier config.m4 et supprimez les commentaires sur les lignes 16 et 18 (le symbole du commentaire est 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])Ensuite, exécutez le programme phpize pour générer le configurer le script :
$ phpizePuis ouvrez php_hello.h, ajoutez la déclaration de fonction sous PHP_FUNCTION(confirm_hello_compiled);:
1PHP_FUNCTION(confirm_hello_compiled); /* For testing, remove later. */ 2 PHP_FUNCTION(hello_add);Ouvrez hello.c, sous PHP_FE(confirm_hello_compiled, NULL) Ajouter ce qui suit.
<br/>Écrivez ensuite le contenu de la fonction hello_add à la fin de 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 }Enregistrez et quittez, compilez et installez :
___FCKpd___12nbsp;./configure ___FCKpd___12nbsp;make LDFLAGS=-lhello ___FCKpd___12nbsp;su # cp modules/hello.so /usr/lib/php/modulesPuis dans Créez un fichier hello.php sous /var/www/html avec le contenu suivant :
<?php dl("hello.so"); echo hello_add(3, 4); ?>Ouvrez ensuite le fichier hello.php dans le navigateur Si 7 est affiché, l'appel de fonction est réussi. .
Supplément de connaissances Linux :
En raison de l'utilisation d'Editplus, le programme source par défaut du langage C est enregistré au format .cpp, puis je le compile avec gcc sous cygwin, et certaines fonctions apparaissent toujours non déclarées, mais ces fonctions sont toutes des appels système standard. Pourquoi ?
Utilisez PHP pour obtenir l'adresse IP des visiteurs, l'emplacement régional, le navigateur et les informations sur la page source
PHP utilise PHPstorm Explication détaillée de la fonction d'invite automatique
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!