Comment savoir quelles bibliothèques php sont connectées. Le principe de la connexion des fichiers en PHP. Connecter GD2 à PHP sous Windows

Igor Guzey

Ce n'est pas une instruction exacte et finale pour l'action en utilisant les termes corrects et les meilleures options. Il s'agit plutôt d'un journal du problème actuel.

Tâche : Ajouter le support/module GD2 à PHP

Comme d'habitude, nous commençons la formation sur l'ordinateur local, qui, bien sûr, fonctionne sous Windows. Plus précisément Windows XP SP2. Ensuite, nous connecterons GD2 en PHP configuré via des ports ou construit manuellement sous FreeBSD.

Connecter GD2 à PHP sous Windows

On retrouve dans la distribution :
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
bibliothèque php_gd2.dll, c'est-à-dire version 2.
et copiez php_gd2.dll dans c:\windows
dans le fichier c:\windows\php.ini nous trouvons la ligne extension=php_gd2.dll et supprimons le commentaire.
Redémarrez Apache. Tout.

Si vous supprimez d'abord naïvement le commentaire dans php.ini et pensez que cela suffit, alors après le redémarrage d'Apache, un diagnostic apparaîtra :
"Impossible de charger la bibliothèque dynamique "./php_gd.dll" - Le module spécifié est introuvable."

Connecter GD2 à PHP sous FreeBSD

PHP déjà installé à partir des ports

Plus précisément, non seulement PHP, mais en général tout (php, MySQL, Apache, ...) a été configuré à l'aide de ports.

# cd /usr/ports/lang/php4-extensions # make config add a checkmark: "GD library support" # make deinstall # make reinstall # apachectl -k graceful soft restart ou # apachectl restart hard restart

PHP construit à la main

Dans ce cas, un travail préliminaire est nécessaire pour préparer JPEG et ZLIB

Configuration de la prise en charge JPEG

Options possibles

JPEG depuis le port
# cd /usr/ports/graphics/jpeg # faire fonctionner le répertoire obtenu/jpeg-6b ne pas faire d'installation
JPEG de distribution
# cd /usr/dist/ # wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz # gunzip -c jpegsrc.v6b.tar.gz | tar xf - # cd /usr/dist/jpeg-6b # ./configure # make

Besoin d'installer le support zlib

Depuis le port
# cd /usr/ports/archivers/php4-zlib # make Libraries ont été installées dans : /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Construire PHP

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd sans répertoire installe La bibliothèque GD intégrée de PHP. --with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b si jpeg provient du port ou /usr/dist/jpeg-6b si jpeg provient de la distribution --with-zlib-dir=/ usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # make install && make clean

Essai

gif.php :png.phpjpg.php :gd_info.php :
clé VAL$val) echo "
clé $ $val"; ?>



Erreurs passées

Lors de l'installation de la bibliothèque JPEG, après "make", la commande "make install" a été effectuée dans l'espoir que les nouveaux fichiers iront dans /usr/local puis y seront automatiquement trouvés

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd --with-jpeg-dir --with-zlib-dir= /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Mais pour une raison quelconque, le JPEG ne s'est pas connecté. Il n'y a eu aucun diagnostic négatif et aucun résultat.

Bêtement, j'ai poussé comme un chaton aveugle essayant de le dire de cette façon, de cette façon. Soit à travers tout ce qui est intégré, puis à travers le téléchargement, puis à partir des ports. Toute cette disgrâce s'est accompagnée d'installations inutiles, qui ont provoqué des surcouches à cause desquelles il y a eu des erreurs au moment de l'installation de PHP :

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Merci d'utiliser PHP. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151 : référence indéfinie à `gdImageRotate" cela semble indiquer un répertoire pour GD, mais les diagnostics se réfèrent au répertoire intégré. # ./configure - -with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local --with-jpeg-dir=/usr/ local --with -png-dir=/usr/local --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules ... /usr /dist/php-4.4.4/ext/gd/gd.c:837 : référence indéfinie à `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd/gd.c:1151 : référence indéfinie à ` gdImageRotate" *** Code d'erreur 1

Essayez de préparer tous les modules séparément et pointez-les exactement.

