Change cache-busting query string format from ?YYYYMMDDHHMMSS to ?t=UnixTime

- 날짜, 유닉스 타임스탬프, 16진수(CKEditor) 등 여러 가지 포맷을 혼용하고 있던
  캐시 방지용 쿼리스트링의 형태를 "유닉스 타임스탬프"로 통일
- 표준 시간대 처리 등 은근히 많은 자원을 소모하는 date() 함수를 사용하지 않음
- t=를 붙여서 정상적인 쿼리스트링 구조가 나오도록 하여, 웹방화벽이나 CDN
  등에서 문제를 일으킬 가능성을 줄임
- 덤으로, 길이도 2바이트씩 짧아짐
This commit is contained in:
Kijin Sung 2023-09-12 23:15:26 +09:00
parent 68ee78f1f8
commit c8638d2548
9 changed files with 20 additions and 20 deletions

View file

@ -2841,7 +2841,7 @@ class Context
list($width, $height) = getimagesize(\RX_BASEDIR . $filename);
}
self::$_instance->meta_images[] = array(
'filepath' => $filename . '?' . date('YmdHis', filemtime(\RX_BASEDIR . $filename)),
'filepath' => $filename . '?t=' . filemtime(\RX_BASEDIR . $filename),
'width' => $width,
'height' => $height,
);

View file

@ -246,7 +246,7 @@ class DisplayHandler extends Handler
{
case 'HTML':
$json_options = defined('JSON_PRETTY_PRINT') ? (JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) : 0;
$panel_script = sprintf('<script src="%s%s?%s"></script>', RX_BASEURL, 'common/js/debug.js', filemtime(RX_BASEDIR . 'common/js/debug.js'));
$panel_script = sprintf('<script src="%s%s?t=%d"></script>', RX_BASEURL, 'common/js/debug.js', filemtime(RX_BASEDIR . 'common/js/debug.js'));
$panel_script .= "\n<script>\nvar rhymix_debug_content = " . json_encode($data, $json_options) . ";\n</script>";
$body_end_position = strrpos($output, '</body>') ?: strlen($output);
$output = substr($output, 0, $body_end_position) . "\n$panel_script\n" . substr($output, $body_end_position);

View file

@ -466,7 +466,7 @@ class FrontEndFileHandler extends Handler
$url = $file->filePath . '/' . $file->fileName;
if (!$file->isExternalURL && is_readable($file->fileFullPath))
{
$url .= '?' . date('YmdHis', filemtime($file->fileFullPath));
$url .= '?t=' . filemtime($file->fileFullPath);
}
$result[] = array('file' => $url, 'media' => $file->media);
}
@ -486,7 +486,7 @@ class FrontEndFileHandler extends Handler
$concat_content = '@charset "UTF-8";' . "\n\n" . preg_replace('/@charset\s*[\'"][a-z0-9-]+[\'"];\s*/i', '', $concat_content);
Rhymix\Framework\Storage::write(\RX_BASEDIR . $concat_filename, $concat_content);
}
$concat_filename .= '?' . date('YmdHis', filemtime(\RX_BASEDIR . $concat_filename));
$concat_filename .= '?t=' . filemtime(\RX_BASEDIR . $concat_filename);
$result[] = array('file' => \RX_BASEURL . $concat_filename, 'media' => 'all');
}
}
@ -500,7 +500,7 @@ class FrontEndFileHandler extends Handler
$url = $file->filePath . '/' . $file->fileName;
if (!$file->isExternalURL && is_readable($file->fileFullPath))
{
$url .= '?' . date('YmdHis', filemtime($file->fileFullPath));
$url .= '?t=' . filemtime($file->fileFullPath);
}
$result[] = array('file' => $url, 'media' => $file->media);
}
@ -572,7 +572,7 @@ class FrontEndFileHandler extends Handler
$url = $file->filePath . '/' . $file->fileName;
if (!$file->isExternalURL && is_readable($file->fileFullPath))
{
$url .= '?' . date('YmdHis', filemtime($file->fileFullPath));
$url .= '?t=' . filemtime($file->fileFullPath);
}
$result[] = array('file' => $url);
}
@ -590,7 +590,7 @@ class FrontEndFileHandler extends Handler
{
Rhymix\Framework\Storage::write(\RX_BASEDIR . $concat_filename, Rhymix\Framework\Formatter::concatJS($concat_files, $concat_filename));
}
$concat_filename .= '?' . date('YmdHis', filemtime(\RX_BASEDIR . $concat_filename));
$concat_filename .= '?t=' . filemtime(\RX_BASEDIR . $concat_filename);
$result[] = array('file' => \RX_BASEURL . $concat_filename);
}
}
@ -604,7 +604,7 @@ class FrontEndFileHandler extends Handler
$url = $file->filePath . '/' . $file->fileName;
if (!$file->isExternalURL && is_readable($file->fileFullPath))
{
$url .= '?' . date('YmdHis', filemtime($file->fileFullPath));
$url .= '?t=' . filemtime($file->fileFullPath);
}
$result[] = array('file' => $url);
}

View file

