PHP 变量怎么突然就消失了?
本来以为是变量转换的过程中没写对引起的,但看了一下又不是,特别是奇怪的一点是:
在我使用strtotime这个函数之前echo打印这个变量没有问题!直接echo strtotime($time);也没问题,但当我执行了$time=strtotime($time);之后再次echo打印发现居然是空的!!!空的!!!
PS:之前也遇到一次很神奇的事,控制器的数据已经正确传递给前端页面,但就是不显示,只要我在控制器里print_r($res);打印这个数组的时候发现页面对应的位置里,它居然能显示了!!!
这是ecshop的bug吗?还是什么?大神指点一下!
回复讨论(解决方案)
贴出你的代码看看。。。
这个的话,是不是你的POST值没传过来啊?你重新提交下表单再试试呢!
贴出你的代码看看。。。
set_charset("utf8"); if(mysqli_connect_errno()){ echo 'Error: Could not connect to database. Please try again later.'; exit; } if($act == 'add'){ $sql = "insert into ecs_partners (partners, starttime, endtime, sort_order)". " values('".$partners."', ".$starttime.", ".$endtime.", ".$sort_order.")"; }elseif($act =='edit'){ $sql = "update ecs_partners set partners='".$partners."', starttime=".$starttime. ", endtime=".$endtime.", sort_order=".$sort_order." where id=".$id; } $res = $db->query($sql); if($res){ echo "插入成功, 3秒后跳?
"; echo "或???接直接跳?"; //header("Location: partners.php?act=list"); header("Refresh:3; url=partners.php?act=list"); }else{ echo "插入??出?,?稍後重?.
"; echo "或??回到主?面"; } $db->close();}?>
贴出你的代码看看。。。
有的,我试过了,做过测试的,前面都有输出,就是经过了$endtime=strtotime($endtime);这个步骤后发现值居然空了,百思不得其解,不知道是什么原因
贴出你的代码看看。。。
忘了说了,时间因为用js判断处理,所以我直接传了 $endtime = strtotime($endtime1);
对于strtotime函数:成功则返回时间戳,否则返回 FALSE
你的$endtime1传过来具体是什么值??echo strtotime($endtime1)是多少??
$endtime = strtotime($endtime1);
对于strtotime函数:成功则返回时间戳,否则返回 FALSE
你的$endtime1传过来具体是什么值??echo strtotime($endtime1)是多少??
传过来的是一个格式化的时间字符串:2015-09-05,echo出来的是转换后的时间戳,可以正常输出。
关键是赋值语句之后再打印这个变量的时候居然是空的
$endtime = strtotime($endtime1);
对于strtotime函数:成功则返回时间戳,否则返回 FALSE
你的$endtime1传过来具体是什么值??echo strtotime($endtime1)是多少??
传过来的是一个格式化的时间字符串:2015-09-05,echo出来的是转换后的时间戳,可以正常输出。
关键是赋值语句之后再打印这个变量的时候居然是空的
我在自己的电脑上用你的说法测试,结果是正常的,没有楼主说的问题。。。真诡异- -空的意思是null吗
$endtime = strtotime($endtime1);
对于strtotime函数:成功则返回时间戳,否则返回 FALSE
你的$endtime1传过来具体是什么值??echo strtotime($endtime1)是多少??
传过来的是一个格式化的时间字符串:2015-09-05,echo出来的是转换后的时间戳,可以正常输出。
关键是赋值语句之后再打印这个变量的时候居然是空的
我在自己的电脑上用你的说法测试,结果是正常的,没有楼主说的问题。。。真诡异- -空的意思是null吗
恩恩,另外我又试了一下一下,发现var_dump(strtotime($endtime))变成了bool(false)
$endtime = strtotime($endtime1);
对于strtotime函数:成功则返回时间戳,否则返回 FALSE
你的$endtime1传过来具体是什么值??echo strtotime($endtime1)是多少??
传过来的是一个格式化的时间字符串:2015-09-05,echo出来的是转换后的时间戳,可以正常输出。
关键是赋值语句之后再打印这个变量的时候居然是空的
我在自己的电脑上用你的说法测试,结果是正常的,没有楼主说的问题。。。真诡异- -空的意思是null吗
这种事情太奇怪了,文字也表达不清,我试试找找其他同学吧
搞不明白……艾特版主来看看……
$endtime = strtotime($endtime1);
对于strtotime函数:成功则返回时间戳,否则返回 FALSE
你的$endtime1传过来具体是什么值??echo strtotime($endtime1)是多少??
传过来的是一个格式化的时间字符串:2015-09-05,echo出来的是转换后的时间戳,可以正常输出。
关键是赋值语句之后再打印这个变量的时候居然是空的
我在自己的电脑上用你的说法测试,结果是正常的,没有楼主说的问题。。。真诡异- -空的意思是null吗
恩恩,另外我又试了一下一下,发现var_dump(strtotime($endtime))变成了bool(false)
var_dump的时候不该是$endtime1吗,你dump的$endtime变量此时不存在肯定输出false,你是不是变量名弄乱了?
$endtime = strtotime($endtime1);
对于strtotime函数:成功则返回时间戳,否则返回 FALSE
你的$endtime1传过来具体是什么值??echo strtotime($endtime1)是多少??
传过来的是一个格式化的时间字符串:2015-09-05,echo出来的是转换后的时间戳,可以正常输出。
关键是赋值语句之后再打印这个变量的时候居然是空的
我在自己的电脑上用你的说法测试,结果是正常的,没有楼主说的问题。。。真诡异- -空的意思是null吗
天,我直接用字符串var_dump(strtotime('2070-01-01'))输出居然是false
$endtime = strtotime($endtime1);
对于strtotime函数:成功则返回时间戳,否则返回 FALSE
你的$endtime1传过来具体是什么值??echo strtotime($endtime1)是多少??
传过来的是一个格式化的时间字符串:2015-09-05,echo出来的是转换后的时间戳,可以正常输出。
关键是赋值语句之后再打印这个变量的时候居然是空的
我在自己的电脑上用你的说法测试,结果是正常的,没有楼主说的问题。。。真诡异- -空的意思是null吗
恩恩,另外我又试了一下一下,发现var_dump(strtotime($endtime))变成了bool(false)
var_dump的时候不该是$endtime1吗,你dump的$endtime变量此时不存在肯定输出false,你是不是变量名弄乱了?
不好意思,我这边又改了一下名称。这个会不会跟php版本有关?我转换打印了2010-01-01的时候输出时间戳是正常的,但40以上的都false了,php5.6.11
这是 strtotime 适用范围的问题
手册中有:
可推知 strtotime 不能处理 2069 以后的日期
这是儿孙们的事情,不该由你操心的
原来是这么回事么。。。。。。
这是 strtotime 适用范围的问题
手册中有:
可推知 strtotime 不能处理 2069 以后的日期
这是儿孙们的事情,不该由你操心的
原来是这么回事么。。。。。。
什么意思?
这是 strtotime 适用范围的问题
手册中有:
可推知 strtotime 不能处理 2069 以后的日期
这是儿孙们的事情,不该由你操心的
这是 strtotime 适用范围的问题
手册中有:
可推知 strtotime 不能处理 2069 以后的日期
这是儿孙们的事情,不该由你操心的
恩恩,2080也可以,另外我独自建立一个新的文件直接用strtotime打印2070不行,所以我觉得有可能是php的问题
看了回复,感觉很神奇的样子~
这是 strtotime 适用范围的问题
手册中有:
可推知 strtotime 不能处理 2069 以后的日期
这是儿孙们的事情,不该由你操心的
恩恩,2080也可以,另外我独自建立一个新的文件直接用strtotime打印2070不行,所以我觉得有可能是php的问题 有可能是版本或php配置的问题。正常情况下应该是像你同学那样能正常打印,变量也不会丢失的。。
这是 strtotime 适用范围的问题
手册中有:
可推知 strtotime 不能处理 2069 以后的日期
这是儿孙们的事情,不该由你操心的
恩恩,2080也可以,另外我独自建立一个新的文件直接用strtotime打印2070不行,所以我觉得有可能是php的问题 有可能是版本或php配置的问题。正常情况下应该是像你同学那样能正常打印,变量也不会丢失的。。
可能吧,我是自己搭建的环境,改的地方挺少的,估计有什么模块没有开启。
Ps:不知道你有没有用过php5.6.12,这个版本我在几台电脑上试了一下,发现phpinfo里没有curl任何信息,只显示了作者名称
Y2K38 漏洞
Y2K38,又称 Unix Millennium Bug, 此漏洞将会影响到所有 32 位系统下用 UNIX 时间戳整数来记录时间的 PHP,及其它编程语言。一个整型的变量所能保存的最大时间为 2038 年 1 月
19 日 03:14:07。超过这个时间后,整型数值将会溢出。从 1970 年 01 月 01 日开始,到世界标准时 2038 年 01 月 19 日星期二凌晨 03:14:07 超过 2^31 ? 1。2^31 ? 1 就是
0x7FFFFFFF,相信很多编程员都看过,在 32 位系统里,这表示最大的有符号整数。如果用它来表示秒数,大概相当于 68.1 年,从 1970 年到 2038 年刚好是这个数。
64 位系统会受到影响吗?
理论上不会,强烈建议进行一下测试。64 位系统下可以保存的日期最远日期是现在宇宙年龄的 21 倍~ 292 亿年。
我本地也是64位系统,但是我发现也有这个问题,不过我看了下apache是32位的,所以不是只有64位系统就ok了,apache也要是64位的才可以避免
那么32位机器上解决
PHP 从 5.2 版本开始引入了一个 DateTime 的类(5.1 中开始实验加入,5.3 版本中扩展了一些方法)。
是不是64位apache就能解决问题我也不确定,我也在查64位的apache下载,还没找明白,大家一起试试。
额,应该有64位apache吧?呵呵
Y2K38 漏洞
Y2K38,又称 Unix Millennium Bug, 此漏洞将会影响到所有 32 位系统下用 UNIX 时间戳整数来记录时间的 PHP,及其它编程语言。一个整型的变量所能保存的最大时间为 2038 年 1 月
19 日 03:14:07。超过这个时间后,整型数值将会溢出。从 1970 年 01 月 01 日开始,到世界标准时 2038 年 01 月 19 日星期二凌晨 03:14:07 超过 2^31 ? 1。2^31 ? 1 就是
0x7FFFFFFF,相信很多编程员都看过,在 32 位系统里,这表示最大的有符号整数。如果用它来表示秒数,大概相当于 68.1 年,从 1970 年到 2038 年刚好是这个数。
64 位系统会受到影响吗?
理论上不会,强烈建议进行一下测试。64 位系统下可以保存的日期最远日期是现在宇宙年龄的 21 倍~ 292 亿年。
我本地也是64位系统,但是我发现也有这个问题,不过我看了下apache是32位的,所以不是只有64位系统就ok了,apache也要是64位的才可以避免
我选的都是64位的
你试试echo strtotime('2038/01/19 11:14:08'); 和echo strtotime('2038/01/19 11:14:07');是不是07是可以输出的,08就不能了,溢出问题是肯定的,但是是不是win64位系统就能解决了,我还没测试成功!但是我觉得linux 64位应该是没有问题的。
看来理论上不会,不是实际情况的不会,我win64位,软件也是64位是不行的,你说你朋友是可以的,你可以问问他php版本,看看是不是最新的就没有问题,我的php是5.5.15
你试试echo strtotime('2038/01/19 11:14:08'); 和echo strtotime('2038/01/19 11:14:07');是不是07是可以输出的,08就不能了,溢出问题是肯定的,但是是不是win64位系统就能解决了,我还没测试成功!但是我觉得linux 64位应该是没有问题的。
试了,跟你想的一模一样,08的一片空白
你试试echo strtotime('2038/01/19 11:14:08'); 和echo strtotime('2038/01/19 11:14:07');是不是07是可以输出的,08就不能了,溢出问题是肯定的,但是是不是win64位系统就能解决了,我还没测试成功!但是我觉得linux 64位应该是没有问题的。
试了,跟你想的一模一样,08的一片空白
另外,我用的是win7 64bit
你试试echo strtotime('2038/01/19 11:14:08'); 和echo strtotime('2038/01/19 11:14:07');是不是07是可以输出的,08就不能了,溢出问题是肯定的,但是是不是win64位系统就能解决了,我还没测试成功!但是我觉得linux 64位应该是没有问题的。
试了,跟你想的一模一样,08的一片空白
另外,我用的是win7 64bit
在Windows环境里,PHP6以下的版本,是不支持64位的,这个PHP官方已经确认了这个问题,因为PHP5的Windows版本是测试版本,没有正式版本,这个可以在官方网站上搜索的到。
简单的说,在Windows环境里,PHP5的intval最大只支持到2147483647,也就是只支持32位,即使你的系统、WebServer、PHP都是64位版本,也只支持32位
看了网上有人说64位php使用的仍然是32位模式,只有linux或者win 64位下php7才是使用64位模式,我在下php7,看看能不能解决。
用64位的Linux版本的php就不会有问题了
用64位的Linux版本的php就不会有问题了
自己用源码的方式搭建centos+Nginx+php+mariadb服务器失败了很多次,已经元气大伤
用64位的Linux版本的php就不会有问题了
自己用源码的方式搭建centos+Nginx+php+mariadb服务器失败了很多次,已经元气大伤
元气大伤,也要继续尝试,
因为环境部署 和 问题排查的要求,不管公司大小,都需要rd能承担至少一半运维的工作,
而且PHP的生产环境,我还没见过使用Windows的
经测试,php7可以解决这个问题,不过php7没有正式发布。有没有其他bug问题就不知道了。
用64位的Linux版本的php就不会有问题了
自己用源码的方式搭建centos+Nginx+php+mariadb服务器失败了很多次,已经元气大伤
元气大伤,也要继续尝试,
因为环境部署 和 问题排查的要求,不管公司大小,都需要rd能承担至少一半运维的工作,
而且PHP的生产环境,我还没见过使用Windows的
经测试,php7可以解决这个问题,不过php7没有正式发布。有没有其他bug问题就不知道了。
非常感谢,晚点我再把同学的php版本发过来
谢谢各位,谢谢
不好意思,是我错了,我同学用的是CentOS5.4,64位的
推荐阅读
-
在一个php中,我定义了两个表单,当第一个表单提交后,生成了第二个表单,提交第二个表单后,就取不到第一个表单的数据了,该怎么办?
-
电脑新建用户后原来桌面上的资料就消失了怎么办?
-
洪秀全到底是怎么死的 为什么突然之间就暴毙了
-
荣耀通话记录自动消失了怎么办? 华为突然没有通话记录原因分析
-
明朝有哪些杨家将的小说?为何在明万历年间就突然消失了?
-
一按Ctrl+Ait+A截图快捷键截图就直接消失了截不到怎么办
-
Win10系统鼠标右键用户文件夹属性后就消失了怎么办?
-
突然懵了,php正则怎么匹配是否满足指定格式
-
php foreach中赋值 循环完成后 这个在数组内新赋值的变量就消失了么?
-
PHP 变量怎么突然就消失了?