近日,本站所使用的主题中许多图片资源都失效了——或者说,除了保存在本站内的图片资源都失效了。由于此问题在去年也出现过,很容易就知道是cdn又出了问题。但这次失效持续的时间有些太长,这使得我决定更换cdn。选择一家cdn服务是一个较麻烦的事,而当前已失效的cdn似乎是比较出名、效果最好的一个。那就没办法了,反正本站的资源也不多,于是就干脆把这些外链的资源也保存在本站上吧。
首先,我们要找到这些外链资源在哪。本站之前使用的cdn服务是jsdelivr提供的,他们提供的链接格式如下:
https://cdn.jsdelivr.net/gh/user/repo@version/file
也就是说,资源是存放在GitHub上的公开仓库中。本站使用的是:
https://cdn.jsdelivr.net/gh/Fuukei/Public_repository@latest/vision/some_directory/*.*
也就是Fuukei大佬名下的公开仓库中的资源(在此再次向开发这款Sakurairo主题的大佬们致谢)。因此,将该仓库中的vision文件夹下载下来,并上传到服务器的 /home/wwwroot/default
文件夹中(老实说这一步我有些怀疑会不会存在一些版权问题,虽然该主题按GPL 2.0协议共享,但似乎关于这一点没有明确说明。因此如果不行的话就只能再想办法了)。然后,我们在主题设置里(感谢作者在主题设置里提供了修改资源链接的选项,就不用去翻代码一点点找了)将所有由jsdelivr提供的cdn更换为:
https://www.gravertino.xyz/vision/some_directory/*.*
这样,该主题中的绝大部分资源的可访问性就恢复了。为什么要说绝大部分呢?因为首页的数个图标依然不能正常显示。按F12进入浏览器控制台查看错误信息,显示404,即找不到该资源。这就很奇特了。查看该资源的域名,是
https://s.nmxc.ltd/sakurairo_vision/@2.5//*.*
看上去也是一个cdn的链接。在Fuukei大佬的仓库中,同样找到了一个名为sakurairo_vision的仓库。此时我就想之前一样,干脆保存到本地好了。但在iro设置里,我发现资源路径是
https://s.nmxc.ltd/sakurairo_vision/@2.5/
而sakurairo_vision的仓库中还有多级子目录。因此,如果我直接把资源路径替换为服务器上的路径,此时访问资源依然会404,因为资源链接会成为:
https://www.gravertino.xyz/sakurairo_vision/*.*
当然,我也可以直接找到首页失效资源所在的子目录,然后放进设置里的路径中去。但这样显然会影响其他不在该目录中的资源。说来也奇怪,本站中还有许多来自sakurairo_vision的资源,为什么其他资源没有失效呢?此时我注意到那个资源链接中奇怪的双斜杠,这使我意识到,应该是主题的代码出了问题,使得某级子目录没有被正确的填入链接中。
那么,打开主题的代码文件,尝试找到bug并修复。老实说我根本不懂php,因此也只能瞎猫撞死耗子。幸运的是真让我撞上了。在layout文件夹中的all_opt.php文件中,有这么一行代码:
$social_display_icon = iro_opt('vision_resource_basepath').iro_opt('social_display_icon').'/';
感谢大佬们的命名如此的清晰易懂,看上去这个 vision_resouce_bashpath
应当就是在设置中填入的目录。而不知是何原因,后面的函数 iro_opt('social_display_icon')
返回了空值,使得出现了那个诡异的双斜杠。因此我本着大力出奇迹的精神,将其修改为:
$social_display_icon = iro_opt('vision_resource_basepath').'display_icon/sakura/';
这样,首页的数个资源就能正常加载了,除了仅剩的一个电子邮件的图片资源还是404状态。经过一番查找,在layout文件夹下的imgbox.php找到了负责生成电子邮件图片资源链接的代码:
if (iro_opt('email_name') && iro_opt('email_domain')):?>
<li><a onclick="mail_me()" class="social-wangyiyun" title="E-mail"><img loading="lazy"
alt="E-mail"
src="<?=iro_opt('vision_resource_basepath')?><?=iro_opt('social_display_icon')?>/mail.png" /></a></li>
<?php
endif;
那么,很显然,也是同样的问题。因此我将倒数第三行代码修改为:
src="<?=iro_opt('vision_resource_basepath')?>display_icon/sakura/mail.png" /></a></li>
自此,一切正常。
当然,这里的这种修复方法只是权宜之计,如果作者那边修改了资源文件的目录,或者主题更新,那么这些资源又将失效。真正的修正应该是找出为什么 iro_opt()
在输入 'social_display_icon'
时会返回空值。不过,这就不是我一个根本不懂php的人能搞定的了。说不定下个版本作者就修复了呢(笑。
Comments NOTHING