我遇到一個特別奇怪的問題,用POST擷取一個表單傳遞過來的資料,並把它賦予一個變數,這個變數在剛擷取時用echo列印是沒有問題的,可以正常顯示。但在函數執行的過程中居然消失了!!!
本來以為是變數轉換的過程中沒寫對引起的,但看了一下又不是,特別是奇怪的一點是:
在我使用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列印出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位的