>PHP 프레임워크 >ThinkPHP >ThinkPHP에서 타사 라이브러리를 가져오는 방법

ThinkPHP에서 타사 라이브러리를 가져오는 방법

PHPz
PHPz앞으로
2023-06-03 17:15:341895검색

타사 라이브러리

타사 클래스 라이브러리는 ThinkPHP 프레임워크 및 애플리케이션 프로젝트 클래스 라이브러리 이외의 다른 클래스 라이브러리를 의미하며 일반적으로 Smarty, Zend 및 기타 시스템의 클래스 라이브러리와 같은 타사 시스템 또는 제품에서 제공됩니다.

이전에 자동 로드 또는 가져오기 방법을 사용하여 가져온 클래스 라이브러리의 경우 ThinkPHP 규칙은 .class.php를 접미사로 사용하는 것입니다. 이러한 접미사가 아닌 경우 가져오기 매개변수를 통해 제어해야 합니다.

그러나 세 번째 유형의 라이브러리의 경우 그러한 합의가 없기 때문에 해당 접미사는 php로만 간주될 수 있습니다. 다른 프레임워크 및 시스템의 클래스 라이브러리를 쉽게 도입하기 위해 ThinkPHP는 특별히 타사 클래스 라이브러리를 가져오는 기능을 제공합니다. 타사 클래스 라이브러리는 ThinkPHP 시스템 디렉터리/Vendor 아래에 동일하게 배치되며 공급업체 메서드를 사용하여 가져옵니다.

판매자 방식

문법:

boolenvendor(class,baseUrl,ext)

매개변수 설명:

매개변수 설명

네임스페이스 형식으로 가져올 클래스 라이브러리를 나타내는 클래스가 필요합니다.

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);

}

​코드 복사

​코드 복사

두 번째 방법:

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

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

​코드 복사

​코드 복사

​/**

*이메일 보내기

*@paramstring$address 여러 주소로 보낼 이메일 주소는 배열 형식으로 작성해야 합니다

*@paramstring$제목

*@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(비어 있음($email_smtp)||비어 있음($email_username)||비어 있음($email_password)||비어 있음($email_from_name)){

returnarray("error"=>1,"message"=>'메일함 구성이 완료되지 않았습니다.');

}

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

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

​$phpmailer=newPhpmailer();

//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;

//이메일 헤더의 보낸 사람 필드를 설정합니다.

​$phpmailer->From=$email_username;

//발신자 이름 설정

​$phpmailer->FromName=$email_from_name;

//수신자 주소를 추가합니다. 여러 수신자를 추가하는 데 여러 번 사용할 수 있습니다

​if(is_array($address)){

​foreach($addressas$addressv){

​$phpmailer->주소 추가($addressv);

}

}그밖에{

​$phpmailer->주소 추가($address);

}

//이메일 제목 설정

​$phpmailer->제목=$subject;

//이메일 본문 설정

​$phpmailer->Body=$content;

//이메일을 보내.

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

​$phpmailererror=$phpmailer->ErrorInfo;

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

}그밖에{

returnarray("error"=>0);

}

}

​코드 복사

​코드 복사

세 번째 방법:

Alipay 라이브러리 디렉토리 구조

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

참고: 공급업체가 로드하는 기본 접미사는 .php

입니다. 매개변수 1: 필수, 네임스페이스 메소드를 사용하여 가져올 클래스 라이브러리를 나타냅니다

매개변수 2: 선택사항, 가져오기의 기본 경로를 나타냅니다. 생략할 경우 시스템은 ThinkPHP 시스템 디렉터리/Vendor 디렉터리를 사용합니다.

매개변수 3: 선택사항. 가져온 클래스 라이브러리 접미사를 나타냅니다. 기본값은 .php입니다.

Alipay 제3자 케이스 코드:

​코드 복사

​코드 복사

​/**

* 결제하려면 Alipay로 이동하세요

*@paramarray$order 주문 데이터에는 out_trade_no(주문번호), 가격(주문금액), 제목(상품명 제목)이 포함되어야 합니다

​*/

