懒癌发作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了;

处理php出现default timezone抖动的问题的更多相关文章

  1. PHP Warning: phpinfo(): It is not safe to rely on the system's timezone setting

    错误描述: PHP Warning:  phpinfo(): It is not safe to rely on the system's timezone settings. You are *re ...

  2. Airflow 使用随笔(内含 TimeZone 和 Backfill 等的详解)

    其实怎么部署  airflow 又哪些特性,然后功能又是如何全面都可以在 Reference 的文章里面找到,都不是重点这里就不赘述了. 这里重点谈一下我在部署完成仔细阅读文档之后觉得可以总结的一些东 ...

  3. 一文读懂,硬核 Apache DolphinScheduler3.0 源码解析

    ​ 点亮 ️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 本文目录 1 DolphinScheduler的设计与策略 1.1 分布 ...

  4. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  5. 初识Azkaban

    先说下hadoop 内置工作流的不足 (1)支持job单一 (2)硬编码 (3)无可视化 (4)无调度机制 (5)无容错机制 在这种情况下Azkaban就出现了 1)Azkaban是什么 Azkaba ...

  6. Wiki安装(PHP +Sqlite+Cache)

    前期准备 PHP http://windows.php.net/download   WinCache Extension for PHP URL:http://sourceforge.net/pro ...

  7. Django 1.10 中文文档------3.2.1 模型Models

    3.2.1 models模型 通常一个模型映射一张单独的数据表. 基本概念: 每个model都是django.db.models.Model的子类 model的每个属性代表数据表的某一列 Django ...

  8. zabbix3.0安装【server】

    关于zabbix的介绍,就不多说了,功能强大,架构前卫,自己直接去官网研究 在这里,还是秉承研究一个应用或者技术,都要自己动手安装部署,实战操作,才能深入掌握,基于这个精神,zabbix从安装部署开始 ...

  9. CentOS 7 用户怎样安装 LNMP(Nginx+PHP+MySQL)

    关于 Nginx (发音 “engine x”)这是一款免费.开源.高效的 HTTP 服务器,Nginx是以稳定著称,丰富的功能,结构简单,低资源消耗.本教程演示如何在CentOS 6.5服务器(适用 ...

随机推荐

  1. Django 1.11 release note简明解读

    1.首先1.11这个版本是一个LTS版本 2.第一个支持python3.6的版本,最后一个支持python2.*的版本 3.Deprecating warnings 默认不再显示,同时建议第三方包开始 ...

  2. Python《学习手册:第二章-习题》

    什么是Python解释器? Python解释器是运行Python程序的程序. 什么是源代码? 源代码是为程序所写的语句:它包括文本文件(通常以.py为文件名结尾)的文件. 什么是字节码? 字节码是Py ...

  3. 读《图解HTTP》有感-(与HTTP协作的WEB服务器)

    写在前面 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档: 一台web服务器可以搭建多个独立域名的web网站,也可以作为通信路径(路由)上的中 ...

  4. tomcat第一次使用正常启动后访问8080端口报404错误

    问题:tomcat第一次使用正常启动后访问8080端口报404错误 解决办法:双击tomcat调出tomcat的xml文件页面,Server Locations 默认是选第一行即Use Workspa ...

  5. hessian在ssh项目中的配置

    一. 在服务端发布一个web项目 1.创建一个动态的web项目,并导入hessian的jar包 2. 在服务端的crm项目中创建接口 package cn.rodge.crm.service;impo ...

  6. Stack编程队列

    题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 首先定义两个栈 Stack<Integer> stack1 = new Stack<I ...

  7. Redis的九大应用场景

    毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...

  8. CAPTCHA---验证码 ---Security code

    BotDetect Java CAPTCHA Generator 3. Add BotDetect Java CAPTCHA Library Dependency Here is how to add ...

  9. jmeter简单的使用

    jmeter简单的使用 一般步骤是:在测试计划下面新建一个线程组,线程组下面添加请求,请求中添加结果和断言 1.打开页面: 2.添加线程组: 3.线程组中设置参数: 很重要的几个参数:线程数.ramp ...

  10. 读书笔记---HTML5实战 MARCO CASARIO(前六章)

    1:行内元素转化为块级元素①display②position③float; 2:语义化; 3:微数据itemscope/itemprop/itemtype; 4:新表单元素,form外的表单元素可以用 ...