Php 双语代码点火器cron作业

Php 双语代码点火器cron作业,php,codeigniter,cron,Php,Codeigniter,Cron,我用CodeIgniter构建了一个双语应用程序,现在我需要2个cron作业来向某些用户发送电子邮件 我遇到的问题是我无法运行cron作业,我相信这是因为我必须用多种语言运行CodeIgniter库 我正在尝试运行此命令: php/home/[username]/public\u html/projects/[project name]/index.php cron提醒 运行后我收到的电子邮件如下: Content-type: text/html <div style="border:1

我用CodeIgniter构建了一个双语应用程序,现在我需要2个cron作业来向某些用户发送电子邮件

我遇到的问题是我无法运行cron作业,我相信这是因为我必须用多种语言运行CodeIgniter库

我正在尝试运行此命令: php/home/[username]/public\u html/projects/[project name]/index.php cron提醒

运行后我收到的电子邮件如下:

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 第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';
    }
基本上,当您浏览我的网站时,如果url中没有设置语言,它会自动添加/en/。有没有办法绕过它或在控制器中设置它?我想我的_Lang在控制器前被呼叫。因此,也许有一种方法可以使它变为空,这样我就不必使用index.php来输入CodeIgniter。

在我看来,$browser\u lang在第153行是空的,因为$\u SERVER['HTTTP\u ACCEPT\u LANGUAGE']在第151行是空的,而三元变量正在将变量设置为空字符串。现在,当它检查$this->languages中的键时,就会抛出错误

我猜这与从命令行而不是浏览器调用它有关,并且没有设置$\u服务器变量。我会在第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。

感谢您的回复。在cron作业中使用wget,这不就像我要查看页面一样吗?我不希望任何人能够查看控制器/方法。是的,我想这不是你想要的,但我想把它作为另一个选项扔出去。您可以考虑在wget请求中使用某种密钥作为参数,并将其与控制器方法中的硬编码值进行比较。同样,不是很理想,但还有另一个选择。我尝试了改变默认的_lang方法,它可以工作,除了我将使用默认的控制器,而不是cron控制器。wget和param可能是一种方法。
// 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';
}