【问题标题】:CodeIgniter base_url() not working when called by cron jobCodeIgniter base_url() 在被 cron 作业调用时不起作用
【发布时间】:2015-09-03 11:52:30
【问题描述】:

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

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

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

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

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

我很想在 PHP 文件中加载 url 帮助程序并等待明天看看是否有效。

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

谢谢

【问题讨论】:

  • 无论你在哪里使用 base_url 总是使用 echo 所以<img src="<?php echo base_url() .'images/image_name.jpg ?>" alt="" />
  • cron作业中如何调用脚本?

标签: php codeigniter cron


【解决方案1】:

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

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

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

【讨论】:

  • 我的想法是,如果将其留空,CodeIgniter 将尝试自动检测 url,但是为什么通过 url 调用脚本时它可以工作,而当它被cron 工作?这没有任何意义。我将尝试在测试环境中设置基本 url 并等到明天查看结果。谢谢
【解决方案2】:

基本上,如果您的$config["base_url"] 未设置,CodeIgniter 会尝试从$_SERVER['HTTP_HOST'] 自行计算。

所以,当你访问 testdomain 时,$_SERVER['HTTP_HOST'] 的内容是 testdomain

但如果你让服务器从http://localhost/ 访问它,它是“localhost”

可能是它不起作用的原因。您应该在$config["base_url"] 中设置一个基本网址,或者(不推荐)将域硬编码到<image> 标记中。

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

$config["base_url"] = !isset($_SERVER['HTTP_HOST']) || $_SERVER['HTTP_HOST'] == "localhost" ? "http(s)://testdomain/" : '';

【讨论】:

  • 请参阅上面的回复。无论如何,我会尝试您的建议并尝试一下。感谢您的回复。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2016-11-08
    • 2016-04-11
    • 1970-01-01
    • 2017-11-21
    • 2021-08-24
    • 1970-01-01
    相关资源
    最近更新 更多