CodeIgniter base_url () не работает, когда вызывается заданием cron

1

Я создал 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 и ждать завтра, чтобы узнать, работает ли это.

Любые идеи, что вызывает эту проблему?

благодаря

  • 0
    независимо от того, где вы используете base_url, всегда используйте с ним echo, поэтому <img src="<?php echo base_url() .'images/image_name.jpg ?>" alt="" />
  • 0
    Как вы называете скрипт в работе cron?
Теги:
codeigniter
cron

3 ответа

1

Базовый URL должен быть абсолютным, включая протокол:

$config['base_url'] = "http://somesite.com/somedir/";

Если вы оставите его пустым, CodeIgniter попытается автоопределить URL-адрес.

  • 0
    Я понял, что если вы оставите это поле пустым, CodeIgniter попытается автоматически определить URL-адрес, но почему он работает при вызове скрипта через URL-адрес, тогда как он не работает, когда он вызывается заданием cron? Это просто не имеет смысла. Я постараюсь установить базовый URL в тестовой среде и подожду до завтра, чтобы просмотреть результаты. Спасибо
1

В принципе, если ваш $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/" : '';
  • 0
    Пожалуйста, смотрите ответ выше. В любом случае, я попробую ваше предложение и попробую. Спасибо за ваш ответ.
0

Я понял. Изображение размещено на частном сервере. Когда я вызываю сценарий через браузер (для целей тестирования), изображение отлично, потому что я зарегистрирован как пользователь. История отличается, когда она называется заданием cron. Когда задание cron вызывает скрипт, веб-приложение не знает, кто вы. Цель работы cron - отправить электронное письмо после регистрации через 3 дня, а когда клиент получит письмо, изображение будет повреждено, потому что оно размещено на частном сервере. Поскольку мы работаем над тремя различными веб-приложениями, и один из них является общедоступным сервером, я сохранил изображение на этом общедоступном сервере и добавил константу, чтобы указать на новое местоположение на общедоступном сервере. Несмотря на то, что мы работаем над тремя различными веб-приложениями, все приложения несколько связаны друг с другом, и имеет смысл хранить изображение на общедоступном сервере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню