thinkphp中调用zendframe work lib的方法
想在thinkphp框架中使用zendframe mail的功能,故把操作过程记录以下:
把zendframe Lib下的文件目录全部复制到thinkphp的org目录下,(ThinkPHP\Extend\Library\ORG\)这是thinkphp3.0的目录路径,其他版本可能有所不同。然后写个脚本把文件的后缀由.php改为.class.php
然后就可以调用了,但是如果一个一个的去引用文件会很不爽,所以thinkphp的Config.php文件中加入'APP_AUTOLOAD_PATH' =>'ORG',(自定义搜索路径)。不过这还没完,由于thinkphp的autoload方法里并不能映射zend的类名到相应的文件路径,不得已只好修改thinkphp的autoload方法(通过类名中的下划线来分割拼装路径)。同时还要修改import函数(因为import函数会自动将最后一段的字符串当作类名)
然后,就可以使用我要用的zend_mail类了,代码下面给出.
提示:以前就觉得tp的autoload实现的不好,首先不能扩展,另外不能搜索子目录.
- autoload
- $classPart = explode('_',$class);
- $class2 = implode('.',$classPart);
-
- foreach ($paths as $path){
-
- if(import($path.'.'.$class2))
-
- return ;
- }
import函数:
- if(strpos($class,'ORG/Zend')==0){
- $classname = preg_replace('/\//','_',substr($class,4));
- }else{
- $classname = basename($class);
- }
- if (!class_exists($classname,false)) {
-
- return require_cache($classfile);
- }
改文件名脚本:
- $dir = "Validate/";
- traceDir($dir,"reClass");
- function reClass($file){
- if(strpos($file,"class.php")){
- $nFile = preg_replace('/\.php/',"class.php",$file);
- rename($file,$nFile);
- }
- }
- function traceDir($dir,$callback){
- $h = opendir($dir);
- while(($file=readdir($h))){
- if($file=="." || $file=="..")
- continue;
- if(is_dir($dir.$file)){
- traceDir($dir.$file."/",$callback);
- }else{
-
- call_user_func_array($callback,array($dir.$file));
- }
- }
- }
调用zend_mail:
- class RssAction extends BaseAction{
- public function send(){
- $email = addslashes($_POST['email']);
- $title = addslashes($_POST['title']);
- $cont = $_POST['cont'];
-
- $smtp = new Zend_Mail();
- $host="smtp.qq.com";
- $config = array(
- "port"=>25,
- "auth"=>"Login",
- "username"=>"werwer@qq.com",
- "password"=>"werwer23"
- );
- try{
- $smtpTrans = new Zend_Mail_Transport_Smtp($host,$config);
- $mail = new Zend_Mail();
- $mail->setDefaultTransport($smtpTrans);
- $mail->setBodyHtml($cont);
- $mail->setFrom($config["username"],"kindlerss.net")
- ->addTo($email, $email)
- ->setSubject($title);
- $mail->send();
- }catch(Exception $ex){
- echo $ex->message;
- }
- }
- }