0

0

PHP 变量怎么突然就消失了?

php中文网

php中文网

发布时间:2016-06-23 13:27:00

|

1693人浏览过

|

来源于php中文网

原创

我遇到一个特别奇怪的问题,用POST获取一个表单传递过来的数据,并把它赋予一个变量,这个变量在刚获取时用echo打印是没有问题的,可以正常显示。但在函数执行的过程中居然消失了!!!
本来以为是变量转换的过程中没写对引起的,但看了一下又不是,特别是奇怪的一点是:
在我使用strtotime这个函数之前echo打印这个变量没有问题!直接echo strtotime($time);也没问题,但当我执行了$time=strtotime($time);之后再次echo打印发现居然是空的!!!空的!!!

PS:之前也遇到一次很神奇的事,控制器的数据已经正确传递给前端页面,但就是不显示,只要我在控制器里print_r($res);打印这个数组的时候发现页面对应的位置里,它居然能显示了!!!
这是ecshop的bug吗?还是什么?大神指点一下!


回复讨论(解决方案)

贴出你的代码看看。。。

这个的话,是不是你的POST值没传过来啊?你重新提交下表单再试试呢!

贴出你的代码看看。。。


<?php $partners = $_POST['partners'];$starttime = $_POST['starttime'];$endtime1 = $_POST['endtime'];$sort_order = $_POST['sort_order'];@$id = $_POST['id'];$act = $_GET['act'];$actarr = array('add','edit');if(!in_array($act,$actarr) || ($id == '')){	header('Location: partners.php?act=list');}if(!empty($partners) && !empty($starttime) && !empty($endtime1)){	if(!get_magic_quotes_gpc())	{		$partners = addslashes($partners);	}	$starttime = strtotime($starttime);	$endtime = strtotime($endtime1);	@ $db = new mysqli('localhost', 'root', 'root', 'zhubao');	$db->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秒后跳?<br />";		echo "或<a href='partners.php?act=list'>???接直接跳?</a>";		//header("Location: partners.php?act=list");		header("Refresh:3; url=partners.php?act=list");	}else{		echo "插入??出?,?稍後重?.<br />";		echo "或<a href='partners.php?act=list'>??回到主?面</a>";	}	$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出来的是转换后的时间戳,可以正常输出。
关键是赋值语句之后再打印这个变量的时候居然是空的

立即学习PHP免费学习笔记(深入)”;

我在自己的电脑上用你的说法测试,结果是正常的,没有楼主说的问题。。。真诡异- -空的意思是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 以后的日期
这是儿孙们的事情,不该由你操心的

可以的,我用同学电脑确认过了

v0.dev
v0.dev

Vercel推出的AI生成式UI工具,通过文本描述生成UI组件代码

下载

你是说,你同学能strtotime打印出2070年之后的时间戳??



这是 strtotime 适用范围的问题
手册中有:

可推知 strtotime 不能处理 2069 以后的日期
这是儿孙们的事情,不该由你操心的

可以的,我用同学电脑确认过了

你是说,你同学能strtotime打印出2070年之后的时间戳??


恩恩,2080也可以,另外我独自建立一个新的文件直接用strtotime打印2070不行,所以我觉得有可能是php的问题

看了回复,感觉很神奇的样子~




这是 strtotime 适用范围的问题
手册中有:

可推知 strtotime 不能处理 2069 以后的日期
这是儿孙们的事情,不该由你操心的

可以的,我用同学电脑确认过了

你是说,你同学能strtotime打印出2070年之后的时间戳??


恩恩,2080也可以,另外我独自建立一个新的文件直接用strtotime打印2070不行,所以我觉得有可能是php的问题

有可能是版本或php配置的问题。正常情况下应该是像你同学那样能正常打印,变量也不会丢失的。。





这是 strtotime 适用范围的问题
手册中有:

可推知 strtotime 不能处理 2069 以后的日期
这是儿孙们的事情,不该由你操心的

可以的,我用同学电脑确认过了

你是说,你同学能strtotime打印出2070年之后的时间戳??


恩恩,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速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

463

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

135

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

64

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

26

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

524

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

53

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号