关于php中的时间函数返回时间不正确

时间:2022-11-08 10:31:09
请教下,php中的时间函数返回时间不正确是怎么回事?返回的时间为“0000-正确的日期”,年份总是'0000'

代码:
echo 'Now:       '. date('Y-m-d') ."\n";

结果:
Now: 0000-10-15

solaris服务器,通过date命令返回结果

2009年10月15日 星期四 10时34分26秒 CST

环境变量tz=RPC

请问如何解决?谢谢。

11 个解决方案

#1


程序没错,多半是你环境的问题拉

#2


引用 1 楼 dzxccsu 的回复:
程序没错,多半是你环境的问题拉


我也认为是环境问题,检查环境了,现在也不清楚哪出问题,请知道的指导一下,谢谢。

#3


http://hi.baidu.com/hero0524/blog/item/80afc38e68945be7f11f3659.html
是不是这个??

#4


引用 3 楼 hero0524 的回复:
http://hi.baidu.com/hero0524/blog/item/80afc38e68945be7f11f3659.html
是不是这个??


我的时间是对的,是年份始终为“0000”

#5


引用 4 楼 qujingbo 的回复:
引用 3 楼 hero0524 的回复:
 http://hi.baidu.com/hero0524/blog/item/80afc38e68945be7f11f3659.html
 是不是这个??


 我的时间是对的,是年份始终为“0000”
你的什么操作系统?系统中日期的格式是什么样?

#6


拿strace跟踪一下系统调用,看看系统调用是否正确

#7


引用 5 楼 dzxccsu 的回复:
引用 4 楼 qujingbo 的回复:
引用 3 楼 hero0524 的回复:
http://hi.baidu.com/hero0524/blog/item/80afc38e68945be7f11f3659.html
是不是这个??


我的时间是对的,是年份始终为“0000”


你的什么操作系统?系统中日期的格式是什么样?



solaris服务器,通过date命令返回结果 

2009年10月15日 星期四 10时34分26秒 CST 

#8


引用 6 楼 pcboyxhy 的回复:
拿strace跟踪一下系统调用,看看系统调用是否正确


报歉,我还不太会用,您能稍详细一点嘛?

#9


strace php -r 'echo date("Y-m-d")."\n";' 2> log

vim log

搜索所有的time系统调用
/^time

1. 检查time系统调用返回值是否正确。
2. 返回值如果正确,检查时区设置。
3. 如果以上都没问题,要跟踪php了。

下载一份对应版本的php的源码,修改ext/date/php_date.c中定义的date函数,
把每一步操作的结果输出到一个文件,然后编译php,用编译后的php运行上面的代码,
看看错误发生在哪个环节

你也可以用gdb调试,指定那个函数的入口添加一个breakpoint

#10


引用 9 楼 pcboyxhy 的回复:
strace php -r 'echo date("Y-m-d")."\n";' 2> log

vim log

搜索所有的time系统调用
/^time

1. 检查time系统调用返回值是否正确。
2. 返回值如果正确,检查时区设置。
3. 如果以上都没问题,要跟踪php了。

下载一份对应版本的php的源码,修改ext/date/php_date.c中定义的date函数,
把每一步操作的结果输出到一个文件,然后编译php,用编译后的php运行上面的代码,
看看错误发生在哪个环节

你也可以用gdb调试,指定那个函数的入口添加一个breakpoint


网络上发现是php的bug,只有5.2.10 在Solaris Sparc version 9上有这问题。请参看

Also, seeing this after upgrading from 5.2.9 to 5.2.10.

On Solaris Sparc version 9.

     <?=date(Y); ?>

returns 0000 on 5.2.10
and returns 2009 as expected on 5.2.9

转自:

http://bugs.php.net/bug.php?id=48276


不过我还是学习下strace怎么用,感谢。

#11


看来php还是在Linux下问题少一些,反馈bug的人也多一些
在AIX下,php5.2.9也有一些问题,不改源码编译都编译不过去

#1


程序没错,多半是你环境的问题拉

#2


引用 1 楼 dzxccsu 的回复:
程序没错,多半是你环境的问题拉


我也认为是环境问题,检查环境了,现在也不清楚哪出问题,请知道的指导一下,谢谢。

#3


http://hi.baidu.com/hero0524/blog/item/80afc38e68945be7f11f3659.html
是不是这个??

#4


引用 3 楼 hero0524 的回复:
http://hi.baidu.com/hero0524/blog/item/80afc38e68945be7f11f3659.html
是不是这个??


我的时间是对的,是年份始终为“0000”

#5


引用 4 楼 qujingbo 的回复:
引用 3 楼 hero0524 的回复:
 http://hi.baidu.com/hero0524/blog/item/80afc38e68945be7f11f3659.html
 是不是这个??


 我的时间是对的,是年份始终为“0000”
你的什么操作系统?系统中日期的格式是什么样?

#6


拿strace跟踪一下系统调用,看看系统调用是否正确

#7


引用 5 楼 dzxccsu 的回复:
引用 4 楼 qujingbo 的回复:
引用 3 楼 hero0524 的回复:
http://hi.baidu.com/hero0524/blog/item/80afc38e68945be7f11f3659.html
是不是这个??


我的时间是对的,是年份始终为“0000”


你的什么操作系统?系统中日期的格式是什么样?



solaris服务器,通过date命令返回结果 

2009年10月15日 星期四 10时34分26秒 CST 

#8


引用 6 楼 pcboyxhy 的回复:
拿strace跟踪一下系统调用,看看系统调用是否正确


报歉,我还不太会用,您能稍详细一点嘛?

#9


strace php -r 'echo date("Y-m-d")."\n";' 2> log

vim log

搜索所有的time系统调用
/^time

1. 检查time系统调用返回值是否正确。
2. 返回值如果正确,检查时区设置。
3. 如果以上都没问题,要跟踪php了。

下载一份对应版本的php的源码,修改ext/date/php_date.c中定义的date函数,
把每一步操作的结果输出到一个文件,然后编译php,用编译后的php运行上面的代码,
看看错误发生在哪个环节

你也可以用gdb调试,指定那个函数的入口添加一个breakpoint

#10


引用 9 楼 pcboyxhy 的回复:
strace php -r 'echo date("Y-m-d")."\n";' 2> log

vim log

搜索所有的time系统调用
/^time

1. 检查time系统调用返回值是否正确。
2. 返回值如果正确,检查时区设置。
3. 如果以上都没问题,要跟踪php了。

下载一份对应版本的php的源码,修改ext/date/php_date.c中定义的date函数,
把每一步操作的结果输出到一个文件,然后编译php,用编译后的php运行上面的代码,
看看错误发生在哪个环节

你也可以用gdb调试,指定那个函数的入口添加一个breakpoint


网络上发现是php的bug,只有5.2.10 在Solaris Sparc version 9上有这问题。请参看

Also, seeing this after upgrading from 5.2.9 to 5.2.10.

On Solaris Sparc version 9.

     <?=date(Y); ?>

returns 0000 on 5.2.10
and returns 2009 as expected on 5.2.9

转自:

http://bugs.php.net/bug.php?id=48276


不过我还是学习下strace怎么用,感谢。

#11


看来php还是在Linux下问题少一些,反馈bug的人也多一些
在AIX下,php5.2.9也有一些问题,不改源码编译都编译不过去