Maison  >  Article  >  cadre php  >  Comment importer des bibliothèques tierces dans ThinkPHP

Comment importer des bibliothèques tierces dans ThinkPHP

PHPz
PHPzavant
2023-06-03 17:15:341860parcourir

Bibliothèque tierce

Les bibliothèques de classes tierces font référence à d'autres bibliothèques de classes en plus du framework ThinkPHP et des bibliothèques de classes de projets d'application. Elles sont généralement fournies par des systèmes ou des produits tiers, tels que les bibliothèques de classes de Smarty, Zend et d'autres systèmes.

Pour les bibliothèques de classes importées précédemment à l'aide du chargement automatique ou de la méthode d'importation, la convention ThinkPHP consiste à utiliser .class.php comme suffixe. Les suffixes non-de ce type doivent être contrôlés via les paramètres d'importation.

Mais pour le troisième type de bibliothèque, puisqu'un tel accord n'existe pas, son suffixe ne peut être considéré que comme étant php. Afin d'introduire facilement des bibliothèques de classes à partir d'autres frameworks et systèmes, ThinkPHP fournit spécifiquement la fonction d'importation de bibliothèques de classes tierces. Les bibliothèques de classes tierces sont uniformément placées sous le répertoire système ThinkPHP/Vendor et importées à l'aide de la méthode du fournisseur.

Méthode du vendeur

Grammaire :

boolenvendor(class,baseUrl,ext)

Description du paramètre :

​Description du paramètre

La classe est obligatoire, indiquant la bibliothèque de classes à importer, en utilisant la méthode de l'espace de noms.

baseUrl est facultatif, indiquant le chemin de base de l'importation. S'il est omis, le système utilise le répertoire système ThinkPHP/répertoire du fournisseur.

ext est facultatif, indiquant le suffixe de la bibliothèque de classes importée, la valeur par défaut est .php.

La différence avec la méthode d'importation est que le chemin d'importation par défaut de la méthode du fournisseur est le répertoire système ThinkPHP/répertoire du fournisseur et le suffixe par défaut est .php.

Partage d'expérience personnelle :

Lorsque nous voulons introduire une extension tierce dans ThinkPHP et que l'extension tierce n'est pas écrite selon les spécifications ThinkPHP, nous devons placer l'extension tierce dans le répertoire Library/Vendor. Bien sûr, c'est pour ThinkPHP3. .2. En d’autres termes, la version inférieure dépend de la situation.

Ensuite, lorsque vous devez utiliser une extension tierce dans un contrôleur ou une fonction, vous pouvez directement utiliser la méthode supplier() pour la référencer.

Structure du répertoire des bibliothèques tierces :

​Utilisé dans la fonction function :

La première méthode :

Fournisseur('Phpqrcode.phpqrcode');

​Copier le code

​Copier le code

​/**

*Générer un code QR

*Connexion @paramstring$urlurl

*@paraminteger$size la taille est un nombre pur

​*/

fonctionqrcode($url,$size=4){

Fournisseur('Phpqrcode.phpqrcode');

​if(strpos($url,'http')===false){

​$url='http://'.$url;

}

QRcode::png($url,false,QR_ECLEVEL_L,$size,2,false,0xFFFFFF,0x000000);

}

​Copier le code

​Copier le code

La deuxième méthode :

require'./ThinkPHP/Library/Org/Nx/class.phpmailer.php';

require'./ThinkPHP/Library/Org/Nx/class.smtp.php';

​Copier le code

​Copier le code

​/**

*Envoyer un email

*@paramstring$address L'adresse e-mail à envoyer à plusieurs adresses doit être écrite sous forme de tableau

*@paramstring$titre du sujet

*@paramstring$content contenu

* @returnboolean a réussi

​*/

