生产服务器部署Composer安装的PHPMailer遇文件及类找不到错误求助
解决PHPMailer部署到生产服务器的常见问题
先来看你遇到的第一个错误:
[16-Jan-2018 08:36:33] PHP Warning: require_once(DIR/composer/autoload_real.php) [function.require-once]: failed to open stream: No such file or directory in /public_html/netWorks/emailtests/vendor/autoload.php on line 5
这个问题大概率是上传文件不完整导致的。你本地用Composer生成的vendor目录里,composer子文件夹下的autoload_real.php等核心文件没传到服务器上。给你几个修复步骤:
- 先在本地重新执行
composer install,确保所有依赖文件都生成完整 - 用FTP或部署工具把整个
vendor目录完整上传,别漏了composer子目录里的任何文件 - 检查服务器上的文件权限,确保PHP能读取
vendor目录下的文件(一般设置目录权限为755,文件权限为644即可)
升级PHP到5.6后出现的新错误:
[16-Jan-2018 09:23:03 America/Denver] PHP Fatal error: Class 'PHPMailer' not found in /public_html/netWorks/emailtests/index.php on line 4
这是因为新版PHPMailer使用了命名空间,你的代码里没有引入命名空间就直接实例化类,PHP找不到它。有两种简单的解决方法:
方法1:引入命名空间
在代码开头添加命名空间声明:
<?php require 'vendor/autoload.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; // 要使用异常类的话也需要引入 $mail = new PHPMailer(true); // 后续代码保持不变...
方法2:使用完整命名空间路径实例化
如果不想单独引入命名空间,可以直接用完整路径实例化类:
<?php require 'vendor/autoload.php'; $mail = new PHPMailer\PHPMailer\PHPMailer(true); // 后续代码保持不变...
最后再给你几个额外的排查建议:
- 确认服务器上的PHP版本确实是5.6及以上(可以通过
phpinfo()或php -v命令查看),PHPMailer 6.x版本要求PHP 5.5+,版本过低会有兼容问题 - 检查本地的
composer.json,确保require部分包含"phpmailer/phpmailer": "^6.0"之类的正确配置 - 如果服务器支持执行Composer,建议直接在服务器上运行
composer install,避免本地和服务器环境差异导致的文件缺失问题
内容的提问来源于stack exchange,提问作者KevMoe
相关产品推荐
相关产品推荐

