ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP にサードパーティのライブラリをインポートする方法

ThinkPHP にサードパーティのライブラリをインポートする方法

PHPz
PHPz転載
2023-06-03 17:15:341821ブラウズ

サードパーティのクラス ライブラリ

サードパーティのクラス ライブラリとは、ThinkPHP フレームワークやアプリケーション プロジェクトのクラス ライブラリ以外のクラス ライブラリを指し、通常、Smarty、Zend などのシステムのクラス ライブラリなど、サードパーティのシステムまたは製品によって提供されます。

自動読み込みまたはインポート メソッドを使用して以前にインポートされたクラス ライブラリの場合、ThinkPHP の規則では、サフィックスとして .class.php を使用することになっています。そのようなサフィックス以外のサフィックスは、インポート パラメータを通じて制御する必要があります。

しかし、3 番目のタイプのライブラリの場合は、そのような取り決めがないため、その接尾辞は php としか考えられません。他のフレームワークやシステムからクラス ライブラリを簡単に導入するために、ThinkPHP はサードパーティのクラス ライブラリをインポートする機能を特別に提供します。サードパーティのクラス ライブラリは、ThinkPHP システム ディレクトリ/Vendor の下に均一に配置され、vendor メソッドを使用してインポートされます。

ベンダーの方法

文法:###### boolenvendor(クラス,baseUrl,ext)

パラメータの説明:

パラメータの説明

Class は必須であり、インポートされるクラス ライブラリを名前空間の形式で示します。

BaseUrl はオプションで、インポートのベース パスを示します。省略した場合、システムは ThinkPHP システム ディレクトリ/Vendor ディレクトリを使用します。

ext はオプションで、インポートされたクラス ライブラリのサフィックスを示します。デフォルトは .php です。

インポート方式との違いは、ベンダー方式のデフォルトのインポート パスが ThinkPHP システム ディレクトリ/Vendor ディレクトリであり、デフォルトのサフィックスが .php であることです。

個人的な経験の共有:

サードパーティの拡張機能を ThinkPHP に導入する必要があり、そのサードパーティの拡張機能が ThinkPHP の仕様に従って記述されていない場合は、サードパーティの拡張機能を Library/Vendor ディレクトリに配置する必要があります。もちろん、これは ThinkPHP3 用です。 .2 つまり、下位バージョンは状況に応じて異なります。

その後、コントローラーまたは関数でサードパーティの拡張機能を使用する必要がある場合、vendor() メソッドを直接使用してそれを参照できます。

サードパーティライブラリのディレクトリ構造:

関数関数で使用:

最初の方法:

ベンダー('Phpqrcode.phpqrcode');

コードをコピー

# コードをコピー

# /**

*QR コードを生成します

*@paramstring$urlurl 接続

*@paraminteger$size サイズの純粋な数値

​*/

functionqrcode($url,$size=4){

ベンダー('Phpqrcode.phpqrcode');

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

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

}

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

}

コードをコピー

# コードをコピー

# 2 番目の方法:

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

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

コードをコピー

# コードをコピー

# /**

*メールを送る###### *@paramstring$address 複数のアドレスに送信するメールアドレスは配列形式で記述する必要があります

*@paramstring$subjecttitle

*@paramstring$contentコンテンツ

*@returnboolean は成功しました

​*/

functionsend_email($address,$subject,$content){

$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"=>'メールボックスの構成が不完全です');

}

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

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

$phpmailer=new\Phpmailer();

//SMTP サーバーを使用して電子メールを送信するように PHPMailer を設定します

$phpmailer->IsSMTP();

//html形式に設定

$phpmailer->IsHTML(true);

//メールの文字エンコーディングを設定します'

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

//SMTPサーバーを設定します。

$phpmailer->ホスト=$email_smtp;

//「検証が必要」に設定します

$phpmailer->SMTPAuth=true;

//ユーザー名を設定します

$phpmailer->ユーザー名=$email_username;

//パスワードを設定してください###### $phpmailer->パスワード=$email_password;

//メールヘッダーのFromフィールドを設定します。

$phpmailer->From=$email_username;

//送信者名を設定します

$phpmailer->FromName=$email_from_name;

//受信者のアドレスを追加します。これは複数の受信者を追加するために複数回使用できます

if(is_array($address)){

foreach($addressas$addressv){

$phpmailer->AddAddress($addressv);

}

}その他{

$phpmailer->AddAddress($address);

}

//メールのタイトルを設定します

$phpmailer->件名=$件名;

//メール本文を設定します

$phpmailer->Body=$content;

//メールを送る。

if(!$phpmailer->Send()){

$phpmailererror=$phpmailer->エラー情報;

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

}その他{

returnarray("error"=>0);

}

}

コードをコピー

# コードをコピー

# 3 番目の方法:

Alipay ライブラリのディレクトリ構造

ベンダー('Alipay.AlipaySubmit','','.class.php');

注: ベンダーによってロードされるデフォルトのサフィックスは、.php の

です。 パラメータ 1: 必須。名前空間メソッド

# を使用してインポートされるクラス ライブラリを示します。 パラメータ 2: インポートのベース パスを示すオプション。省略した場合、システムは ThinkPHP システム ディレクトリ/ベンダー ディレクトリを使用します。

