OJS(Open Journal Systems)期刊管理系统,是目前主流和使用广泛的期刊学术系统,在使用OJS系统管理期刊文章的过程中,经常会有同学发现,OJS的相关图片在设置后,总是不能及时更新,比如期刊封面图、期号封面图、期刊Logo、期刊背景图等等。这是怎么回事,什么原因引起的,如何解决呢?今天丁老师就这个问题做一下介绍。
问题描述
当在后台更新相关图片后,OJS网站前台没有更新,常见于网站Logo设置、期刊Logo、期刊封面图、期号封面图等。这种情况第一次上传图片后不会出现,在第一次上传图片后,重新上传的话,后台显示正常,但是网站前台图片还是老的,没有及时更新。

#catalog_#catalog_##故障原因
经过丁老师分析后,发现这个问题其实并非OJS系统的Bug或故障,根本原因是OJS涉及的相关图片,是在程序中写死的文件名,图片在上传后文件名没有更新,而不管是网站服务器还是我们客户端使用的浏览器都是有缓存的,在图片文件名未变的情况下,相关图片读取的默认是本地缓存。要解决这种问题其实很简单,只需要在浏览器中删除本地缓存,或是强制更新缓存
(直接点击Ctrl+F5)即可。
这个问题并不是故障,严格上来讲,只能说是OJS系统一个不太严谨的地方,首先前端页面不该把图片文件名写死,而是应该做成动态灵活读取的图片文件。其次,即使是把文件名写死也不是不行,但起码在文件名后边加上一个文件版本号,或随机字符串以实现动态更新啊。直接写死文件名的话不强制刷新缓存图片是永远不会变的。
解决方法
该问题涉及两个部分,一个是服务端的图片缓存处理,一个是网站前端的图片动态文件名处理。
1.服务端图片缓存处理,需要对Apache或Nginx进行设置,具体如下。
#Nginx设置
location ~* \.(jpg|jpeg|png|gif|bmp|webp|ico|svg)$ {
#不缓存图片
expires -1;
#禁止存储、强制每次校验、代理也不缓存
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0, proxy-revalidate" always;
add_header Pragma "no-cache" always;
add_header Expires "0" always;
#闭ETag/304协商缓存,杜绝旧图返回
etag off;
if_modified_since off;
}
#Apache设置
<VirtualHost *:80>
DocumentRoot "/var/www/html"
ServerName demo.com
LoadModule headers_module modules/mod_headers.so
<FilesMatch "\.(jpg|jpeg|png|gif|webp|ico)$">
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
Header set Pragma "no-cache"
Header set Expires "0"
Header unset ETag
FileETag None
</FilesMatch>
</VirtualHost>2.OJS前端处理,需要对OJS的模板文件进行修改调整,比如header.tpl,设置
#将
<img src="{$baseUrl}/templates/images/structure/logo.png" alt="{$applicationName|escape}" title="{$applicationName|escape}" width="180" height="90" />
#改为
<img src="{$baseUrl}/templates/images/structure/logo.png?t={$smarty.now}" alt="{$applicationName|escape}" title="{$applicationName|escape}" width="180" height="90" />即在图片文件名后,加上当前时间,这样可以实现每次打开网页时,都会自动重新加载该图片文件,以解决读取缓存的问题。
全文总结
其实这个问题很多同学都遇到过,每次丁老师给他们的解决方法都是直接点击Ctrl+F5(强制更新浏览器缓存),但这种方法遇到大量访客时就无效了,毕竟不可能一个一个去教他们刷新浏览器缓存。所以说最好的方法还是对OJS前端页面进行调整,以实现当图片更新后,自动更新显示出最新的图片。
要实现这个效果,需要先对服务器端进行调整,对服务器的web中间件进行设置,不缓存图片文件。然后再对OJS的模板文件进行修改,找出所有<img>标签,对文件名添加随机字串,相当于每次打开网页,就自动重载图片,以解决图片缓存不更新的问题。
如果你也遇到这个问题,或者是想解决,但不知道从何下手,欢迎联系丁老师咨询交流。
近期网络安全形势严峻,各种病毒植入、挖矿程序、灰产推广木马始终侵扰着和影响着我们的网络资产。OJS(Open Journal Systems期刊管理系统)因是开源程序,且部分出版社用户使用的是OJS较早的老版本,因此颇受影响。本篇文章丁...
影响谷歌学术收录(Google Scholar Indexing)的原因也有很多,大部分是内容问题,针对谷歌学术对文章停止收录、删除收录等相关问题,可以联系丁老师进行咨询了解
最近有同学反应,在使用OJS期刊编审系统时,对已发布的投稿文章,进行Doi提交时,提交失败,出现了503 Service Unavailable的错误,是怎么回事呢?如图:收到该同学的故障修复请求后,丁老师对这个问题进行了研究处理。经过...
昨天有一位出版社的客户咨询,Open Journal Systems期刊管理系统(OJS)支持微信支付吗?怎么样才可以让OJS使用微信支付呢?这位客户是专门做期刊运营的,业务模式是可以让高校师生、公职人员、科研、医学机构等作者进行期刊投...