サードパーティのクラス ライブラリ
サードパーティのクラス ライブラリとは、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 サイトの他の関連記事を参照してください。