CodeIgniter base_url()被cron job调用时不工作


CodeIgniter base_url() not working when called by cron job

我创建了一个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帮助器,然后等待明天,看看它是否有效。

你知道是什么导致了这个问题吗?

谢谢

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

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

如果你让它空CodeIgniter将尝试自动检测url

基本上,如果你的$config["base_url"]没有设置,CodeIgniter试图从$_SERVER['HTTP_HOST']中找出它自己。

因此,当您访问testdomain时,$_SERVER['HTTP_HOST']的内容为testdomain

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

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

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

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

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