![](/img/trans.png)
[英]PHP: stored string date into MySQL date format, but the stored date turns out to be 1969-12-31
[英]PHP filemtime() returning 1969-12-31 - cant find issue
我正在建立一個cron作業,該作業會掃描圖像目錄並調整寬度超過800像素的任何內容。 我也只希望它在那天上傳圖像時調整大小,所以我嘗試使用filemtime(),但是我一直找回1969-12-31。
我已經閱讀了有關該問題的所有論壇帖子,但似乎無濟於事。 我已經在本地WIN 10計算機(使用xammplite)和生產Linux計算機上對其進行了測試。 兩者都使用PHP 5.3或更高版本,我得到的結果完全相同。
這是一個代碼片段以及我添加的回聲,以查看發生了什么事情:
$files = scandir($_SERVER['DOCUMENT_ROOT'] . '/forum_functions/image_uploads');
$check_date = date('Y-m-d', strtotime('now'));
echo 'check date is ' . $check_date . '<br>';
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
echo 'file date is ' . date('Y-m-d', strtotime(filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}"))) . '<br>';
echo 'file is ' . $_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}" . '<br>';
echo 'file exists ' . file_exists($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}") . '<br>';
if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}") && $check_date == date('Y-m-d', strtotime(filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}")))) {
// do resizing
}
}
}
foreach循環中的第一個回顯會為所有圖像打印1969-12-31
foreach中的第二個回顯正確打印路徑
如果文件存在,則第三次回顯返回true,但是由於日期錯誤而無法輸入if條件。
我已經檢查了日志中的警告,沒有警告,我已經檢查了文件夾權限,它們都很好。
我剛搞定! 也許我的眼睛缺少了某些東西,或者發生了一些我不了解的事情,所以我真的可以使用一些建議。
您不需要在filemtime()
的結果上調用strtotime()
filemtime()
。 strtotime()
用於獲取人類可讀的日期/時間字符串並將其轉換為數字時間戳,但是filemtime()
返回時間戳,而不是字符串。
echo 'file date is ' . date('Y-m-d', filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}")) . '<br>';
您可能要跳過“ strtotime”。 根據PHP手冊,filemtime將返回一個適用於date()的值。
1969-12-31非常接近1970年1月1日。 Unix時間戳記的開始。 為了舒適和巧合而關閉。 似乎strtotime filemtime組合產生一個0,由於夏時制或時區偏移,服務器會顯示為0,從而顯示1969年12月31日。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.