@ -40,7 +40,7 @@ class Icon
$filename = 'files/attach/xeicon/' . ($domain_srl ? ($domain_srl . '/') : '') . $icon_name;
if (Storage::exists(\RX_BASEDIR . $filename))
{
return \RX_BASEURL . $filename . '?' . date('YmdHis', filemtime(\RX_BASEDIR . $filename));
return \RX_BASEURL . $filename . '?t=' . filemtime(\RX_BASEDIR . $filename);
}
else
{
@ -64,7 +64,7 @@ class Icon
{
$width = $info['width'];
$height = $info['height'];
return \RX_BASEURL . $info['filename'] . '?' . date('YmdHis', filemtime(\RX_BASEDIR . $info['filename']));
return \RX_BASEURL . $info['filename'] . '?t=' . filemtime(\RX_BASEDIR . $info['filename']);
}
else
{

View file

@ -783,7 +783,7 @@ class CommentItem extends BaseObject
}
else
{
return $thumbnail_url . '?' . date('YmdHis', filemtime($thumbnail_file));
return $thumbnail_url . '?t=' . filemtime($thumbnail_file);
}
}
@ -798,7 +798,7 @@ class CommentItem extends BaseObject
clearstatcache(true, $thumbnail_file);
if (file_exists($thumbnail_file) && filesize($thumbnail_file) > 0)
{
return $thumbnail_url . '?' . date('YmdHis', filemtime($thumbnail_file));
return $thumbnail_url . '?t=' . filemtime($thumbnail_file);
}
// return false if neigher attached file nor image;

View file

@ -1135,7 +1135,7 @@ class DocumentItem extends BaseObject
}
else
{
return $thumbnail_url . '?' . date('YmdHis', filemtime($thumbnail_file));
return $thumbnail_url . '?t=' . filemtime($thumbnail_file);
}
}
@ -1149,7 +1149,7 @@ class DocumentItem extends BaseObject
clearstatcache(true, $thumbnail_file);
if (file_exists($thumbnail_file) && filesize($thumbnail_file) > 0)
{
return $thumbnail_url . '?' . date('YmdHis', filemtime($thumbnail_file));
return $thumbnail_url . '?t=' . filemtime($thumbnail_file);
}
// Get content if it does not exist.

View file

@ -137,7 +137,7 @@ var auto_saved_msg = "{$lang->msg_auto_saved}";
CKEDITOR.dtd.$removeEmpty.ins = 0;
// Set the timestamp for plugins.
CKEDITOR.timestamp = '{strtoupper(dechex(max($ckeditor_main_filemtime, $ckeditor_config_filemtime, $editor_config_timestamp ?? 0)))}';
CKEDITOR.timestamp = '{max($ckeditor_main_filemtime, $ckeditor_config_filemtime, $editor_config_timestamp ?? 0)}';
// Add editor components.
<!--@if($enable_component)-->

View file

@ -1109,7 +1109,7 @@ class MemberModel extends Member
$info = new stdClass();
$info->width = $width;
$info->height = $height;
$info->src = \RX_BASEURL . $image_name_file . '?' . date('YmdHis', filemtime(\RX_BASEDIR . $image_name_file));
$info->src = \RX_BASEURL . $image_name_file . '?t=' . filemtime(\RX_BASEDIR . $image_name_file);
$info->file = './'.$image_name_file;
$GLOBALS['__member_info__']['profile_image'][$member_srl] = $info;
break;
@ -1142,7 +1142,7 @@ class MemberModel extends Member
$info = new stdClass;
$info->width = $width;
$info->height = $height;
$info->src = \RX_BASEURL . $image_name_file. '?' . date('YmdHis', filemtime(\RX_BASEDIR . $image_name_file));
$info->src = \RX_BASEURL . $image_name_file. '?t=' . filemtime(\RX_BASEDIR . $image_name_file);
$info->file = './'.$image_name_file;
$GLOBALS['__member_info__']['image_name'][$member_srl] = $info;
}
@ -1176,7 +1176,7 @@ class MemberModel extends Member
$info = new stdClass;
$info->width = $width;
$info->height = $height;
$info->src = \RX_BASEURL . $image_mark_file . '?' . date('YmdHis', filemtime(\RX_BASEDIR . $image_mark_file));
$info->src = \RX_BASEURL . $image_mark_file . '?t=' . filemtime(\RX_BASEDIR . $image_mark_file);
$info->file = './'.$image_mark_file;
$GLOBALS['__member_info__']['image_mark'][$member_srl] = $info;
}
@ -1232,7 +1232,7 @@ class MemberModel extends Member
$localpath = str_replace('/./', '/', parse_url($info->src, PHP_URL_PATH));
if(file_exists($_SERVER['DOCUMENT_ROOT'] . $localpath))
{
$info->src = $localpath . '?' . date('YmdHis', filemtime($_SERVER['DOCUMENT_ROOT'] . $localpath));
$info->src = $localpath . '?t=' . filemtime($_SERVER['DOCUMENT_ROOT'] . $localpath);
}
}
$GLOBALS['__member_info__']['group_image_mark'][$member_srl] = $info;

View file

@ -19,7 +19,7 @@ class rssModel extends rss
$config->feed_document_count = intval($config->feed_document_count ?? 15) ?: 15;
if (isset($config->image) && $config->image)
{
$config->image_url = $config->image . '?' . date('YmdHis', filemtime($config->image));
$config->image_url = $config->image . '?t=' . filemtime($config->image);
}
return $config;