簡體   English   中英

PHP filemtime()返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM