我使用CodeIgniter构建了一个双语应用程序,现在我需要2个cron作业才能向某些用户发送电子邮件。
我遇到的问题是我无法运行cron作业,我相信这是因为我必须以多种语言运行CodeIgniter库。
我正在尝试运行此命令: php / home / [用户名] / public_html / projects / [项目名称] /index.php cron remind
运行后我收到的电子邮件如下:
Content-type: text/html
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
<h4>A PHP Error was encountered</h4>
<p>Severity: Warning</p>
<p>Message: array_key_exists() [<a href='function.array-key-exists'>function.array-key-exists</a>]: The first argument should be either a string or an integer</p>
<p>Filename: core/MY_Lang.php</p>
<p>Line Number: 153</p>
</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
<h4>A PHP Error was encountered</h4>
<p>Severity: Warning</p>
<p>Message: array_key_exists() [<a href='function.array-key-exists'>function.array-key-exists</a>]: The first argument should be either a string or an integer</p>
<p>Filename: core/MY_Lang.php</p>
<p>Line Number: 153</p>
</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
<h4>A PHP Error was encountered</h4>
<p>Severity: Warning</p>
<p>Message: Cannot modify header information - headers already sent by (output started at /home/vchris/CI-2.0.1/core/Exceptions.php:170)</p>
<p>Filename: core/MY_Lang.php</p>
<p>Line Number: 73</p>
</div>
MY_Lang.php 标题在第73行
if ((!$url_ok) && (!$this->is_special($uri_segment['parts'][0]))) // special URI -> no redirect
{
// set default language
$CFG->set_item('language', $this->languages[$this->default_lang()]);
$uri = (!empty($this->uri)) ? $this->uri: $this->default_uri;
$uri = ($uri[0] != '/') ? '/'.$uri : $uri;
$new_url = $CFG->config['base_url'].$this->default_lang().$uri;
header("Location: " . $new_url, TRUE, 302);
exit;
}
MY_Lang.php 返回第153行
// default language: first element of $this->languages
function default_lang()
{
$browser_lang = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtok(strip_tags($_SERVER['HTTP_ACCEPT_LANGUAGE']), ',') : '';
$browser_lang = substr($browser_lang, 0,2);
return (array_key_exists($browser_lang, $this->languages)) ? $browser_lang: 'en';
}
基本上,当您浏览我的网站时,如果您没有在网址中设置语言,则会自动添加/ en /。有没有办法绕过它或在控制器中设置它?我认为在控制器之前调用MY_Lang。所以也许有一种方法可以实现它,所以我不必使用index.php来输入CodeIgniter。
答案 0 :(得分:0)
在我看来$browser_lang
在第153行是空的,因为第151行$_SERVER['HTTTP_ACCEPT_LANGUAGE']
为空,而三元组将变量设置为空字符串。现在,当它检查$this->languages
中的密钥时,它会抛出您的错误。
我猜这与从命令行而不是浏览器调用它有关,并且没有设置$_SERVER
变量。我会在第153行进行检查,看看$browser_lang
是否为空:
// default language: first element of $this->languages
function default_lang()
{
$browser_lang = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtok(strip_tags($_SERVER['HTTP_ACCEPT_LANGUAGE']), ',') : '';
$browser_lang = substr($browser_lang, 0,2);
return (!empty($browser_lang) && array_key_exists($browser_lang, $this->languages)) ? $browser_lang : 'en';
}
另一个选项可能是让你的cron作业使用wget而不是直接调用PHP。