2011-03-20 3 views
0

아래 코드를 사용하여 클라우드 서버에있는 파일을 timestamps 개 얻은 다음 특정 나이 이상인 파일을 삭제합니다.두 개의 유닉스 시간 파일을 비교하여 오래된 파일을 삭제하십시오.

현재 코드는 테스트를 위해 10 분 이상 지울 수 있도록 설정됩니다.

그러나 일부 파일을 업로드 한 다음 10 초 후에 스크립트를 실행하더라도 모든 파일이 삭제됩니다.

내가보기 싫은 작은 문제가 있습니까?

$auth->authenticate(); 

    //connect 
    $conn = new CF_Connection($auth); 

    //create a handle for the CLOUD FILES container we want to delete from 
    $daily_dose = $conn->get_container('daily_dose'); 

    //delete the obeject 
    $daily_packages = $daily_dose->list_objects(); 
    //print_r($daily_packages); 
    //$public_container = $conn->get_container("public"); 

    //$file_age = 86400; // 1 day in seconds 
    $file_age = 600; // 10 minutes 

    echo 'current time: '; 
    echo $current_time = time(); 
    echo '<br>'; 
    echo 'time offset: '; 
    echo $previous_day = $current_time - $file_age; 
    echo '<br>'; 

    foreach($daily_packages as $package) 
    { 
     echo $item = $daily_dose->get_object($package); 
     $modified = $item->last_modified; 
     echo ' ' . $modified; 
     echo ' -> ' . strtotime($modified); 
     echo '<br>'; 

     //If the modified time of the file is less the current time - 1 day in seconds (older than 1 day) delete it 
     if ($modified < $previous_day) 
     { 
      //delete the file 
      $daily_dose->delete_object($item); 
     } 
    } 
+0

당신도 포함 할 수 있습니다 설정 어떤 시간 사이에 시간 또는 시간대의 차이() 반환 및 소프트웨어가 없는지 확인 그것으로부터'echo'd가 무엇인지, 그것은 우리에게도 유용 할 것입니다. – alex

+0

정확히'$ item-> last_modified'에 무엇이 있습니까? 사실'time()'과 같은 종류의 타임 스탬프가 반환됩니까? 여러분의 코드를 조금 더 계측한다고 가정 해보십시오 :'echo '. $ 수정 됨. '->'. strtotime ($ 수정 됨). '; 비교 '. $ 수정 됨. '함께'. $ previous_day. '=>'. ($ modified <$ previous_day).
; 또는 종류의 무엇인가; 출력이 켜져 있습니까? –

+0

'last_modified'는'Sun, 20 Mar 2011 23:09:36 GMT'와 같은 것을 반환하는 클래스 변수입니다. 그러면'timestamps'가됩니다 – ian

답변

0

$ modified에서 strtotime()을 호출하면 이미 UNIX 타임 스탬프가 아닌 것 같습니다. time()은 UNIX 타임 스탬프를 반환합니다. 다음과 같이

수표, 다음,해야하지 :

if(strtotime($modified) < $previous_day) 

는 UNIX 타임 스탬프를 비교하는 그런 식으로, $ 항목 -> LAST_MODIFIED가 올바른 값을 반환 주어진 코드가 작동합니다.

그렇지 않으면, (일부 디버그 출력을 확인하는 쉬운) 당신의 $ 항목에 LAST_MODIFIED 값

+0

시간대가있는 뭔가가있을 수 있습니다 ... – ian

+0

In 자신의 질문에 대한 귀하의 의견은 'last_modified는 Sun, 20 Mar 2011 23:09:36 GMT'와 같은 것을 반환하는 클래스 변수라는 것을 나타내므로 지금 당신이 'if'조건을 변경해야한다는 것을 확신합니다. 하지만 시간대 차이가 없는지 항상 확인하는 것이 좋습니다. –

+0

감사합니다. 나는 변수에 넣지 않은'$ modified''timestamp'를 출력하고있었습니다. 그리고 클라우드 서버는 LONDON 시간이고 PHP 서버는 DENVER 시간이고 완벽하게 작동합니다! – ian

관련 문제