ThinkPHP 3.2中vendor()方法的深入研究及PHPMailer的正确扩展

当我们想在ThinkPHP中引入第三方扩展,而第三方扩展又没有按照ThinkPHP的规范在编写的时候时,就需要将第三方扩展放置到Library/Vendor目录下,当然,这是针对ThinkPHP 3.2而言,低版本则根据情况来看了。

然后需要在Controller或function中使用第三方扩展时,就可以直接使用vendor()方法来进行引用了。

不过当我将PHPMailer放在Vendor目录下后(具体可以参考前面的一篇博客:http://www.xcoder.cn/index.php/archives/889),在本机运行得好好得,最近将程序上传到服务器上时,直接提示

Class ‘PHPMailer’ not found

然后又在本机运行,还是正确!通过前面这片博客可以知道,我是通过

vendor('PHPMailer.class#PHPMailer');

这行代码将PHPMailer引入的。既然提示找不到PHPMailer类,说明没有被正确引入。这是为什么呢?就粗略看了一下vendor()方法的源码,这才发现其实vendor()方法也就是对import()方法进行了一次参数组装,然后还是交给了import()方法处理。

查看import()方法的源码又发现,在import()方法中,对于上面传入参数的解析其实就是将’.’替换成’/’,将’#’替换成了’.’,baseurl则由vendor()方法自动补充上了,指向Vendor目录。所以上面vendor()方法中的参数最终还是被解析成了如下目录:

Library/Vendor/PHPMailer/class.PHPMailer.php

而PHPMailer的入口文件的实际目录地址为:

Library/Vendor/phpmailer/class.phpmailer.php

内容都一样的嘛!不过我用的是Linux的服务器,所以对大小写是严格区分的,这样当然不能成功导入这个类。而解决办法就是将vendor()引入改为:

vendor(‘phpmailer.class#phpmailer’)

另外对于PHPMailer使用时还要注意一点,PHPMailer如果使用SMTP方式发送邮件,需要PHP对fsockopen的支持,所以我们需要修改php.ini中disable_functions中将fscokopen删除,否则会出现运行错误:

fsockopen() has been disabled

通过PHPMailer的ErrorInfo属性可以获取到!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值