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的详细内容...