За последние 24 часа нас посетили 18454 программиста и 1798 роботов. Сейчас ищут 846 программистов ...

проблема с date()

Тема в разделе "PHP для новичков", создана пользователем Ruzzz, 18 фев 2008.

  1. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    У меня проблема с date() и gmdate()! Выдает ошибку:
    Пишу так:
    Код (Text):
    1.     InitDB();
    2.     $params['date'] = date('Y-m-d H:i:s');
    Если же так:
    Код (Text):
    1.     $params['date'] = date('Y-m-d H:i:s');
    2.     InitDB();
    То ошибки нет! Но мне нужен именно первый вариант!

    InitDB():
    PHP:
    1.  
    2. <?
    3.     function InitDB() {
    4.         include_once "../config.php";  
    5.         $dbcnx = @mysql_connect($dbhost, $dbuser, $dbpasswd);
    6.         if (!$dbcnx) {
    7.             DBErrorPage('В настоящий момент сервер БД не доступен.');
    8.         } elseif (!@mysql_select_db($dbname, $dbcnx)) {
    9.             DBErrorPage('В настоящий момент БД не доступна.');
    10.         } elseif (!mysql_query("SET NAMES 'utf8'")) {
    11.             DBErrorPage('Ошибка установки связи с БД в UTF8.');
    12.         };
    13.     }
    14. ?>
    15.  
    Думаю проблему нужно искать в config.php

    config.php
    PHP:
    1.  
    2. <?php
    3.     setlocale(LC_ALL, "ru", "ru_RU");
    4.     error_reporting(E_ALL|E_STRICT);
    5.     mb_internal_encoding("UTF-8");
    6.  
    7.     $dbhost = 'localhost';
    8.     $dbuser ='root';
    9.     $dbpasswd = '';
    10.     $dbname = 'my';
    11. ?>
    12.  
    Помогите, в чем проблема?
     
  2. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    А напиши это код так:
    PHP:
    1. <?
    2. $loc_ru=setlocale(LC_ALL, "ru", "ru_RU");
    3. echo "На этой системе локаль имеет имя '$loc_ru'";
    4. ?>
    и отпишись сюда - что она тебе скажет.
     
  3. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    вот:
    Мне бы так что бы это работало не только на моем компе ну и у хостера, подскажите в чем проблема, что мне следует изучить?
     
  4. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Я так понимаю что я изменяю настройки локали и это как-то отражается на date()?
     
  5. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    1) А что у тебя за винда и что в настройках локали стоит?
    2) Ты проверял - у хостера работает или тоже ругается?
    3) Функцию DBErrorPage покажи.
     
  6. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Конечно.
     
  7. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
     
  8. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    дык я и пытаю его, где он "misspelled the timezone identifier". Пока не вижу.
     
  9. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Вот такой код уже выдает ошибку:
    PHP:
    1. <?
    2.     error_reporting(E_ALL|E_STRICT);
    3.     echo date('Y-m-d H:i:s');
    4. ?>
    Ошибка:
    Код (Text):
    1. Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Helsinki' for '2.0/no DST' instead in Y:\home\temp\www\admin\temp\t.php on line 3
     
  10. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    описание date_default_timezone_set() на нашел, что я делаю не так? использую setlocale() с параметром LC_ALL. Что еще нада? У меня же вообще дата по шаблону 'Y-m-d H:i:s' должна выводится, в чем тогда проблема, зачем еще какие-то настройки?
     
  11. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    блин почему так:
    Код (Text):
    1.  
    2.     InitDB();
    3.     $params['date'] = date('Y-m-d H:i:s'); 
    есть эта ошибка, а так нет:
    Код (Text):
    1.  
    2.     $params['date'] = date('Y-m-d H:i:s'); 
    3.     InitDB();
     
  12. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    RomanBush
    У меня XP русская, у хостера не проверял.

    DBErrorPage:
    PHP:
    1.  
    2. <?php
    3.     $time_start = microtime(1);
    4.    
    5.     function PrintPage($title, $body, $refresh = false) {
    6.         header("Content-Type: text/html; charset=utf-8");
    7.         header("Cache-Control: no-cache");
    8.         header("Pragma: no-cache");
    9.         header("Cache-Control: private, pre-check=0, post-check=0, max-age=0");
    10.         if ($refresh) {
    11.             header("Refresh: 3; URL=index.php");
    12.         }
    13.         echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
    14.         echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">';
    15.         echo '<head>';
    16.         echo '<title>'.$title.'</title>';
    17.         echo '<link href="main.css" rel="stylesheet" type="text/css" /></head><body>';
    18.         echo '<div class="header">';
    19.         echo '<a href="index.php">На главную</a>';
    20.         if ($refresh) {
    21.             echo ' <span class="note">(автоматически через 3 сек.)</span>';
    22.         }
    23.         echo ' | <a href="page-add.php">Добавить новую</a>';
    24.         echo ' | <a href="autoincrementreset.php">AUTO_INC Reset</a>';
    25.         echo '</div>';
    26.         echo $body;
    27.        
    28.         $time_end = microtime(1);
    29.         global $time_start;
    30.         $time = $time_end - $time_start;
    31.         echo '<p>Время генерации страницы: '.$time.' секунд</p>';
    32.        
    33.         echo '</body>';
    34.         echo '</html>';
    35.     }
    36.  
    37.     function MessagePage($title, $msg, $refresh = false) {
    38.         PrintPage($title, '<div class="Message">'.$msg.'</div>', $refresh);
    39.     }
    40.    
    41.     // Функция для вывода странички с ошибкой
    42.     function ErrorPage($msg) {     
    43.         MessagePage('Ошибка', '<p>'.$msg.'</p>');
    44.         exit();
    45.     }  
    46.    
    47.     // Функция для вывода странички с ошибкой БД
    48.     function DBErrorPage($msg) {
    49.         MessagePage('Ошибка БД', '<p>'.$msg.'</p><p><b>Ошибка: '.mysql_error().'<b></p>');
    50.         exit();
    51.     }
    52. ?>
    53.  
     
  13. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    date_default_timezone_set('Europe/Moscow'); - это команда проблему решила

    Осталось не понятным почему ошибки нет до коннекта к БД, но если после то есть, но при этом в тестовом скрипте:
    <?
    error_reporting(E_ALL|E_STRICT);
    echo date('Y-m-d H:i:s');
    ?>
    ошибка также вылазит?
     
  14. Professor

    Professor Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    цитата из справочника
    означает, что, начиная с версии РНР 5.1.0, где функции date/time были переписаны, каждый вызов date/time будет генерировать сообщение E_NOTICE если временная зона (timezone, или TZ) будет неверна (как я полагаю, и если она будет незадана), и/или сообщение E_STRICT если используются настройки системы или переменные окружения временной зоны (в последних четырёх словах я за свой перевод не ручаюсь).

    Короче говоря, нужно указывать временную зону. Её можно указать в php.ini директивой date.timezone, либо в каждом скрипте функцией date_default_timezone_set().

    З.Ы. У меня теже ошибки выбивает, РНР 5.2.4.
     
  15. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
     
  16. Professor

    Professor Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    RomanBush

    PHP:
    1. <?
    2. header("Content-Type: text/html; charset=windows-1251");
    3. //date_default_timezone_set('Europe/Moscow');
    4. error_reporting(E_ALL|E_STRICT);
    5. echo date('Y-m-d H:i:s');
    6. ?>
    выдаёт ошибку

    PHP:
    1. <?
    2. header("Content-Type: text/html; charset=windows-1251");
    3. date_default_timezone_set('Europe/Moscow');
    4. error_reporting(E_ALL|E_STRICT);
    5. echo date('Y-m-d H:i:s');
    6. ?>
    уже не выдаёт
     
  17. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    1) Ты бы проверил скрипт - у тебя наверняка это не одно место, где ты пытаешься выводить в utf-8. Ты где-то ещё "играешь" кодировками и у апача крышу сносит - не знает, в чём ты таки будешь работать.
    2) Посмотри у себя в винде, в "панели управления" -> "Язык и региональные стандарты" - что там у тебя стоит. Попробуй переключить везде на английский, "применить", перезагрузка, потом обратно на русский, "применить", перезагрузка и потом опять проверь. Возможно винда просто глючит. Я почему и спросил - у хостера ты проверял или нет? У хостера же не винда стоит.