2017-01-08 1 views
0

Smarty를 사용하고 있으며 브라우저 캐싱도 사용하고 있습니다. 이미지가 수정되면 (aviary를 사용하여) 'scr'속성에 표시하고 싶을 때마다 브라우저는 이미지가 수정 될 때마다 이미지를 다시로드합니다. PHP에서 filemtime()을 사용하여이 작업을 수행 할 수 있음을 알고 있으므로 파일이 마지막으로 변경된 시간을 표시하는 Unix 타임 스탬프를 추가합니다. 하지만 이것을 구현하려고하면 제대로 작동하지 않습니다.Smarty 3 마지막으로 이미지 수정 추가

<img id="PrvImage" class="js_lightbox" data-id="42" data-image="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg" data-context="album" src="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg" alt="alt"> 

는 내가 원하는 것은 이것이다 :

나는 현재이이

HTML을 생성하는 .tpl 파일의 원본 코드는 다음과 같습니다
<img id="PrvImage" class="js_lightbox" data-id="42" data-image="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg" data-context="album" src="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg?=1483848592" alt="alt"> 

:

<img id="PrvImage" {if $profile['user_picture_id']} class="js_lightbox" data-id="{$profile['user_picture_id']}" data-image="{$profile['user_picture']}" data-context="album" {/if} src="{$profile['user_picture']}" alt="{$profile['user_fullname']}"> 

{$ profile [ 'user_picture']}는 파일의 경로입니다. 그래서 .tpl 파일에 관련되어 PHP 파일이 추가 :

$filemtime = filemtime($profile['user_picture']); 

// assign variables 
$smarty->assign('filemtime', $filemtime); 

그리고 나는이에 .tpl 수정 :

<img id="PrvImage" {if $profile['user_picture_id']} class="js_lightbox" data-id="{$profile['user_picture_id']}" data-image="{$profile['user_picture']}" data-context="album" {/if} src="{$profile['user_picture']}?={$filemtime}" alt="{$profile['user_fullname']}"> 

생성

<img id="PrvImage" class="js_lightbox" data-id="42" data-image="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg" data-context="album" src="https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg?=" alt="alt"> 

을 디버깅 후 다음 오류가 발생합니다.

filemtime() :/var/www에 https://example.com/content/uploads/photos/2017/01/c2d1c2547b0c3feec3f86af7a6484832.jpg의 stat 실패 내가 뭘 잘못

그리고 난이 마지막으로 수정 된 시간을 표시하는 방법을 어떻게해야합니까 : (164)

내 질문에 줄에 /vhosts/qreets.nl/httpdocs/profile.php?

유닉스 타임 스탬프가 2038 년에 문제가 될 것입니다. 그래서 더 좋은 대안이 있습니까?

답변

1

음, 다른 질문과 마찬가지로 사람들이 보게됩니다 ... "그리고 그날 도움을 요청하거나 시도하지 않았습니다." 위대한 ...

나는 캐시를 깨기 위해 자바 스크립트 함수를 작성했다. 모든 이미지에 적용됩니다. 특정 이미지 (예 : Google 정적지도)에 타임 스탬프를 추가하지 않으려면 제외되도록 ID를 추가 할 수 있습니다. 나는 그것이 누군가를 돕기를 바랍니다.

<script type="text/javascript"> 

    function replaceSrc() 
    { 

     var images = document.getElementsByTagName('img'); 

     for(var i = 0; i < images.length; i++) 
     { 
      var dt = new Date(); 
      var img = images[i]; 

      if(img.src.length >= 0 & img.id != 'idImageNoTimestamp') 
      { 
       img.src = img.src + "?" + dt.getTime(); 
       //javascript:alert(document.lastModified); 
      } 
     } 
    } 
    replaceSrc(); 
     </script> 
관련 문제