Par défaut, l'extension permettant de travailler avec MySQL (bibliothèque php_mysql.dll) n'est pas connectée à PHP et les fonctions correspondantes ne sont pas disponibles. Pour connecter la bibliothèque, vous devez apporter des modifications au fichier de configuration php.ini et copier des bibliothèques supplémentaires dans le répertoire c:/windows/system32.

1. Dites à PHP (Apache) où se trouve php.ini (Apache 2.x uniquement)

Si vous utilisez Apache version 2 et supérieure, assurez-vous d'ajouter la directive PHPIniDir au fichier de configuration Apache (httpd.conf), ce qui vous permet de spécifier l'emplacement exact du fichier php.ini. Après avoir ajouté la directive, redémarrez Apache et vérifiez que le démarrage a réussi.

PHPIniDir "c:/php"

Note

Notez que les barres obliques / sont utilisées lors de l'écriture du chemin, ce qui n'est pas typique pour Windows, qui utilise des barres obliques inverses \\. Le fait est qu'Apache et PHP ont été conçus à l'origine pour fonctionner sur les systèmes Unix, où les barres obliques sont utilisées. Pour éviter d'éventuels problèmes difficiles à diagnostiquer, nous vous recommandons fortement d'utiliser des barres obliques au format Unix dans les fichiers de configuration Apache et PHP.

Cela suppose que le fichier de configuration php.ini est stocké dans le répertoire c:/php. Pour vous assurer qu'Apache a trouvé le fichier de configuration php.ini, exécutez la fonction phpinfo().

Impression des informations de configuration PHP

echo phpinfo();
?>

Trouver la valeur de la ligne dans les tableaux violets résultants "Chemin du fichier de configuration (php.ini)". Il doit contenir le chemin du fichier php.ini utilisé, y compris le fichier lui-même. Si seul un répertoire est listé sur cette ligne, cela signifie qu'Apache n'a pas pu trouver le fichier php.ini.

C:/php/php.ini // Correct - php.ini trouvé et utilisé
C:/windows/ // Faux - php.ini introuvable

Note

Dans les versions antérieures d'Apache, il n'y avait pas de directive PHPIniDir, et par conséquent, il y avait beaucoup d'erreurs liées à l'emplacement incorrect du fichier php.ini. Pour Apache version 1.3, php.ini doit être situé dans le répertoire système de Windows, généralement : c:/Windows. L'utilisation de la directive PHPIniDir dans Apache version 2 résout radicalement ce problème.

Après vous être assuré qu'Apache utilise le bon php.ini, vous pouvez commencer à le modifier pour connecter l'extension MySQL.

2. Configurez la directive extension_dir dans PHP.INI

La directive extension_dir spécifie le répertoire où se trouvent les bibliothèques d'extension php, y compris la bibliothèque php_mysql.dll. Si vous avez installé php dans le répertoire c:/php, les bibliothèques d'extension sont généralement situées dans le sous-répertoire ext (c:/php/ext). Vérifiez si c'est le cas et définissez la valeur correcte de la directive extension_dir.

extension_dir = "c:/php/ext"

3. Connectez l'extension pour travailler avec MySQL

Pour ce faire, recherchez la ligne dans php.ini :

;extension=php_mysql.dll

Et supprimez-y le symbole de commentaire - un point-virgule.

Extension=php_mysql.dll

4. Copiez la bibliothèque supplémentaire libmysql.dll dans c:/windows

Si vous avez PHP connecté à Apache en tant que module, alors pour connecter l'extension MySQL, vous devez copier la bibliothèque supplémentaire libmysql.dll du répertoire c:/php vers le répertoire c:/windows/system32. Si php est connecté à Apache en tant qu'application CGI, aucune bibliothèque supplémentaire n'a besoin d'être copiée.

5. Recharger Apache

Rechargez Apache pour que toutes les modifications prennent effet.

6. Vérifiez l'installation de l'extension

Pour vérifier que la bibliothèque MySQL s'est correctement connectée à PHP, exécutez la fonction phpinfo(). Parcourez les "tables violettes" et recherchez une section nommée MySQL. Si une telle section existe, cela signifie que l'extension s'est connectée avec succès.

