<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>24266</bug_id>
          
          <creation_ts>2010-10-11 07:39:16 +0400</creation_ts>
          <short_desc>Fail to get timezone without tzdata</short_desc>
          <delta_ts>2010-10-27 17:31:35 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>php-base</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>NOTABUG</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>NMU, patch</keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolay A. Fetisov">naf</reporter>
          <assigned_to name="Anton Farygin">rider</assigned_to>
          <cc>legion</cc>
    
    <cc>naf</cc>
    
    <cc>rider</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>113507</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolay A. Fetisov">naf</who>
    <bug_when>2010-10-11 07:39:16 +0400</bug_when>
    <thetext>Для 5.3.3.20100722-alt2.1 при попытке определения временной зоны не проверяется существование в системе каталога с описаниями зон.
Как следствие, в виртуальных серверах (где установка tzdata не обязательна и, в принципе, не нужна), php_get_timezone() выдаёт пустое значение, и далее php_rule вызывается с отсутствующим параметром:

# control apache2-mod_php5
find: `/usr/share/zoneinfo/&apos;: No such file or directory
find: `/usr/share/zoneinfo/&apos;: No such file or directory
apache2-mod_php5: Error: more arguments required: MODE DIRECTIVE VALUE [ INTRERNAL_VALUE ]
#</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113508</commentid>
    <comment_count>1</comment_count>
      <attachid>4602</attachid>
    <who name="Nikolay A. Fetisov">naf</who>
    <bug_when>2010-10-11 07:46:28 +0400</bug_when>
    <thetext>Created attachment 4602
Вариант решения: в отсутствии данных из tzdata считать timezone=&apos;UTC&apos;

Простой, плохой, но быстрый вариант: в отсутствии файлов из tzdata не пытаться разбираться с /etc/localtime и принять timezone=&apos;UTC&apos;. Ну и не искать в отсутствующих каталогах.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114262</commentid>
    <comment_count>2</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-25 21:05:43 +0400</bug_when>
    <thetext>(В ответ на комментарий №1)
&gt; Created an attachment (id=4602) [details]
&gt; Вариант решения: в отсутствии данных из tzdata считать timezone=&apos;UTC&apos;
&gt; 
&gt; Простой, плохой, но быстрый вариант: в отсутствии файлов из tzdata не пытаться
&gt; разбираться с /etc/localtime и принять timezone=&apos;UTC&apos;. Ну и не искать в
&gt; отсутствующих каталогах.

  Похоже timezone=&apos;Etc/UTC&apos; будет лучше.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114263</commentid>
    <comment_count>3</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-25 21:09:01 +0400</bug_when>
    <thetext>  Перевешиваю на php-base, т. к. именно этому пакету принадлежит файл /etc/control.d/facilities/apache2-mod_php5 вызывающий данную ошибку.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114264</commentid>
    <comment_count>4</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-25 21:16:21 +0400</bug_when>
    <thetext>(В ответ на комментарий №3)
&gt;   Перевешиваю на php-base, т. к. именно этому пакету принадлежит файл
&gt; /etc/control.d/facilities/apache2-mod_php5 вызывающий данную ошибку.
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Выше, вру: имел в виду /etc/control.d/phpfunctions, т. к. функция php_get_timezone требующая непустого /usr/share/zoneinfo/ определена в нём.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114266</commentid>
    <comment_count>5</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-25 22:02:30 +0400</bug_when>
    <thetext>  Предлагаю исправить так: http://git.altlinux.org/people/solo/packages/?p=php-base.git;a=commitdiff;h=aea60a7b5f532586524da0a839d0144710765aac

PS: Сейчас подготовлю NMU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114270</commentid>
    <comment_count>6</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-25 22:53:05 +0400</bug_when>
    <thetext>  Подготовленное NMU (php-base-2.6-alt1.1, см. http://git.altlinux.org/people/solo/packages/?p=php-base.git;a=commit;h=6d7e83135be5834ac3b9d4e233d6046aa214ef89) отправлено на сборку (task #31452). Прошу права на заливку (меня нет в ACL).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114271</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2010-10-25 23:20:43 +0400</bug_when>
    <thetext>Сейчас пакетом занимается kurakin@. Ему и решать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114272</commentid>
    <comment_count>8</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-10-26 00:23:27 +0400</bug_when>
    <thetext>&gt; Сейчас пакетом занимается kurakin@. Ему и решать.

Более того, я еще и автор той штуки, о которой сейчас идет речь.
Прошу прощения, но сию минуту принять решение не могу. Завтра посмотрю на свежую голову и почти наверняка сделаю approve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114290</commentid>
    <comment_count>9</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-26 11:26:03 +0400</bug_when>
    <thetext>  OK.

  Task собрался (http://git.altlinux.org/tasks/31452/task/log) и ожидаемым
образом работает у меня в виртуалке.

PS: Ещё один вариант исправления -- добавить &quot;Requires: /usr/share/zoneinfo&quot; но это приведёт к вытягиванию tzdata в виртуальные окружения.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114292</commentid>
    <comment_count>10</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-10-26 14:16:57 +0400</bug_when>
    <thetext>(In reply to comment #9)
&gt;   Task собрался и ожидаемым образом работает у меня в виртуалке.

Нет, так всё-таки не надо. Получается, что при отсутствии zoneinfo установленное вручную значение timezone в php.ini будет заменено на Etc/UTC. И вся затея с автоматическим определением timezone превращается в медвежью услугу.

Сделаем так: 
http://git.altlinux.org/people/kurakin/packages/?p=php-base.git;a=commitdiff;h=1d032806c4ad9b40d8a2274e384e8d5f86fe080f

Проверка наличия zoneinfo, конечно, необходима. При отсутствии возвращаем пустую строку. А php_rule() при отсутствии параметра VALUE будет просто игнорировать правило. Таким образом, при невозможности определить timezone, этот параметр не будет учитываться и не будет обрабатываться.

Сейчас отправлю в Сизиф.

И спасибо за замечания и заинтересованность.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114296</commentid>
    <comment_count>11</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2010-10-26 15:49:25 +0400</bug_when>
    <thetext>php-base-2.6-alt2 -&gt; sisyphus:

* Tue Oct 26 2010 Sergey Kurakin &lt;kurakin@altlinux&gt; 2.6-alt2
- fixed issue with php_get_timezone feature and missing tzdata
  (closes: #24266)
- php-packaging.readme updated and moved here from php5 package
  as php-packaging.alt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114361</commentid>
    <comment_count>12</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-27 13:02:44 +0400</bug_when>
    <thetext>(В ответ на комментарий №10)
&gt; (In reply to comment #9)
&gt; &gt;   Task собрался и ожидаемым образом работает у меня в виртуалке.
&gt; 
&gt; Нет, так всё-таки не надо. Получается, что при отсутствии zoneinfo
&gt; установленное вручную значение timezone в php.ini будет заменено на Etc/UTC. И
&gt; вся затея с автоматическим определением timezone превращается в медвежью
&gt; услугу.
&gt; 
&gt; Сделаем так: 
&gt; http://git.altlinux.org/people/kurakin/packages/?p=php-base.git;a=commitdiff;h=1d032806c4ad9b40d8a2274e384e8d5f86fe080f
&gt; 
&gt; Проверка наличия zoneinfo, конечно, необходима. При отсутствии возвращаем
&gt; пустую строку. А php_rule() при отсутствии параметра VALUE будет просто
&gt; игнорировать правило. Таким образом, при невозможности определить timezone,
&gt; этот параметр не будет учитываться и не будет обрабатываться.

  А можно сделать так, чтобы при отсутствии zoneinfo и установленного php.ini значение timezone правило всё таки отрабатывало, выставляя timezone в некое умолчальное состояние?

PS: Мне это для control`а для zabbix нужно: не работает зараза при отсутствующем/неопределённом в php.ini timezone.

PPS: Багу переоткрыл. Или лучше повесить новую?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114362</commentid>
    <comment_count>13</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-10-27 13:09:05 +0400</bug_when>
    <thetext>присоединяюсь к просьбе, и нужно всё-таки поставить зависимость на zoneinfo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114367</commentid>
    <comment_count>14</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-10-27 15:05:44 +0400</bug_when>
    <thetext>(In reply to comment #12)
&gt;   А можно сделать так, чтобы при отсутствии zoneinfo и установленного php.ini
&gt; значение timezone правило всё таки отрабатывало, выставляя timezone в некое
&gt; умолчальное состояние?

Кстати да. Можно. Волшебное слово:

php_config |eval grep &apos;date.timezone&apos;

Сейчас сделаю.

&gt; PPS: Багу переоткрыл. Или лучше повесить новую?

Да пусть уж здесь.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114368</commentid>
    <comment_count>15</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-10-27 15:11:12 +0400</bug_when>
    <thetext>(In reply to comment #13)
&gt; и нужно всё-таки поставить зависимость на zoneinfo

А оно нам надо лишние 4M в контейнере? Впрочем, я ovz сейчас не пользуюсь, так что решайте, кто пользуется. Права дам.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114370</commentid>
    <comment_count>16</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-10-27 15:14:08 +0400</bug_when>
    <thetext>а почему-бы и нет ? если оно реально нужно для работы...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114375</commentid>
    <comment_count>17</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-27 15:27:49 +0400</bug_when>
    <thetext>  А нужно ли?

  Как именно работает параметр date.timezone?

1. Указывает timezone системных часов? Тогда при установки дистрибутивов по умолчанию у нас это у нас это UTC (если я правильно помню) и достаточно возвращать Etc/UTC в подавляющем большинстве случаев. Тем кто не использует UTC в качестве системной -- придётся указывать нужное в php.ini явно.

2. Указывает timezone в которую php пересчитывает время системных часов. Тогда да, требование zoneinfo обосновано: слишком велик разброс вариантов, для использования автоугодава...

  Какой у нас случай?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114377</commentid>
    <comment_count>18</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-10-27 15:49:05 +0400</bug_when>
    <thetext>о, а timezone у нас сейчас Internal - у PHP оторвана поддержка внешних таймзон.

Так что, можно делать всё что угодно, и установка timezone в систему не нужна.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114379</commentid>
    <comment_count>19</comment_count>
    <who name="Nikolay A. Fetisov">naf</who>
    <bug_when>2010-10-27 16:08:42 +0400</bug_when>
    <thetext>Файлы из tzdata для работы PHP не нужны - описания зон он носит с собой своё. 
Кстати, согласно timezonedb.h (http://php.net/manual/en/timezones.php) он знает
569 зоны, что несколько меньше 1722 зон в tzdata. И он знает зону US/Pacific-New,
которой нет в tzdata.

По файлам tzdata - вообще-то, там не совсем 4 Mb, а примерно раза в два больше.
Там 1788 файлов и каталогов, и это приличная добавка к содержимому /usr/share.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114380</commentid>
    <comment_count>20</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-10-27 16:29:00 +0400</bug_when>
    <thetext>(In reply to comment #17)
&gt;   Какой у нас случай?

Ни тот ни другой. data.timezone должен указывать на реальное местоположение сервера. Собственно часовой пояс php может получить и получает сам в формате MSD/4,0/DST. Но жалуется:

PHP Warning:  date(): It is not safe to rely on the system&apos;s timezone settings. You are *required* to use the date.timezone setting 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 &apos;Europe/Moscow&apos; for &apos;MSD/4,0/DST&apos; instead

До 5.3 это было сообщение уровня E_STRICT, а начиная с 5.3.0 стало E_WARNING.

Так что часовой пояс php знает. Да еще и zoneinfo, как говорят, носит с собой. В сущности, процитированное предупреждение носит бюрократический характер, как отказ от ответственности: &quot;Мы выбрали Москву из вашего часового пояса, но если вы в Петербурге, то мы ни за что не отвечаем.&quot;

Чтобы убрать эту бюрократию из логов, я и приделал автоугадав к php-control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114381</commentid>
    <comment_count>21</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-10-27 17:31:35 +0400</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt;&gt;   А можно сделать так, чтобы при отсутствии zoneinfo и установленного php.ini
&gt;&gt; значение timezone правило всё таки отрабатывало, выставляя timezone в некое
&gt;&gt; умолчальное состояние?
&gt; 
&gt; Кстати да. Можно.
&gt; Сейчас сделаю.

Прошу прощения, поторопился, не сделаю. Если так сделать, то в некоторых редких случаях (отсутствие zoneinfo &amp;&amp; не определенная date.timezone &amp;&amp; запуск control), мы получаем в php заведомо неправильную зону Etc/UTC со всеми вытекающими последствиями. При полной тишине в логах. 

Если необходимо обеспечить работу zabbix в контейнере из коробки без ручной установки date.timezone в php.ini, то затребуйте zoneinfo из zabbix&apos;а.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4602</attachid>
            <date>2010-10-11 07:46:28 +0400</date>
            <delta_ts>2010-10-11 07:46:28 +0400</delta_ts>
            <desc>Вариант решения: в отсутствии данных из tzdata считать timezone=&apos;UTC&apos;</desc>
            <filename>24266.patch</filename>
            <type>text/plain</type>
            <size>680</size>
            <attacher name="Nikolay A. Fetisov">naf</attacher>
            
              <data encoding="base64">LS0tIGEvY29udHJvbC5kL2ZhY2lsaXRpZXMvYXBhY2hlMi1tb2RfcGhwNQorKysgYi9jb250cm9s
LmQvZmFjaWxpdGllcy9hcGFjaGUyLW1vZF9waHA1CkBAIC0xMSw2ICsxMSw3IEBAIHJlYWRvbmx5
IFBIUF9ET0NfUk9PVD0iL3Zhci93d3cvaHRtbCIKIDogJHtwaHBfb246P30gJHtwaHBfb2ZmOj99
CiAKIHBocF90aW1lem9uZT0kKHBocF9nZXRfdGltZXpvbmUpCis6ICR7cGhwX3RpbWV6b25lOj0i
VVRDIn0KIAogZm9yIGYgaW4gYGxzIC0xICIvZXRjL3BocC8kUEhQX01BSk9SLyRQSFBfU0FQSS9j
b250cm9sLmQvImA7IGRvCiAgICAgLiAiL2V0Yy9waHAvJFBIUF9NQUpPUi8kUEhQX1NBUEkvY29u
dHJvbC5kLyRmIgotLS0gYS9jb250cm9sLmQvcGhwZnVuY3Rpb25zCisrKyBiL2NvbnRyb2wuZC9w
aHBmdW5jdGlvbnMKQEAgLTE4OSw3ICsxODksNyBAQCBwaHBfZ2V0X3RpbWV6b25lKCkgewogCVpJ
X1BBVEg9L3Vzci9zaGFyZS96b25laW5mby8KIAlaSV9TSVpFPSQoc3RhdCAtLWRlcmVmZXJlbmNl
IC0tZm9ybWF0PSVzICRaSV9GSUxFKQogCi0JZm9yIGogaW4gMiAxCisJWyAtZCAiWklfUEFUSCIg
XSAmJiBmb3IgaiBpbiAyIDEKIAlkbwogCQlmb3IgaSBpbiAkKGZpbmQgJFpJX1BBVEggLW1heGRl
cHRoICRqIC1taW5kZXB0aCAkaiAtdHlwZSBmIC1zaXplICR7WklfU0laRX1jKQogCQlkbwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>