CodeIgniter base_url()在被cron作业调用时无法正常工作

时间:2015-09-03 11:52:30

标签: php codeigniter cron

我创建了一个PHP脚本,每天由cron作业调用一次。 cron作业正常工作并创建HTML电子邮件模板。 我有一个开发(localhost)环境和一个测试环境。

我唯一的问题是在HTML电子邮件模板中,有一个图像无法在我的测试环境中呈现。如果我检查元素,则图像路径设置为localhost / images / image_name.jpg。我不明白为什么在测试环境中路径设置为localhost;它应该是testdomain / images / image_name.jpg而不是localhost / images / image_name.jpg。

如果我通过网址中的浏览器手动调用脚本,我会得到正确的图像路径,并且图像在测试环境中正常。 为什么在手动调用时才有效,而不是在cron作业调用时?

是的,我正在自动加载autoload.php文件中的url帮助器。

这是我的形象     <img src="'. base_url() .'images/image_name.jpg" alt="" />

我很想在PHP文件中加载url帮助器,明天再等一下,看看是否有效。

任何想法是什么导致了这个问题?

由于

3 个答案:

答案 0 :(得分:1)

基本上,如果您的$_SERVER['HTTP_HOST']未设置,则CodeIgniter会尝试从$_SERVER['HTTP_HOST']开始计算。

因此,当您访问 testdomain 时,$config["base_url"]的内容为 testdomain

但是,如果你让服务器从http://localhost/访问它,它就是&#34; localhost&#34;

这可能 为什么它不起作用。您应该在<image>中设置基本网址,或者(不推荐)将域硬编码到$config["base_url"] = !isset($_SERVER['HTTP_HOST']) || $_SERVER['HTTP_HOST'] == "localhost" ? "http(s)://testdomain/" : ''; 标记中。

编辑: 你也可以尝试给它一个动态的基本网址,检查下面的代码:

public ActionResult RecuperaLocalidadesPorUsuario(int usuarioId)
{
    BpUsuario m = new BpUsuario();
    IList<Localidade> states = m.ObterPorId(usuarioId).Localidades.ToList();
    states.Add(m.ObterPorId(usuarioId).UsuaAreaPadrao);
    var result = (from s in states.Where(x => x != null).Distinct().ToList()
                  select new { id = s.LocaCodigo, name = s.LocaNome}
                 ).ToList();

    return Json(result, JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:1)

基本URL应该是绝对的,包括协议:

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

如果您将其留空,CodeIgniter将尝试自动检测该网址。

答案 2 :(得分:0)

我明白了。该映像托管在专用服务器上。当我通过浏览器调用脚本(用于测试目的)时,图像很好,因为我以用户身份登录。当cron工作调用它时,故事就不同了。当cron作业调用脚本时,Web应用程序不知道你是谁。 cron作业的目的是在注册3天后发送电子邮件,当客户收到电子邮件时,图像被破坏,因为它托管在私人服务器上。由于我们正在处理3个不同的Web应用程序,其中一个是公共服务器,因此我将图像存储在该公共服务器上,并添加了一个常量以指向公共服务器上的新位置。即使我们正在开发3种不同的网络应用程序,但所有应用程序之间都有一定程度的连接,将图像存储在公共服务器上是有意义的。