Vérification de l'interaction de PHP avec MySQL

1. Vérifiez si votre serveur MySQL est en cours d'exécution.

Avant de commencer à vérifier l'interaction entre PHP et MySQL, assurez-vous que le serveur MySQL fonctionne pour vous. Cela peut être fait en ouvrant la liste des services Windows : "Démarrer" | "Panneau de configuration" | "Administration" | "Prestations de service". Recherchez le service nommé MySQL et assurez-vous qu'il est en cours d'exécution (troisième colonne du tableau).

La deuxième façon de s'assurer que le serveur MySQL est en cours d'exécution consiste à appuyer sur les boutons "Crtl" + "Alt" + "Suppr" et dans l'onglet "Processus", recherchez le processus nommé mysqld.exe. Au lieu du processus mysqld.exe, les processus suivants peuvent également s'exécuter : mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

2. Exécutez le script php de test

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "racine" ;
$dbpasswd = "" ;

$dbcnx = mysql_connect ($dblocation , $dbuser , $dbpasswd );
si (! $dbcnx )
{
écho "" ;
sortir();
}
si (!

{
écho "" ;
sortir();
}

si(! $ver )
{
écho "

Erreur de demande

" ;
sortir();
}
écho
mysql_result($ver , 0 );
?>

Si le test réussit, le numéro de version du serveur MySQL sera affiché. Sinon, les descriptions des erreurs survenues s'afficheront à l'écran.

Erreurs lors de la connexion de l'extension pour fonctionner avec MySQL

Erreurs telles que : appel à une fonction indéfinie

Toutes les erreurs contenant la phrase "Appel à une fonction non définie" pointent vers une extension PHP non connectée. Si de telles erreurs se produisent lors de l'utilisation des fonctions MySQL, cela signifie que la bibliothèque PHP pour travailler avec MySQL n'est pas connectée - php_mysql.dll

Exemple de message d'erreur :

Erreur fatale : appel à la fonction non définie mysql_connect()

Pour une solution à ce problème, voir le début de l'article.

Pas de bloc MySQL dans phpinfo()

Si tout est fait correctement, mais que l'extension MySQL ne se connecte pas et même le bloc MySQL manque dans la sortie de la fonction phpinfo(), alors vérifiez la version de la bibliothèque libmysql.dll située dans c:/windows/system32.

  1. Comparez la taille de la bibliothèque libmysql.dll située dans c:/windows/system32 avec la taille de la bibliothèque du même nom installée avec PHP. Ils doivent être égaux.
  2. Déplacez les bibliothèques libmysql.dll vers le répertoire c:/windows et tous les sous-répertoires. Supprimez tous les doublons trouvés et ne laissez qu'une seule bibliothèque requise - celle qui a été copiée à partir du répertoire c:/php.

Note

La bibliothèque libmysql.dll du même nom est également fournie avec le serveur MySQL. Cependant, ce sont des bibliothèques différentes, et si la bibliothèque MySQL se trouve dans le répertoire c:/windows/system32, alors PHP ne pourra pas connecter l'extension. La bibliothèque libmysql.dll peut être automatiquement copiée dans c:/windows/system32 lorsque le serveur MySQL est installé. La présence dans le répertoire système d'une bibliothèque d'une ancienne version de PHP peut également devenir un obstacle.

Nettoyer la page du script de test

Le script présenté dans la liste ci-dessous est souvent utilisé comme script pour vérifier l'interaction entre PHP et MySQL sur notre site. Ses différences avec le script php similaire donné au début de l'article sont les symboles @ avant d'appeler les fonctions mysql_connect() et mysql_select_db(). Ces caractères sont utilisés pour supprimer la sortie d'erreur vers le navigateur. Il est utile de les utiliser sur un site en direct sur Internet pour empêcher l'affichage d'informations confidentielles dans le navigateur, mais lors du débogage des scripts, il n'est pas nécessaire de désactiver la sortie d'erreur, car. cela peut compliquer le diagnostic du problème.

Script PHP qui vérifie la communication PHP avec le serveur MySQL

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "racine" ;
$dbpasswd = "" ;

$dbcnx = @ mysql_connect ($dblocation , $dbuser , $dbpasswd );
si (! $dbcnx )
{
écho "

Désolé, le serveur mySQL n'est pas disponible

" ;
sortir();
}
si ( [courriel protégé]
mysql_select_db ($dbname , $dbcnx ))
{
écho "

Malheureusement, la base de données n'est pas disponible.

"
;
sortir();
}
$ver = mysql_query("SELECT VERSION()");
si(! $ver )
{
écho "

Erreur de demande

"
;
sortir();
}
écho
mysql_result($ver , 0 );
?>

Si une page blanche s'affiche à la suite de l'exécution de ce script, cela signifie généralement que la bibliothèque php_mysql.dll n'est pas connectée à PHP. Pour diagnostiquer plus précisément le problème, effectuez la séquence d'actions suivante.

  1. Assurez-vous que vous exécutez d'autres scripts PHP qui n'utilisent pas la base de données MySQL.
  2. Supprimez le symbole @ avant d'appeler mysql_connect et mysql_select, qui est utilisé pour supprimer la sortie d'erreur vers le navigateur. Après cela, des informations d'erreur plus complètes seront affichées dans le navigateur, ce qui aidera à résoudre le problème.

Erreur : Impossible de se connecter au serveur MySQL sur "127.0.0.1" (10061)

Si, lors de l'exécution du script php de test, une erreur similaire à la suivante est générée :


Impossible de se connecter au serveur MySQL sur "127.0.0.1" (10061)
dans C:\www\panel\htdocs\test.php à la ligne 7

Cela indique que le serveur de base de données MySQL n'est pas en cours d'exécution. Un diagnostic plus précis de ce problème est donné plus haut au paragraphe 1 de la sous-section "Vérification de l'interaction entre PHP et MySQL".

Erreur : Accès refusé pour l'utilisateur "root"@"localhost" (en utilisant le mot de passe : OUI)

Présence de l'erreur suivante :

Attention : mysql_connect() :
Accès refusé pour l'utilisateur "root"@"localhost" (en utilisant le mot de passe : OUI)
dans C:\www\panel\htdocs\test.php à la ligne 7

Indique que vous essayez de vous connecter à une base de données MySQL avec un mot de passe incorrect. Vérifiez la valeur de la variable $dbpasswd dans le script de test. Par défaut, le serveur MySQL est installé avec un mot de passe utilisateur root vide. Si vous définissez vous-même un mot de passe pour l'utilisateur root, ajoutez-le à la variable $dbpasswd du script de vérification.

Toutes les questions que vous pourriez avoir sur la connexion à l'extension PHP pour travailler avec, vous pouvez les poser sur notre forum dédié à l'installation et à la configuration d'Apache, PHP et des bibliothèques d'extension.

La note: la version adaptative du site est activée, elle s'adapte automatiquement à la petite taille de votre navigateur et masque certains détails du site pour en faciliter la lecture. Profitez de regarder!

Bonne journée à tous les lecteurs du blog Placer au! Depuis 2 mois, mon travail pour l'entreprise est étroitement lié au PHP pur (l'utilisation de frameworks et de CMS est un tabou), j'ai déjà oublié ce qu'est Joomla :) il sera donc plus approprié de continuer à écrire plus haut que déjà.