​functionsend_email ($ adresse, $ sujet, $ contenu){

​$email_smtp=C('EMAIL_SMTP');

​$email_username=C('EMAIL_USERNAME');

​$email_password=C('EMAIL_PASSWORD');

​$email_from_name=C('EMAIL_FROM_NAME');

​if(empty($email_smtp)||empty($email_username)||empty($email_password)||empty($email_from_name)){

returnarray("error"=>1,"message"=>'La configuration de la boîte aux lettres est incomplète');

}

require'./ThinkPHP/Library/Org/Nx/class.phpmailer.php';

require'./ThinkPHP/Library/Org/Nx/class.smtp.php';

​$phpmailer=newPhpmailer();

//Configurer PHPMailer pour utiliser le serveur SMTP pour envoyer des e-mails

​$phpmailer->IsSMTP();

//Défini au format html

​$phpmailer->IsHTML(true);

//Définissez l'encodage des caractères de l'email'

​$phpmailer->CharSet='UTF-8';

//Configurer le serveur SMTP.

​$phpmailer->Host=$email_smtp;

//Défini sur "Exiger une vérification"

​$phpmailer->SMTPAuth=true;

//Définir le nom d'utilisateur

​$phpmailer->Nom d'utilisateur=$email_username;

//Définir le mot de passe

​$phpmailer->Password=$email_password;

//Définissez le champ De de l'en-tête de l'e-mail.

​$phpmailer->From=$email_username;

//Définissez le nom de l'expéditeur

​$phpmailer->FromName=$email_from_name;

//Ajoutez l'adresse du destinataire, qui peut être utilisée plusieurs fois pour ajouter plusieurs destinataires

​si(is_array($adresse)){

​foreach ($addressas$addressv){

​$phpmailer->AddAddress($addressv);

}

}autre{

​$phpmailer->AddAddress($address);

}

//Définir le titre de l'e-mail

​$phpmailer->Sujet=$sujet;

//Définissez le corps de l'e-mail

​$phpmailer->Body=$content;

//Envoyer un e-mail.

​if(!$phpmailer->Envoyer()){

​$phpmailererror=$phpmailer->ErrorInfo;

returnarray("erreur"=>1,"message"=>$phpmailererror);

}autre{

returnarray("erreur"=>0);

}

}

​Copier le code

​Copier le code

La troisième méthode :

Structure du répertoire de la bibliothèque Alipay

vendeur('Alipay.AlipaySubmit','','.class.php');

Remarque : Le suffixe par défaut chargé par le fournisseur est .php

Paramètre 1 : Obligatoire, indiquant la bibliothèque de classes à importer, en utilisant la méthode de l'espace de noms

Paramètre 2 : facultatif, indiquant le chemin de base de l'importation. En cas d'omission, le système utilise le répertoire système ThinkPHP/répertoire du fournisseur.

Paramètre trois : facultatif, indiquant le suffixe de la bibliothèque de classes importée, la valeur par défaut est .php.

Code de cas tiers Alipay :

​Copier le code

​Copier le code

​/**

* Accédez à Alipay pour payer

*@paramarray$order les données de commande doivent inclure out_trade_no (numéro de commande), le prix (montant de la commande), le sujet (titre du nom du produit)

​*/

fonctionnelleipay ($ commande) {

vendeur('Alipay.AlipaySubmit','','.class.php');

//Obtenir la configuration

​$config=C('ALIPAY_CONFIG');

​$data=tableau(

"_input_charset"=>$config['input_charset'],//Format d'encodage

"logistics_fee"=>"0.00",//Frais logistique

"logistics_payment"=>"SELLER_PAY", //Mode de paiement logistique SELLER_PAY (le vendeur supporte le fret), BUYER_PAY (l'acheteur supporte le fret)

"logistics_type"=>"EXPRESS",//Type logistique EXPRESS (express), POST (courrier de surface), EMS (EMS)

"notify_url"=>$config['notify_url'], //Lien pour recevoir une notification sur l'état du paiement de manière asynchrone

"out_trade_no"=>$order['out_trade_no'],//Numéro de commande

"partenaire"=>$config['partner'],//Le partenaire est obtenu à partir du centre personnel de la version marchand Alipay

"payment_type"=>"1", //Le type de paiement correspond au paramètre payment_type dans la requête, et est renvoyé tel quel. Réglez-le simplement sur 1

"price"=>$order['price'],//L'unité de prix de la commande est le yuan

//"price"=>0.01,////Ajuster le prix pour les tests

"quantity"=>"1",//le prix et la quantité peuvent remplacer total_fee. Autrement dit, si total_fee existe, le prix et la quantité ne peuvent pas exister ; si le prix et la quantité existent, total_fee ne peut pas exister. (Je n'ai pas compris ; d'accord ; ignorez simplement ce paramètre)

"receive_address"=>'1',//L'adresse du destinataire est créditée instantanément, ignorez simplement ce paramètre

"receive_mobile"=>'1',//Ignorez simplement le mode de paiement instantané du numéro de téléphone portable du destinataire

"receive_name"=>'1',//Ignorez simplement le mode de paiement instantané du nom du destinataire

"receive_zip"=>'1',//Ignorez simplement la méthode d'arrivée instantanée du code postal du destinataire

"return_url"=>$config['return_url'], //Chemin de la page de notification de synchronisation de saut de page Une fois qu'Alipay a traité la demande, la page actuelle passe automatiquement au chemin http de la page spécifiée dans le site Web du marchand.

"seller_email"=>$config['seller_email'],//L'e-mail est obtenu à partir du centre personnel Alipay Merchant Version

"service"=>"create_direct_pay_by_user", //Le nom de l'interface est fixé à create_direct_pay_by_user

"show_url"=>$config['show_url'], //URL d'affichage du produit, lien hypertexte pour l'affichage du produit sur la page de paiement.

"subject"=>$order['subject']//Nom du produit, titre du produit/titre de la transaction/titre de la commande/mot-clé de la commande, etc.

);

​$alipay=newAlipaySubmit($config);

​$new=$alipay->buildRequestPara($data);

​$go_pay=$alipay->buildRequestForm($new,'get','pay');

echo$go_pay;

}

​Copier le code

​Copier le code

Cependant, lorsque j'ai mis PHPMailer dans le répertoire du fournisseur, il a fonctionné correctement sur cette machine. Récemment, lorsque j'ai téléchargé le programme sur le serveur, il a directement demandé que la classe "PHPMailer" soit introuvable, puis l'a réexécuté sur cette machine, et ce fut le cas. toujours correct ! Comme vous pouvez le savoir sur le blog précédent, j'utilise supplier('PHPMailer.class#PHPMailer');

Cette ligne de code présente PHPMailer. Puisqu'il indique que la classe PHPMailer est introuvable, cela signifie qu'elle n'a pas été introduite correctement. Pourquoi est-ce ?

J'ai jeté un coup d'œil rapide au code source de la méthode supplier() et j'ai découvert que la méthode supplier() assemble en fait les paramètres de la méthode import(), puis laisse le soin à la méthode import() pour le traitement. En examinant le code source de la méthode import(), nous avons constaté que dans la méthode import(), l'analyse des paramètres entrants ci-dessus consiste en fait à remplacer ’.’ par ’/’ et ’#’ ; avec’;.’, baseurl est automatiquement ajouté par la méthode supplier(), pointant vers le répertoire Vendor. Ainsi, les paramètres de la méthode supplier() ci-dessus sont finalement analysés dans le répertoire suivant :

​Bibliothèque/Vendeur/PHPMailer/class.PHPMailer.php

L’adresse réelle du répertoire du fichier d’entrée de PHPMailer est :

​Bibliothèque/Vendeur/phpmailer/class.phpmailer.php

Le contenu est le même ! Cependant, j'utilise un serveur Linux, donc le cas est strictement distingué, donc bien sûr je ne peux pas réussir à importer cette classe. La solution est d'introduire supplier() et de le remplacer par :

vendeur(«phpmailer.class#phpmailer’)

De plus, vous devez faire attention à une chose lorsque vous utilisez PHPMailer. Si PHPMailer utilise SMTP pour envoyer des e-mails, PHP doit prendre en charge fsockopen, nous devons donc modifier les fonctions désactivées dans php.ini pour supprimer fscokopen, sinon une erreur d'exécution se produira :

​fsockopen() a été désactivé

Il peut être obtenu via l'attribut ErrorInfo de PHPMailer !

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer