Двуязычный CodeIgniter cron работа - PullRequest
0 голосов
/ 31 января 2012

Я создал двуязычное приложение с CodeIgniter, и теперь мне нужно 2 задания cron для отправки электронных писем определенным пользователям.

Проблема в том, что я не могу запустить задания cron иЯ полагаю, что это из-за библиотек, мне нужно запустить CodeIgniter на многих языках.

Я пытаюсь запустить эту команду: php / home / [имя пользователя] / public_html / projects / [имя проекта] / 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 находится в строке 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 return находится в строке 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 /.Есть ли способ обойти это или установить его в контроллере?Я думаю, что MY_Lang вызывается перед контроллером.Поэтому, возможно, есть способ сделать это, чтобы мне не пришлось использовать index.php для входа в CodeIgniter.

1 Ответ

0 голосов
/ 01 февраля 2012

Мне кажется, что $browser_lang пусто в строке 153, потому что $_SERVER['HTTTP_ACCEPT_LANGUAGE'] пусто в строке 151, и троица устанавливает переменную равной пустой строке. Теперь, когда он проверяет ключ в $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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...