Aujourd'hui, nous allons parler de la façon dont les fichiers sont connectés en PHP. Comme vous l'avez peut-être remarqué, tout moteur de site Web (Joomla, Wordpress, OpenCart, DLE et tout, tout, tout) se compose de milliers de fichiers .php (et pas seulement php) et ils interagissent tous les uns avec les autres, ce qui constitue en fait le mécanisme de chantier.

Oubliez maintenant les moteurs et imaginez un autre exemple : nous avons de nombreuses pages sur le site, chacune d'elles a le même menu, l'en-tête et le pied de page du site. Naturellement, nous ne copierons pas la même chose d'un fichier à l'autre, sinon cela se serait avéré être un ancien site HTML des années 90. Au minimum, nous allons tout casser en 4 fichiers :

  • index.php - la partie principale de la page, ce fichier va changer
  • menu.php - menu du site
  • header.php - en-tête du site
  • footer.php - pied de page du site

En plus de la page principale (index.php), par exemple, nous pouvons également avoir des pages avec une liste de produits (category.php) et des pages des produits eux-mêmes (product.php). Il sera pratique de connecter les fichiers menu.php, header.php, footer.php à ces pages. Grâce à cette approche, si nous ajoutons un nouvel élément de menu, nous ne l'ajouterons qu'une seule fois (dans menu.php), et non 3 fois (dans index.php, product.php, category.php).

