好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

thinkphp中调用zendframe work lib的方法 - Thinkphp

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 //shi_mody            $classPart  =  explode ( '_' , $class );           $class2  = implode( '.' , $classPart );           //shi_mody end            foreach  ( $paths   as   $path ){               //var_dump($path.'.'.$class2);                if (import( $path . '.' . $class2 )) //shi_mody:$class=>$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' ];              // import("ORG.Zend.Mail");//这里可以不用import了,另外tp框架里面默认的zend类库是放在ThinkPHP\Extend\里面的,如果使用tp默认的方法,则需要事先import,这时候如果类文件里面又引用了其他的类名,就需要实现import一大串的类                $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;              }          }      } 

查看更多关于thinkphp中调用zendframe work lib的方法 - Thinkphp的详细内容...

  阅读:73次