2016-10-21 2 views
0

이미지 디렉토리를 스캔하고 800 픽셀 이상의 크기를 조정하는 크론 작업을 작성 중입니다. 나는 또한 이미지가 그날 업로드 되었다면 크기 변경을 입력하기를 원했기 때문에 filemtime()을 사용하려고 시도했지만 1969-12-31을 계속 되돌려 놓았습니다.PHP 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의 echo가 올바르게 경로를 출력합니다.

세 번째 에코는 파일이 존재하면 true를 반환하지만 잘못된 날짜 때문에 if 조건을 입력하지 못합니다.

로그에서 경고를 확인했는데 아무 것도 없으면 폴더 사용 권한을 확인했는데 모두 괜찮습니다.

방금 ​​끝냈습니다! 어쩌면 내 눈이 무언가를 놓치고 있거나 무언가가 일어나고있다. 그래서 나는 약간의 충고를 실제로 사용할 수있다.

+0

대신이 코드를 사용하면 어떻게됩니까? date ("F d YH : i : s. ", filemtime ($ _ SERVER [ 'DOCUMENT_ROOT']."/ forum_functions/image_uploads/{$ file} ")); ' – Hackerman

답변

0

filemtime()의 결과에 strtotime()을 부를 필요는 없습니다. strtotime()은 사람이 읽을 수있는 날짜/시간 문자열을 가져와 숫자 시간 소인으로 변환하지만, filemtime()은 문자열이 아닌 시간 소인을 반환합니다.

echo 'file date is ' . date('Y-m-d', filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}")) . '<br>'; 
0

'strtotime'을 건너 뛰어도됩니다. PHP 매뉴얼에 따르면 filemtime은 date()에서 사용하기에 적합한 값을 반환합니다.

1969-12-31은 1 월 1 일부터 1970 년까지 매우 가깝습니다. 유닉스 타임 스탬프의 시작. 편안함과 우연의 일치를 위해 닫습니다. strtotime filemtime 콤보가 일광 절약 시간 또는 시간대 오프셋으로 인해 서버를 0으로 생성하여 1969 년 12 월 31 일을 표시하는 것처럼 보입니다.

관련 문제