Я создал PHP-скрипт, который будет вызываться один раз в день с помощью задания cron. Задание cron работает отлично и создает шаблон электронной почты HTML. У меня есть среда разработки (localhost) и тестовая среда.
Моя единственная проблема заключается в шаблоне электронной почты HTML, есть изображение, которое не отображается в моей тестовой среде. Если я проверяю элемент, путь к изображению устанавливается на localhost/images/image_name.jpg. Я не понимаю, почему в тестовой среде путь установлен на localhost; это должно быть testdomain/images/image_name.jpg вместо localhost/images/image_name.jpg.
Если я вручную вызову скрипт через браузер в URL-адресе, я получу правильный путь к изображению, и изображение будет хорошо в тестовой среде. Почему он работает при вызове вручную, а не когда он вызван работой cron?
Да, я автозагружаю помощник URL в файле autoload.php.
Вот мое изображение <img src="'. base_url().'images/image_name.jpg" alt=""/>
Я задумываюсь загрузить хелпер url внутри файла PHP и ждать завтра, чтобы узнать, работает ли это.
Любые идеи, что вызывает эту проблему?
благодаря
Базовый URL должен быть абсолютным, включая протокол:
$config['base_url'] = "http://somesite.com/somedir/";
Если вы оставите его пустым, CodeIgniter попытается автоопределить URL-адрес.
В принципе, если ваш $config["base_url"]
не установлен, CodeIgniter пытается определить его сам из $_SERVER['HTTP_HOST']
.
Таким образом, при доступе к тестовому домену содержимое $_SERVER['HTTP_HOST']
является testdomain.
Но если вы позволите серверу получить доступ к нему из http://localhost/, это "localhost",
Вероятно, поэтому это не работает. Вы должны либо установить базовый url в $config["base_url"]
, либо (не рекомендуется) жестко кодировать домен в <image>
.
Изменение: вы также можете попробовать дать ему динамический базовый url, проверьте приведенный ниже код:
$config["base_url"] = !isset($_SERVER['HTTP_HOST']) || $_SERVER['HTTP_HOST'] == "localhost" ? "http(s)://testdomain/" : '';
Я понял. Изображение размещено на частном сервере. Когда я вызываю сценарий через браузер (для целей тестирования), изображение отлично, потому что я зарегистрирован как пользователь. История отличается, когда она называется заданием cron. Когда задание cron вызывает скрипт, веб-приложение не знает, кто вы. Цель работы cron - отправить электронное письмо после регистрации через 3 дня, а когда клиент получит письмо, изображение будет повреждено, потому что оно размещено на частном сервере. Поскольку мы работаем над тремя различными веб-приложениями, и один из них является общедоступным сервером, я сохранил изображение на этом общедоступном сервере и добавил константу, чтобы указать на новое местоположение на общедоступном сервере. Несмотря на то, что мы работаем над тремя различными веб-приложениями, все приложения несколько связаны друг с другом, и имеет смысл хранить изображение на общедоступном сервере.
<img src="<?php echo base_url() .'images/image_name.jpg ?>" alt="" />