Dès lors, la question se pose : "Comment joindre un fichier en PHP ?". Il existe 2 instructions en PHP à cet effet :

Et leurs dérivés :

J'attire votre attention sur le fait que include et require ne sont pas des fonctions, ce sont ce qu'on appelle des constructions de langage, donc les crochets ne sont pas nécessaires.

Quelle est la différence entre inclure et exiger

comprendre et exiger- c'est absolument la même chose, à la seule différence que si une erreur se produit (par exemple, si le fichier spécifié n'existe pas et qu'il ne peut pas être connecté), include renverra une erreur du type Avertissement, après quoi le site continuera à fonctionner, et require émettra un , qui arrêtera complètement le chargement de la page.

C'est-à-dire que l'instruction requise est plus radicale et rigide. C'est à vous de décider ce qui est préférable d'utiliser, dans l'ensemble, il est recommandé de toujours choisir une option plus stricte, c'est-à-dire exiger, mais pour moi personnellement, le mot inclure est plus agréable à taper :)

include_once et require_once font la même chose que include (inclure un fichier), mais en même temps, ils s'assurent que chaque fichier n'est pas inclus plus d'une fois. Ils sont particulièrement utiles si plusieurs personnes travaillent sur un projet et que vous devez vous assurer qu'un fichier n'est pas ajouté plusieurs fois.

Attention:

inclure_une fois et Demandez une fois- travailler plus lentement et consommer plus de RAM que ce qui est inclus et requis. Ceci est logique et est dû au fait qu'ils doivent se souvenir de tous les fichiers qui ont été connectés et à chaque fois qu'ils se connectent, vérifier si ce fichier a déjà été connecté.

Permettez-moi d'illustrer le fonctionnement de la connexion de fichiers en PHP :

