Cron产生的结果与手动运行文件时产生的结果不同


Cron produces different results than when a file is run manually?

我完全懵了。我有一个文件,我需要每天运行两次,它查询数据库,并在满足某些条件时向我发送电子邮件。

这个文件,我们称它为abc.php,如果我在浏览器中输入"www.mysite.com/abc.php",它就能正常运行。如果条件满足,我会收到一封电子邮件,上面写着(例如)"某某,这是信息:a, b, c。"

但是当我用cron调用文件时,由于某种原因,电子邮件是乱码的。我得到的是"某某,这是信息部分",而不是"a, b, c"。

我完全被难住了。"某某"也来自数据库,因为这显示在两个点上,我知道db查询正在工作。

我不明白为什么有些东西在http调用中工作得很好,但在通过cron调用时却不工作。是否应该设置不同的权限?目录树以不同的方式描述?我应该使用完整路径而不是相对路径吗?

在搜索中,我发现了一个问题,似乎是连接到php.ini文件不同,但我不认为这是这里的情况,因为我得到一个db查询很好。我不认为这是一个编码问题,因为它可以完美地从浏览器调用。但我怀疑这可能是由于路径设置不正确,或者可能是cron作为不同的用户运行或需要不同的权限。

任何帮助或建议将是伟大的。

编辑:这是cron线。当我从浏览器运行文件时,我可以编辑它以匹配正在使用的php.ini吗?

/ramdisk/bin/php5 -c /my/home/php.ini /my/home/sendmetheemail.php

是否也有可能使用不同的mysql配置文件?php部分似乎工作得很好,但数据有问题。

刚刚测试,wget工作正常:

wget http://mydomain.com/sendmetheemail.php

你有一个单一的文件,你假设应该运行相同,但产生不同的结果,所以很明显你的假设是错误的。

当我遇到这种困境时,我在代码中使用了一堆syslog(LOG_INFO,"Display some data.");行。当直接通过cron运行时,检查它们之间的结果。