smarty_internal_runtime_cachemodify.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. /**
  3. * Inline Runtime Methods render, setSourceByUid, setupSubTemplate
  4. *
  5. * @package Smarty
  6. * @subpackage PluginsInternal
  7. * @author Uwe Tews
  8. *
  9. **/
  10. class Smarty_Internal_Runtime_CacheModify
  11. {
  12. /**
  13. * check client side cache
  14. *
  15. * @param \Smarty_Template_Cached $cached
  16. * @param \Smarty_Internal_Template $_template
  17. * @param string $content
  18. */
  19. public function cacheModifiedCheck(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content)
  20. {
  21. $_isCached = $_template->isCached() && !$_template->compiled->has_nocache_code;
  22. $_last_modified_date =
  23. @substr($_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ], 0, strpos($_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ], 'GMT') + 3);
  24. if ($_isCached && $cached->timestamp <= strtotime($_last_modified_date)) {
  25. switch (PHP_SAPI) {
  26. case 'cgi': // php-cgi < 5.3
  27. case 'cgi-fcgi': // php-cgi >= 5.3
  28. case 'fpm-fcgi': // php-fpm >= 5.3.3
  29. header('Status: 304 Not Modified');
  30. break;
  31. case 'cli':
  32. if ( /* ^phpunit */
  33. !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */
  34. ) {
  35. $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = '304 Not Modified';
  36. }
  37. break;
  38. default:
  39. if ( /* ^phpunit */
  40. !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */
  41. ) {
  42. $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = '304 Not Modified';
  43. } else {
  44. header($_SERVER[ 'SERVER_PROTOCOL' ] . ' 304 Not Modified');
  45. }
  46. break;
  47. }
  48. } else {
  49. switch (PHP_SAPI) {
  50. case 'cli':
  51. if ( /* ^phpunit */
  52. !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */
  53. ) {
  54. $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] =
  55. 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT';
  56. }
  57. break;
  58. default:
  59. header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT');
  60. break;
  61. }
  62. echo $content;
  63. }
  64. }
  65. }