Rumah >rangka kerja php >ThinkPHP >Cara mengimport perpustakaan pihak ketiga dalam ThinkPHP
Pustaka kelas pihak ketiga
Perpustakaan kelas pihak ketiga merujuk kepada perpustakaan kelas lain selain rangka kerja ThinkPHP dan perpustakaan kelas projek aplikasi Ia biasanya disediakan oleh sistem atau produk pihak ketiga, seperti perpustakaan kelas Smarty, Zend dan sistem lain.
Untuk perpustakaan kelas yang diimport lebih awal menggunakan pemuatan automatik atau kaedah import, konvensyen ThinkPHP adalah menggunakan .class.php kerana akhiran bukan sedemikian perlu dikawal melalui parameter import.
Tetapi untuk perpustakaan kategori ketiga, kerana tidak ada perjanjian sedemikian, akhirannya hanya boleh dianggap sebagai php. Untuk memperkenalkan perpustakaan kelas dengan mudah daripada rangka kerja dan sistem lain, ThinkPHP secara khusus menyediakan fungsi mengimport perpustakaan kelas pihak ketiga. Perpustakaan kelas pihak ketiga diletakkan secara seragam di bawah direktori/Vendor sistem ThinkPHP dan diimport menggunakan kaedah vendor.
Kaedah vendor
Tatabahasa:
boolenvendor(class,baseUrl,ext)
Perihalan parameter:
Perihalan parameter
Kelas diperlukan, menunjukkan perpustakaan kelas akan diimport, dalam bentuk ruang nama.
baseUrl adalah pilihan, menunjukkan laluan asas import Jika ditinggalkan, sistem menggunakan direktori sistem ThinkPHP/direktori Vendor.
ext adalah pilihan, menunjukkan akhiran perpustakaan kelas yang diimport, lalai ialah .php.
Perbezaan daripada kaedah import ialah laluan import lalai kaedah vendor ialah direktori sistem ThinkPHP/direktori Vendor, dan akhiran lalai ialah .php.
Perkongsian pengalaman peribadi:
Apabila kami ingin memperkenalkan sambungan pihak ketiga ke dalam ThinkPHP, dan sambungan pihak ketiga tidak ditulis mengikut spesifikasi ThinkPHP, kami perlu meletakkan sambungan pihak ketiga dalam direktori Perpustakaan/Vendor Sudah tentu, ini untuk ThinkPHP3 .2 Dalam erti kata lain, versi yang lebih rendah bergantung kepada keadaan.
Kemudian apabila anda perlu menggunakan sambungan pihak ketiga dalam Pengawal atau fungsi, anda boleh terus menggunakan kaedah vendor() untuk merujuknya.
Struktur direktori perpustakaan pihak ketiga:
Digunakan dalam fungsi fungsi:
Kaedah pertama:
Vendor('Phpqrcode.phpqrcode');
Salin kod
Salin kod
/**
*Jana kod QR
*sambungan @paramstring$urlurl
*@paraminteger$size saiz nombor tulen
,*/
functionqrcode($url,$size=4){
Vendor('Phpqrcode.phpqrcode');
if(strpos($url,'http')===false){
$url='http://'.$url;
}
QRcode::png($url,false,QR_ECLEVEL_L,$size,2,false,0xFFFFFF,0x000000);
}
Salin kod
Salin kod
Kaedah kedua:
memerlukan'./ThinkPHP/Library/Org/Nx/class.phpmailer.php';
memerlukan'./ThinkPHP/Library/Org/Nx/class.smtp.php';
Salin kod
Salin kod
/**
*Hantar e-mel
*@paramstring$address Alamat e-mel yang akan dihantar ke berbilang alamat perlu ditulis dalam bentuk tatasusunan
*@paramstring$tajuk subjek
*@paramstring$kandungan kandungan
*@returnboolean berjaya
,*/
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(kosong($email_smtp)||kosong($email_username)||kosong($email_kata laluan)||kosong($email_from_name)){
returnarray("error"=>1,"message"=>'Konfigurasi peti mel tidak lengkap');
}
memerlukan'./ThinkPHP/Library/Org/Nx/class.phpmailer.php';
memerlukan'./ThinkPHP/Library/Org/Nx/class.smtp.php';
$phpmailer=newPhpmailer();
//Sediakan PHPMailer untuk menggunakan pelayan SMTP untuk menghantar e-mel
$phpmailer->IsSMTP();
//Tetapkan kepada format html
$phpmailer->IsHTML(true);
//Tetapkan pengekodan aksara e-mel'
$phpmailer->CharSet='UTF-8';
//Sediakan pelayan SMTP.
$phpmailer->Host=$email_smtp;
//Tetapkan kepada "Memerlukan pengesahan"
$phpmailer->SMTPauth=true;
//Tetapkan nama pengguna
$phpmailer->Username=$email_username;
//Tetapkan kata laluan
$phpmailer->Kata Laluan=$email_password;
//Tetapkan medan Daripada pengepala e-mel.
$phpmailer->From=$email_username;
//Tetapkan nama pengirim
$phpmailer->FromName=$email_from_name;
//Tambah alamat penerima, yang boleh digunakan berbilang kali untuk menambah berbilang penerima
if(is_array($address)){
foreach($addressas$addressv){
$phpmailer->AddAddress($addressv);
}
}lain{
$phpmailer->AddAddress($address);
}
//Tetapkan tajuk e-mel
$phpmailer->Subject=$subject;
//Tetapkan badan e-mel
$phpmailer->Body=$content;
//Hantar e-mel.
jika(!$phpmailer->Hantar()){
$phpmailererror=$phpmailer->ErrorInfo;
returnarray("error"=>1,"message"=>$phpmailererror);
}lain{
returnarray("error"=>0);
}
}
Salin kod
Salin kod
Kaedah ketiga:
Struktur direktori perpustakaan Alipay
vendor('Alipay.AlipaySubmit','','.class.php');
Nota: Akhiran lalai yang dimuatkan oleh Vendor ialah .php
Parameter 1: Diperlukan, menunjukkan perpustakaan kelas untuk diimport, menggunakan kaedah ruang nama
Parameter 2: Pilihan, menunjukkan laluan asas import Jika ditinggalkan, sistem menggunakan direktori sistem ThinkPHP/direktori Vendor.
Parameter tiga: Pilihan, menunjukkan akhiran perpustakaan kelas yang diimport, lalai ialah .php.
Kod kes pihak ketiga Alipay:
Salin kod
Salin kod
/**
* Lompat ke Alipay untuk membayar
*Data pesanan @paramarray$order mesti termasuk out_trade_no (nombor pesanan), harga (jumlah pesanan), subjek (tajuk nama produk)
,*/
functionalipay($order){
vendor('Alipay.AlipaySubmit','','.class.php');
//Dapatkan konfigurasi
$config=C('ALIPAY_CONFIG');
$data=array(
"_input_charset"=>$config['input_charset'],//Format pengekodan
"logistics_fee"=>"0.00",//Logistics fee
"logistics_payment"=>"SELLER_PAY", //Kaedah pembayaran Logistik SELLER_PAY (penjual menanggung barang), BUYER_PAY (pembeli menanggung barang)
"logistics_type"=>"EXPRESS",//Logistic type EXPRESS (express), POST (surface mail), EMS (EMS)
"notify_url"=>$config['notify_url'],//Pautan untuk menerima pemberitahuan status pembayaran secara tidak segerak
"out_trade_no"=>$order['out_trade_no'],//Nombor pesanan
"partner"=>$config['partner'],//Partner diperoleh daripada Pusat Peribadi Versi Merchant Alipay
"payment_type"=>"1",//Jenis pembayaran sepadan dengan parameter payment_type dalam permintaan dan dikembalikan seperti sedia ada. Hanya tetapkan kepada 1
"price"=>$order['price'],//Unit harga pesanan ialah yuan
//"price"=>0.01,////Pelarasan harga digunakan untuk ujian
"kuantiti"=>"1",//harga dan kuantiti boleh menggantikan jumlah_yuran. Iaitu, jika jumlah_bayaran wujud, harga dan kuantiti tidak boleh wujud jika harga dan kuantiti wujud, jumlah_bayaran tidak boleh wujud. (Saya tidak faham; okey; abaikan sahaja parameter ini)
"receive_address"=>'1',//Alamat penerima dikreditkan serta-merta, abaikan sahaja parameter ini
"receive_mobile"=>'1',//Abaikan sahaja kaedah pembayaran segera nombor telefon mudah alih penerima
"receive_name"=>'1',//Abaikan sahaja kaedah pembayaran segera nama penerima
"receive_zip"=>'1',//Anda boleh mengabaikan kaedah ketibaan segera kod pos penerima
"return_url"=>$config['return_url'], //Laluan halaman pemberitahuan penyegerakan lompat halaman Selepas Alipay memproses permintaan, halaman semasa secara automatik melompat ke laluan http halaman yang ditentukan dalam tapak web pedagang.
"seller_email"=>$config['seller_email'],//e-mel diperoleh daripada Pusat Peribadi Versi Merchant Alipay
"service"=>"create_direct_pay_by_user", //Nama antara muka ditetapkan untuk create_direct_pay_by_user
"show_url"=>$config['show_url'], //URL paparan produk, hiperpautan untuk paparan produk pada halaman pembayaran.
"subject"=>$order['subject']//Nama produk, tajuk produk/tajuk transaksi/tajuk pesanan/kata kunci pesanan, dsb.
);
$alipay=newAlipaySubmit($config);
$new=$alipay->buildRequestPara($data);
$go_pay=$alipay->buildRequestForm($new,'get','pay');
echo$go_pay;
}
Salin kod
Salin kod
Walau bagaimanapun, apabila saya meletakkan PHPMailer dalam direktori Vendor, ia berjalan dengan baik pada mesin ini Baru-baru ini, apabila saya memuat naik program ke pelayan, ia secara langsung menggesa Kelas "PHPMailer" tidak ditemui dan kemudian menjalankannya pada mesin ini sekali lagi, dan ia adalah. masih betul! Seperti yang anda boleh tahu dari blog sebelum ini, saya menggunakan vendor('PHPMailer.class#PHPMailer');
Barisan kod ini memperkenalkan PHPMailer. Memandangkan ia menggesa bahawa kelas PHPMailer tidak dapat ditemui, ini bermakna ia belum diperkenalkan dengan betul. kenapa ni?
Saya melihat sepintas lalu pada kod sumber kaedah vendor(), dan mendapati bahawa kaedah vendor() sebenarnya memasang parameter kaedah import() dan kemudian menyerahkannya kepada kaedah import() untuk diproses. Melihat pada kod sumber kaedah import(), kami mendapati bahawa dalam kaedah import(), analisis parameter masuk di atas sebenarnya untuk menggantikan ’.’ dengan ’/’ dan ’#&rsquo ; dengan’.’, baseurl ditambah secara automatik oleh kaedah vendor(), menunjuk ke direktori Vendor. Jadi parameter dalam kaedah vendor() di atas akhirnya dihuraikan ke dalam direktori berikut:
Library/Vendor/PHPMailer/class.PHPMailer.php
Alamat direktori sebenar fail kemasukan PHPMailer ialah:
Library/Vendor/phpmailer/class.phpmailer.php
Kandungannya sama! Walau bagaimanapun, saya menggunakan pelayan Linux, jadi kes itu dibezakan dengan ketat, jadi sudah tentu saya tidak boleh berjaya mengimport kelas ini. Penyelesaiannya ialah memperkenalkan vendor() dan menukarnya kepada:
vendor(‘phpmailer.class#phpmailer’)
Di samping itu, anda harus memberi perhatian kepada satu perkara apabila menggunakan PHPMailer Jika PHPMailer menggunakan SMTP untuk menghantar e-mel, PHP perlu menyokong fsockopen, jadi kami perlu mengubah suai disable_functions dalam php.ini untuk memadam fscokopen, jika tidak, ralat berjalan akan berlaku:
fsockopen()telah dilumpuhkan
Ia boleh diperolehi melalui atribut ErrorInfo PHPMailer!
Atas ialah kandungan terperinci Cara mengimport perpustakaan pihak ketiga dalam ThinkPHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!