20250102 修复Typecho更新文章导致404问题
问题背景,创建文章之后,觉得某些字词不妥,就更新了一下
然后刚才更新的文章打开直接出现404问题.
深究根源是时区问题导致的,要么更新的时候修改发布时间早于当前8小时(时区+8)问题
要么修改源码,直接html\typecho\var\Widget\Contents\Post\Edit.php
在347行 protected function getCreated(): int
其中的elseif (!empty($this->request->date))里面
改成
protected function getCreated(): int
{
// 设置默认值
$created = $this->options->time;
if(!empty($this->request->date)) {
// 从前端获取,新增或者修改的时候
$created = strtotime($this->request->date)-$this->options->timezone;
} elseif ($this->have() && $this->created > 0) {
//如果是修改文章
$created = strtotime($this->request->date)-$this->options->timezone;
} elseif ($this->request->is('do=save')) {
// 如果是草稿而且没有任何输入则保持原状
$created = 0;
}
return $created;
}
解决修改文章之后出现404问题
修改时间类
typecho/var/Typecho/Date.php
public function __construct(?int $time = null)
{
$this->timeStamp = (null === $time ? self::time() : $time);
$this->year = date('Y', $this->timeStamp);
$this->month = date('m', $this->timeStamp);
$this->day = date('d', $this->timeStamp);
}
public static function setTimezoneOffset(int $offset)
{
self::$timezoneOffset = $offset;
// self::$serverTimezoneOffset = idate('Z');
}
public function word(): string
{
return I18n::dateWord($this->timeStamp, self::time() );
}
修改之后,Typecho里面的时间函数就必须依赖Linux主机的时间了,所以主机时间请设置准确,同时typecho里面也必须设置相对应的时区,避免其他插件时区混乱