Lors de l'inclusion de fichiers (n'importe lesquels, par exemple : html, txt, php, xml, etc.) script PHP, leur contenu est bêtement inséré à la place de l'inclusion. En d'autres termes, inclure (et je veux aussi dire exiger, puisque c'est la même chose) revient à copier (CTRL+C) du code quelque part et à coller (CTRL+V) dans un fichier (par exemple, dans product. php) et puis enregistré et exécuté comme d'habitude : http://votresite.net/product.php

Afin de distinguer les fichiers principaux, tels que product.php de ceux que nous y incluons (menu.php, header.php, footer.php), les fichiers inclus sont renommés comme suit : menu.inc.php, header. inc.php , pied de page.inc.php. Grâce à cela, lorsque nous entrons dans le dossier, nous verrons immédiatement où se trouvent les fichiers principaux et où se trouvent les fichiers auxiliaires.

Attention:

Cette technique (ajouter inc) est utilisée uniquement pour des raisons de commodité visuelle et ne comporte aucune différence fonctionnelle. Mais la commodité visuelle est également très importante, alors essayez de toujours structurer et de tout faire dans le même style.

inclure avec la valeur de retour

Rappelez-vous le mot-clé ? Ainsi, en PHP, il existe une chose aussi sauvage qu'un retour à l'intérieur d'une inclusion. Je ne l'ai jamais utilisé et je n'ai jamais vu d'autres l'utiliser, mais c'est possible, gardez un exemple.php :

Inclure some.php :

// Chaîne de sortie : PHP ?>

Quelques faits supplémentaires

  • Vous pouvez inclure des fichiers n'importe où dans le code PHP, y compris à l'intérieur ;
  • La connexion (include) est déclenchée lors de l'exécution du script, rien ne se passe dans les fichiers inclus au préalable ;
  • Le fichier inclus a la même chose que la ligne où include est déclaré. Autrement dit, si quelque part au milieu du fichier, alors la portée globale, et si à l'intérieur de la fonction, alors la portée locale. Encore une fois, j'insiste sur le fait que include est le même si vous avez pris et copié le code dans un fichier à la place de include.

Merci à tous pour votre attention et bon week-end !

Paire de lunettes...

PHP n'a pas de framework d'importation intégré comme python, java ou .net. Il existe plusieurs façons d'utiliser les bibliothèques en PHP.

    compilez-les en binaire PHP. C'est le moyen le plus avancé et n'est généralement pas souhaitable, sauf si vous avez des besoins particuliers.

    Installez-les en tant que modules PHP sur le serveur et activez-les dans PHP.ini. Du point de vue d'un programmeur PHP, ces extensions font partie de PHP - toujours disponibles. Il est simplement plus facile d'ajouter et de supprimer sans avoir à reconstruire PHP lui-même.

    Installez le code PHP sur le serveur quelque part et incluez-le () dans votre script PHP.

    Enregistrez une copie de la bibliothèque dans votre projet et incluez-la dans votre script PHP.

Page Au niveau de base, le code fait soit partie de l'interpréteur (statique ou dynamique), soit il s'agit d'un vieux code PHP simple qui inclut () dans votre projet.

Pour vos besoins, je ne peux que suggérer que vous vous en teniez à la distribution PHP standard (choisissez un bon système d'exploitation Linux et utilisez ce PHP). Ensuite, presque toutes les bibliothèques dont vous aurez besoin au niveau de l'interpréteur sont disponibles sous forme de packages complémentaires, et la complexité de cela est laissée à ceux qui le font tous les jours.

Sur RedHat/Centos, vous pouvez exécuter :

yum installer php php-memcached php-gd php-pecl

Comme pour toutes les autres bibliothèques que vous pourriez vouloir utiliser, il est probablement préférable d'utiliser un bon framework PHP qui s'occupera de tout cela pour vous.

Quelques exemples:

  • Cadre Zend
  • GâteauPHP
  • codeigniter
  • etc...

(pas dans n'importe quel ordre, juste ceux qui me viennent à l'esprit)

À condition que vous ayez utilisé l'approche RPM standard ou similaire pour gérer les compilés dans les aspects PHP et extensions, un bon framework robuste se chargera d'inclure tout le code de bibliothèque PHP supplémentaire dont vous avez besoin.

Quel est le résultat final : vous vous concentrez sur la livraison du produit, et non sur l'ensemble de l'infrastructure que vous auriez autrement dû apprendre et inventer.

La page php.ini est analysée et exécutée au démarrage de PHP (à chaque fois pour la ligne de commande, une fois par serveur exécuté dans apache). Il définit de nombreux paramètres, inclut de nombreux modules, configure ces modules, etc.

En fait, vous pouvez remplacer certains paramètres dans php.ini avec la fonction ini_set() de PHP. Cependant, cela ne fonctionne que pour certains paramètres. D'autres doivent être définis avant l'exécution du script.

Lors de l'exécution sous apache, vous pouvez ajouter des lignes aux directives .htaccess et qui remplacent complètement PHP.ini pour ce répertoire/hôte virtuel.

(veuillez corriger ma syntaxe et supprimer cette note si elle est erronée)

ServerName www.example.com DocumentRoot /home/joe/site/docroot php_value include_path "/home/joe/site/php-code"

Page En réponse à votre question #6 sur votre propre bibliothèque et la meilleure façon de l'emballer, je vous suggère d'évaluer d'abord le besoin d'une bibliothèque. Et si vous faites vraiment quelque chose, découvrez comment les gens le font le plus souvent. S'il s'agit d'une simple bibliothèque, un fichier .php avec un bon site Web suffit.

Page Peut-être un peu décousu, mais j'espère que cela vous orientera dans la bonne direction.

Je propose de parler un peu du langage de programmation PHP, et d'aborder spécifiquement le sujet de l'extension BOUCLE, c'est à dire. la possibilité d'interagir avec différents serveurs en utilisant différents protocoles à partir du script PHP lui-même.

Avant de procéder à l'examen de curl, je tiens à vous rappeler que nous avons déjà abordé le langage PHP, par exemple, dans le matériel sur le téléchargement vers Excel en PHP ou la possibilité de s'authentifier en PHP, et parlons maintenant de la capacité pour envoyer des requêtes à PHP.

CURL, qu'est-ce que c'est ?

BOUCLE est une bibliothèque de fonctions PHP avec laquelle vous pouvez envoyer des requêtes, telles que HTTP, à partir d'un script PHP. CURL prend en charge des protocoles tels que HTTP, HTTPS, FTP et autres. Vous pouvez envoyer des requêtes HTTP en utilisant les méthodes GET, POST, PUT.

CURL peut être utile dans les cas où vous devez appeler un script distant et obtenir un résultat ou simplement enregistrer le code HTML de la page appelée, en général, chacun peut trouver son propre usage, mais le fait est que vous pouvez envoyer des requêtes pendant exécution de scripts.

Inclure la bibliothèque CURL dans PHP

Pour utiliser la bibliothèque CURL, vous devez l'inclure en conséquence.

Note! Nous utiliserons PHP 5.4.39 sur Windows 7 comme exemple et Apache 2.2.22 comme serveur Web.

La première chose à faire est de copier les bibliothèques ssleay32.dll, libeay32.dll, libssh2.dll ils se trouvent dans le répertoire avec PHP, dans le répertoire système de Windows, à savoir dans C:\Windows\System32.

Ensuite, dans php.ini, connectez la bibliothèque php_curl.dll, c'est-à-dire décommentez la ligne suivante

Bibliothèque non connectée

;extension=php_curl.dll

Bibliothèque connectée

Extension=php_curl.dll

Voilà, redémarrez Apache, appelez la fonction phpinfo() et en cas de connexion réussie, vous devriez avoir une section curl


Si ce n'est pas le cas, cela signifie qu'une seule chose n'a pas été chargée par la bibliothèque, la raison la plus courante étant que les DLL ci-dessus n'ont pas été copiées dans le répertoire système de Windows.

Exemple CURL - Demande d'affichage d'une page distante

Dans cet exemple, nous allons simplement demander une page distante via la méthode HTTP GET et afficher son contenu à l'écran.

Nous avons un répertoire de test dedans, 2 fichiers PHP sont test_curl.php et test.php, où test_curl.php est le script où nous utiliserons curl, et test.php est un script distant que nous appellerons. J'ai commenté le code en détail.

code test_curl.php

code test.php

Rubrique 1"; pause; cas 2 : écho "<Н2>Rubrique 2"; pause; cas 3 : écho "<Н3>Rubrique 3"; pause; ) ) ?>

Par conséquent, si vous exécutez test_curl.php, vous verrez l'inscription "Titre 1" sur l'écran, vous pouvez expérimenter avec le passage des paramètres id ( dans ce cas 2 ou 3).

Exemple CURL - appeler le script distant et obtenir le résultat

Essayons maintenant d'appeler le script et d'obtenir le résultat afin de le traiter plus tard, par exemple, utilisons la méthode POST. Laissez les noms de fichiers inchangés.

code test_curl.php

code test.php

Et si nous exécutons test_curl.php, alors 111 sera affiché à l'écran, c'est-à-dire 1.11 résultant de l'appel au script distant, multiplié par 100.

Parlons maintenant des fonctions et de leurs constantes.

Fonctions et constantes CURL couramment utilisées

  • curl_init - Initialise une session ;
  • curl_close - Ferme une session ;
  • curl_exec - Exécute une requête ;
  • curl_errno - Renvoie le code d'erreur ;
  • curl_setopt - Définit un paramètre pour la session, par exemple :
    • CURLOPT_HEADER - la valeur 1 signifie que les en-têtes doivent être renvoyés ;
    • CURLOPT_INFILESIZE - paramètre pour spécifier la taille de fichier attendue ;
    • CURLOPT_VERBOSE - une valeur de 1 signifie que CURL affichera des messages détaillés sur toutes les opérations effectuées ;
    • CURLOPT_NOPROGRESS - désactiver l'indicateur de progression de l'opération, valeur 1 ;
    • CURLOPT_NOBODY - si vous n'avez pas besoin d'un document, mais seulement d'en-têtes, définissez la valeur sur 1 ;
    • CURLOPT_UPLOAD - pour télécharger un fichier sur le serveur ;
    • CURLOPT_POST - exécute une requête en utilisant la méthode POST ;
    • CURLOPT_FTPLISTONLY - obtenir une liste de fichiers dans le répertoire du serveur FTP, valeur 1 ;
    • CURLOPT_PUT — exécute une requête en utilisant la méthode PUT, valeur 1 ;
    • CURLOPT_RETURNTRANSFER - renvoie le résultat sans l'afficher dans le navigateur, valeur 1 ;
    • CURLOPT_TIMEOUT - temps d'exécution maximal en secondes ;
    • CURLOPT_URL - spécifiant l'adresse à laquelle accéder ;
    • CURLOPT_USERPWD - une chaîne avec un nom d'utilisateur et un mot de passe sous la forme : ;
    • CURLOPT_POSTFIELDS - données pour la requête POST ;
    • CURLOPT_REFERER - définit la valeur de l'en-tête HTTP "Referer : " ;
    • CURLOPT_USERAGENT - définit la valeur de l'en-tête HTTP "User-Agent : " ;
    • CURLOPT_COOKIE - contenu de l'en-tête "Cookie :" qui sera envoyé avec la requête HTTP ;
    • CURLOPT_SSLCERT - nom de fichier avec un certificat au format PEM ;
    • CURLOPT_SSL_VERIFYPEER - valeur 0 pour désactiver la vérification du certificat du serveur distant (1 par défaut) ;
    • CURLOPT_SSLCERTPASSWD est le mot de passe du fichier de certificat.
  • curl_getinfo - Renvoie des informations sur l'opération, le deuxième paramètre peut être une constante pour indiquer exactement ce qui doit être affiché, par exemple :
    • CURLINFO_EFFECTIVE_URL - dernière URL utilisée ;
    • CURLINFO_HTTP_CODE - Le dernier code HTTP reçu ;
    • CURLINFO_FILETIME - date de modification du document chargé ;
    • CURLINFO_TOTAL_TIME — durée d'exécution de l'opération en secondes ;
    • CURLINFO_NAMELOOKUP_TIME - temps de résolution du nom du serveur en secondes ;
    • CURLINFO_CONNECT_TIME - temps nécessaire pour établir une connexion, en secondes ;
    • CURLINFO_PRETRANSFER_TIME - temps écoulé entre le début de l'opération et la préparation du transfert de données réel, en secondes ;
    • CURLINFO_STARTTRANSFER_TIME - temps écoulé depuis le début de l'opération jusqu'au transfert du premier octet de données, en secondes ;
    • CURLINFO_REDIRECT_TIME - temps nécessaire pour rediriger, en secondes ;
    • CURLINFO_SIZE_UPLOAD - nombre d'octets lors du téléchargement ;
    • CURLINFO_SIZE_DOWNLOAD - le nombre d'octets lors du téléchargement ;
    • CURLINFO_SPEED_DOWNLOAD - vitesse de téléchargement moyenne ;
    • CURLINFO_SPEED_UPLOAD - vitesse de téléchargement moyenne ;
    • CURLINFO_HEADER_SIZE - la taille totale de tous les en-têtes reçus ;
    • CURLINFO_REQUEST_SIZE - la taille totale de toutes les requêtes envoyées ;
    • CURLINFO_SSL_VERIFYRESULT Le résultat de la vérification du certificat SSL demandée en définissant le paramètre CURLOPT_SSL_VERIFYPEER ;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD La taille du document téléchargé, lue à partir de l'en-tête Content-Length ;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - taille des données téléchargées ;
    • CURLINFO_CONTENT_TYPE Le contenu de l'en-tête Content-type reçu, ou NULL si cet en-tête n'a pas été reçu.

Vous pouvez en savoir plus sur les fonctions CURL et leurs constantes sur le site Web officiel de PHP -