기능적ipay($order){

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

//구성 가져오기

​$config=C('ALIPAY_CONFIG');

​$data=배열(

"_input_charset"=>$config['input_charset'],//인코딩 형식

"logistics_fee"=>"0.00",//물류비

"logistics_paid"=>"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'],//알리페이 가맹점 버전 개인센터에서 파트너를 구합니다

"결제_유형"=>"1",//결제 유형은 요청의 Payment_type 매개변수에 해당하며 그대로 반환됩니다. 그냥 1

으로 설정하세요 "price"=>$order['price'],//주문 가격 단위는 위안

//"가격"=>0.01,////테스트를 위해 가격 조정

"수량"=>"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가 요청을 처리한 후 현재 페이지가 자동으로 가맹점 웹사이트에서 지정된 페이지의 http 경로로 이동합니다.

"seller_email"=>$config['seller_email'],//이메일은 Alipay 가맹점 버전 개인센터에서 가져왔습니다

"service"=>"create_direct_pay_by_user", //인터페이스 이름은 create_direct_pay_by_user

로 고정됩니다. "show_url"=>$config['show_url'], //제품 표시 URL, 결제 페이지에 제품 표시를 위한 하이퍼링크입니다.

"subject"=>$order['subject']//상품명, 상품명/거래명/주문명/주문 키워드 등

);

​$alipay=newAlipaySubmit($config);

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

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

echo$go_pay;

}

​코드 복사

​코드 복사

그러나 Vendor 디렉터리에 PHPMailer를 넣으면 이 컴퓨터에서 제대로 실행되었습니다. 최근에 프로그램을 서버에 업로드했을 때 클래스 "PHPMailer"를 찾을 수 없다는 메시지가 직접 표시되고 이 컴퓨터에서 다시 실행되었습니다. 아직도 맞아! 이전 블로그에서도 알 수 있듯이 저는 Vendor('PHPMailer.class#PHPMailer');

를 사용합니다. 이 코드 줄은 PHPMailer를 소개합니다. 프롬프트에서 PHPMailer 클래스를 찾을 수 없으므로 해당 클래스가 올바르게 도입되지 않았음을 의미합니다. 왜 이런거야?

Vendor() 메소드의 소스 코드를 대략적으로 살펴본 결과, Vendor() 메소드가 실제로 import() 메소드의 매개변수를 조합한 다음 이를 import() 메소드에 맡겨 처리한다는 사실을 알게 되었습니다. import() 메소드의 소스 코드를 살펴보면 import() 메소드에서 위의 수신 매개변수 분석이 실제로 ’.’ 및 ’#’로 대체된다는 것을 알 수 있습니다. ;.'를 사용하면 Vendor 디렉터리를 가리키는 baseurl이 자동으로 추가됩니다. 따라서 위의 Vendor() 메소드의 매개변수는 결국 다음 디렉토리로 구문 분석됩니다.

​라이브러리/공급업체/PHPMailer/class.PHPMailer.php

PHPMailer 항목 파일의 실제 디렉토리 주소는 다음과 같습니다:

​라이브러리/공급업체/phpmailer/class.phpmailer.php

내용은 똑같습니다! 하지만 Linux 서버를 사용하고 있기 때문에 케이스가 엄격하게 구분되어 있으므로 당연히 이 클래스를 성공적으로 import할 수는 없습니다. 해결책은 Vendor()를 도입하고 다음과 같이 변경하는 것입니다.

공급업체(‘phpmailer.class#phpmailer’)

또한 PHPMailer를 사용할 때 한 가지 주의해야 할 점은 PHPMailer가 SMTP를 사용하여 이메일을 보내는 경우 PHP는 fsockopen을 지원해야 하므로 fscokopen을 삭제하려면 php.ini의 비활성화_함수를 수정해야 합니다. 그렇지 않으면 실행 오류가 발생합니다.

​fsockopen()이 비활성화되었습니다

PHPMailer의 ErrorInfo 속성을 통해 얻을 수 있습니다!

위 내용은 ThinkPHP에서 타사 라이브러리를 가져오는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제