Логотип   Простое и понятное управление
  Уникальные возможности по настройке
  Open Server скачали уже 1 016 092 раза!

Форум

Добро пожаловать, Гость!

Функция strtotime и 2037 год в PHP x64

Обсуждение проблем в работе программного комплекса
Соглядатай
Сообщения: 45
C нами: 2 года 1 мес

Непрочитанное сообщение Соглядатай » 15 июн 2016, 02:30

Доброго времени суток!

Столкнулся недавно с такой проблемой. Дома на Mac выборка по датам в CMS работает отлично, а на рабочей Windows-машине с OpenServer 5.2.4 (Apache 2.4 x64, PHP 5.6 x64, MySQL 5.7 x64) уже нет.

Стал разбираться в коде CMS и нашел такую строку:
$end = $endDate ? Utils::date2timestamp($endDate) : strtotime("now +1000 years");

Т. е. если конечная дата не указана, берется дата-время сейчас и прибавляется 1000 лет.

Опытным путем было установлено критическое значение лет, после которого код не работает:
$date = date('d-m-Y', strtotime('now +21 years'));
echo $date . "<br>"; //15-06-2037
$date = date('d-m-Y', strtotime('now +22 years'));
echo $date; //01-01-1970


Собственно, такое поведение присуще 32-х битной версии PHP, чему я нашел подтверждение на StackOverflow:
https://stackoverflow.com/questions/798 ... the-future

Далее посмотрел спецификацию на php.net, секция "Примечания":
https://secure.php.net/manual/ru/functi ... time-notes

Поведение функции говорит о том, что у меня 32-битная версия PHP, однако phpinfo() показывает архитектуру x64.
Screenshot_6.png


В чем может быть причина проблемы?

Аватара пользователя
Максим
Сообщения: 4868
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 15 июн 2016, 12:56

Google говорит что поддержка x64 в PHP версий 5.x неполная, в частности для функций времени всё равно используется 32. И ещё google говорит что полная x64 реализация есть в PHP7. Попробуйте использовать более новую версию PHP.

Аватара пользователя
Максим
Сообщения: 4868
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 15 июн 2016, 13:02

Да, так оно и есть, проверил. На php 5.6 x64 не работает, на PHP 7 x64 работает.

Соглядатай
Сообщения: 45
C нами: 2 года 1 мес

Непрочитанное сообщение Соглядатай » 16 июн 2016, 16:23

Максим писал(а):Google говорит что поддержка x64 в PHP версий 5.x неполная, в частности для функций времени всё равно используется 32. И ещё google говорит что полная x64 реализация есть в PHP7. Попробуйте использовать более новую версию PHP.

А можно ссылку на то, что нагуглили?

Вот скрин с Mac-версии PHP 5.5.34:
Screenshot at июня 17 00-19-55.png


Архитектура явно не указана, как в Windows-версии, как-то все вместе: X86_64.
Версия ниже, но подобной проблемы не обнаружилось. :roll:


Вернуться в «Ошибки Open Server»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей