zoukankan      html  css  js  c++  java
  • 处理php出现default timezone抖动的问题

    懒癌发作1年多,再次回来写随笔。(上次是16年,再上次是13年,好像懒的没救了)

    这回遇到一个系统前端展现的时间在无规律抖动的问题;

    前端php环境是5.3,运行于apache上,php.ini中已经设置了date.timezone="Asia/Shanghai",php中不显示设定任何的date_default_timezone_set();

    使用phpinfo查看,date.timezone确实是上海,但Default timezone就时不时飘到了太平洋去;

    同事帮我分析了一下,并给了官方文档说明default timezone的选定顺序,http://php.net/manual/zh/function.date-default-timezone-get.php

    date_default_timezone_set() > 环境变量TZ > date.timezone > 查询操作系统;(php version < 5.4)

    or

    date_default_timezone_set() > date.timezone;(php version >= 5.4)

    同事怀疑我有定时程序在不断修改环境变量TZ,但是apache是通过发行版的源安装的,apache用户更是nologin,没有机会启动定时程序进行环境变量修改;一时无果;

    后来又仔细分析了phpinfo的区别,发现当时区飘到太平洋的时侯,php的Environment里面确实会出现一条TZ变量,正常时没有;

    同时一起出现的新增环境变量还有一个django.setting,我才突然想起来,这个apache服务器后面还跑着一个python(django)项目,然后到那个django项目中一查,确实设定了一个错误的时区;

    把django.setting中的错误时间给改过来后,过一点时间后(可能是在等缓存过期),时区抖的问题就消失了;

    于是从头疏理一遍问题发生的过程:

    • apache后面跑了两个项目:一个php项目,一个python项目;
    • python项目的wsgi模式设置的为WSGIScriptAlias;
    • php版本为5.3;
    • python项目会在运行中修改环境变量TZ(受django设定),如果一个apache子进程运行了这个python项目,这个子进程就会增加一个TZ环境变量;
    • php项目不显式设定date_default_timezone_set,当它运行于一个全新的apache子进程中时,会使用date.timezone,而当它运行于一个已经运行过python项目的apache子进程中时,会看到TZ环境变量,从而拿到错误的timezone;

    于是,我也就明白了为啥从php 5.4开始抛弃TZ了;

  • 相关阅读:
    Intellij 常用技巧-持续更新
    Android界面组件的四种启动方式
    Preference Screen 首选项
    Oracle OCI-22053:溢出错误
    SQLPLUS使用
    Oracle中数字格式的文本化处理
    MP4V2 移植 (基于imx6 平台)
    IMX6Q camera 应用编程之 摄像头裁剪
    IMX6Q camera驱动分析 (4)
    IMX6Q Camera驱动分析 (3)
  • 原文地址:https://www.cnblogs.com/ZisZ/p/8316552.html
Copyright © 2011-2022 走看看