パラメータ 3: オプション。インポートされたクラス ライブラリのサフィックスを示します。デフォルトは .php です。

Alipay サードパーティのケース コード:

コードをコピー

# コードをコピー

# /**

* Alipay 支払いへジャンプします

*@paramarray$order 注文データには、out_trade_no (注文番号)、price (注文金額)、subject (商品名タイトル)

が含まれている必要があります。 ​*/

Functionipay($order){

ベンダー('Alipay.AlipaySubmit','','.class.php');

//設定を取得

# $config=C('ALIPAY_CONFIG');

$data=配列(

"_input_charset"=>$config['input_charset'],//エンコード形式

"logistics_fee"=>"0.00",//物流手数料

"logistics_payment"=>"SELLER_PAY",//物流支払方法 SELLER_PAY (売り手負担)、BUYER_PAY (買い手負担)

"logistics_type"=>"EXPRESS",//物流タイプ EXPRESS (速達)、POST (船便)、EMS (EMS)

"notify_url"=>$config['notify_url'],//支払いステータス通知を非同期で受信するためのリンク

"out_trade_no"=>$order['out_trade_no'],//注文番号

"partner"=>$config['partner'],//パートナーは Alipay Merchant Version Personal Center から取得されます

"payment_type"=>"1", //支払いタイプはリクエストのpayment_typeパラメータに対応しており、そのまま返されます。 1

に設定するだけです "price"=>$order['price'],//注文価格の単位は元

です //"price"=>0.01,////価格調整はテストに使用されます

"quantity"=>"1",//価格と数量を total_fee に置き換えることができます。つまり、total_fee が存在する場合、価格と数量は存在できず、価格と数量が存在する場合、total_fee は存在できません。 (理解できませんでした。わかりました。このパラメータは無視してください)

"receive_address"=>'1',//荷受人の住所への即時支払い方法はこのパラメータを無視できます

"receive_mobile"=>'1',//荷受人の携帯電話番号の即時支払い方法を無視します

"receive_name"=>'1',//荷受人の名前の即時支払い方法は無視してください

"receive_zip"=>'1',//荷受人の郵便番号の即時到着方法は無視できます

"return_url"=>$config['return_url'], //ページ ジャンプ同期通知ページ パス Alipay がリクエストを処理した後、現在のページはマーチャント Web サイト内の指定されたページの http パスに自動的にジャンプします。

"seller_email"=>$config['seller_email'],//電子メールは Alipay Merchant Version Personal Center から取得されます

"service"=>"create_direct_pay_by_user", //インターフェース名は create_direct_pay_by_user

に固定されます "show_url"=>$config['show_url'], //製品表示 URL、チェックアウト ページでの製品表示のハイパーリンク。

"subject"=>$order['subject']//商品名、商品タイトル/取引タイトル/注文タイトル/注文キーワードなど

);

$alipay=new\AlipaySubmit($config);

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

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

echo$go_pay;

}

コードをコピー

# コードをコピー

# しかし、PHPMailer を Vendor ディレクトリに置くと、このマシンでは正常に動作しましたが、最近、プログラムをサーバーにアップロードすると、クラス "PHPMailer" が見つからないというメッセージが直接表示され、このマシンで再度実行すると、正常に動作しました。まだ正しいです!前回のブログからわかるように、vendor('PHPMailer.class#PHPMailer');

を渡しました。 このコード行では PHPMailer が導入されています。プロンプトでは PHPMailer クラスが見つからないため、正しく導入されていないことを意味します。どうしてこれなの?

Vendor() メソッドのソース コードをざっと見たところ、vendor() メソッドは実際には import() メソッドのパラメータをアセンブルし、その後は import() メソッドに処理を任せていることがわかりました。 import() メソッドのソース コードを見ると、import() メソッドでは、上記の受信パラメータの分析が実際には ’.’ を ’/’ および ’#&rsquo に置き換えることであることがわかりました。 ; ;.’ を使用すると、baseurl は、vendor ディレクトリを指す、vendor() メソッドによって自動的に追加されます。したがって、上記のvendor()メソッドのパラメータは最終的に次のディレクトリに解析されます:

ライブラリ/ベンダー/PHPMailer/class.PHPMailer.php

PHPMailer のエントリ ファイルの実際のディレクトリ アドレスは次のとおりです:

ライブラリ/ベンダー/phpmailer/class.phpmailer.php

内容は同じです!ただし、私は Linux サーバーを使用しているため、厳密に大文字と小文字が区別されるため、当然このクラスは正常にインポートできません。解決策は、vendor() を導入し、次のように変更することです。 ベンダー(‘phpmailer.class#phpmailer’)

さらに、PHPMailer を使用するときに注意すべき点が 1 つあります。PHPMailer が SMTP を使用して電子メールを送信する場合、PHP は fsockopen をサポートする必要があるため、php.ini の disable_functions を変更して fscokopen を削除する必要があります。そうしないと、実行エラーが発生します。

# fsockopen() が無効になりました

# これは、PHPMailer の ErrorInfo 属性を通じて取得できます。

以上がThinkPHP にサードパーティのライブラリをインポートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。