Я являюсь реселлером на cPanel с Apache и PHP 5.5, и мой владелец сервера только что установил последний PHPMailer в общей папке, поэтому к нему можно получить доступ:
require "PHPMailerAutoload.php";
но все мои текущие сайты имеют PHPmailer в моей папке класса, с расширенным классом, чтобы настроить детали почтовой рассылки на каждый сайт.
Итак, мой класс PHP:
require_once "class.phpmailer.php";
class ChoiceMailerSMTP extends PHPMailer {
/**
* Mailer
*
**/
Моя проблема заключается в том, что, поскольку мой парень-сервер надел общую папку, новый PHPMailer, теперь все мои вызовы требуют поиска в общей папке ПЕРЕД поиском в локальной папке и, следовательно, загрузкой неправильного phpmailer.class.php.
Это действительно разочаровывает, хотя в этом случае это (только) хлопот - если он помещает другие файлы в общую папку для себя или для других, как я должен понимать, что мой PHP включает и требует запуска локальных, а не общих файлов?
Есть ли строка в php.ini, которую я могу использовать? Или, может быть, настройка cPanel? require "./file" не работает.
РЕДАКТИРОВАТЬ:
Я занимался некоторыми исследованиями в своей системе и обнаружил, что set include path уже установлен:
include_path = ".:/usr/lib/php:/usr/local/lib/php"
Так любая помощь, почему локальный каталог просматривается только после включенных каталогов путей?
set_include_path
порядок относительных путей зависит от пути включения include, см. set_include_path
. Вы можете либо изменить этот путь, чтобы указать приоритет вашей локальной папки, либо вы можете использовать явный абсолютный путь для включения, чтобы начать с:
require_once __DIR__ . '/class.phpmailer.php';
Что случилось с общей версией? Он старше вас?
Вы можете настроить порядок поиска каталогов, изменив директиву include_path
в php.ini.
Вы все равно должны загружать автозагрузчик, так как он всегда ищет файлы классов по отношению к самому себе, поэтому, подобно предложению @deceze, вы должны:
require_once __DIR__ . '/PHPMailerAutoload.php';