前言
昨天那篇文中我说了在Chevereto图床上传图片的时候出现了一个很奇怪的问题,webp文件无法上传,提示系统性错误,错误报告显示:Animated WebP is not supported
,意思是不支持动态webp文件。
这是个啥意思,我这上传的也不是动态webp啊?难道是Chevereto出错了?不应该啊,我这个图床也稳定运行了快两年了,前段时间还上传过webp图片的。大致检查了一遍并没有发现是哪里的问题,因为我的Chevereto还是原作者停止维护的最后一个版本 V1.4.2
,看着后台提示升级的红色图标,想了想还是升个级吧,反正也是闲着,这一升级可是费了老劲了,下面把这个坑爹的过程出现的问题以及处理方法的记录一下,至于上面这个问题的解决方法,容我卖个关子,答案放在最后😔。
国内无法在线升级
进入仪表盘,点击检查更新按钮,在弹出的提示框中点击现在升级,等了一会儿以后发现提示下载错误?什么鬼?以前升级都是很快就完成了,今天就这么背吗?转念一想,以前是国外主机,这个是国内主机,多半是因为这个 问题,这就好解决了。
解决办法
检查国内主机无法在线升级的原因是Github在国内无法访问,你只要能解决这个问题就可以了。具体方法请自行搜索,例如 :修改Hosts访问github,这里给大家说一种更简单的办法。
打开 /app/install/update/updater.php
并查找
https://github.com
替换为
https://mirror.ghproxy.com/https://github.com
这样就能国内主机就能直接后台在线升级了。或者直接下载Chevereto-free 1.6.2.zip后,上传覆盖旧版文件即可。
新版Chevereto-Free没有中文了?
经过刚才的处理以后,再升级,很快就升级成功了,重新进入仪表盘,😳怎么成了英文了?个人设置和后台设置中都没有语言设置项了?Chevereto从初版开始就内置中文语言包,怎么这一更新还不支持中文了?这用起来就费劲了啊,绝对不能忍,找找万能的网友吧,一搜索才知道,原作者停止维护Free版本以后由另外一个人接手进行维护了,然而这个人据说是个棒子,所以1.5.1版开始就已经阉割语言设置功能,真TM的棒子,脑回路就是和正常人不一样😤。幸好有大佬解决了这个问题,下面就贴一下设置方法。
解决办法
images
content
app/settings.php
以外的其他文件。1、修改class.gettext.php
打开文件:lib/G/classes/class.gettext.php
更新:最新版本chevereto
已经不带这个文件了,您可以在网上下载个旧版chevereto
从中提取该文件。如果您是由旧版升级来的,则不用下载。
搜索:private function cache()
,在其下面第二行加上return false;
。
说明:这个函数是写语言缓存的,它会强行更改语言缓存文件。这里改成让它直接返回,不要写缓存。
更改后的代码如下:
return false;
if (!@is_dir(dirname($this->cache_file))) {
throw new GettextException("Target cache dir doesn't exists", 400);
}
2、修改l10n.php
打开文件:app/lib/l10n.php
搜索:
if ($msg && !is_null($args)) {
在这行上面增加一行
$msg = CHV\L10n::gettext($msg);
更改后的代码如下:
function _s($msg, $args=null)
{
$msg = CHV\L10n::gettext($msg);
if ($msg && !is_null($args)) {
$fn = is_array($args) ? 'strtr' : 'sprintf';
$msg = $fn($msg, $args);
}
return $msg;
}
说明:这是用于调用翻译函数。
3、修改loader.php
打开文件:app/loader.php
搜索:
define('CHV_APP_PATH_CONTENT_SYSTEM', CHV_APP_PATH_CONTENT . 'system/');
在这行下面增加:
define('CHV_APP_PATH_CONTENT_LANGUAGES', CHV_APP_PATH_CONTENT . 'languages/');
说明:这是定义了一个语言文件路径,最新版本给去掉了,我们要加回来
4、上传中文语言文件
下载中文语言文件,解压后,把该语言文件上传到网站的 app/content/languages/overrides/
、app/content/languages/overrides/
和 app/content/languages/cache/overrides/
三个文件夹内。第二个文件夹可能原来没有,需要手动新建。(可以在网上下载个旧版chevereto从中提取该文件。如果您是由旧版升级来的,则不用下载。)
修改数据库
- 如果你网站原来就是设置的显示中文语言,该步骤可忽略。
- 如果原来是其他语言,或者你说新安装的,需要进数据库,把数据表
chv_settings
,把里面的default_language
的setting-value值改为zh-CN
。
后续问题
这样修改后,我的Chevereto-Free升级到 1.6.2
版本后 就支持中文了,但是,我看有网友说他们修改后出现错误,本着折腾的精神,我就又重新安装了一个1.6.2版本的测试了一下,果然修改后,打开网站直接白板了,估计是缓存问题,几经折腾,最终还是没能解决问题,各位大佬如果知道是哪里的错误,请留言指导一下。
文件下载
修改文件下载 🚀 语言包下载 🚀 Chevereto-Free 1.6.2 DEMO
安装1.6.2版本出现404错误
结果按照原来的方法安装,直接404了,猜测是伪静态的问题,上网搜索了一下,同样问题的人还不少,这里也贴一下安装方法。
新版环境要求
现在Chevereto最新版的最低环境要求已经提高到 PHP7.4
,MYSQL5.7
。而且已经支持ImageMagick,
PHP扩展
你可能还需要安装以下PHP函数:
- curl
- exif
- fileinfo
- hash
- imagick
- gd
- json
- mbstring
- pdo
- pdo-mysql
- session
- xml
- zip
设置文件夹权限
app
、content
和 images
三个文件夹,app/setting.php
文件设置权限为 777
,经测试权限 775
会出错。
伪静态
经我测试,1.6.2用以前的伪静态规则会显示404,所以要用新的,下面两个Nginx伪静态设置都是可以的。
location / { if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } try_files $uri $uri/ /api.php; } location /admin { try_files $uri /admin/index.php?$args; }
# Disable access to sensitive application files
location ~* (app|content|lib)/.*\.(po|php|lock|sql)$ {
return 404;
}
location ~* composer\.json|composer\.lock|.gitignore$ {
return 404;
}
location ~* /\.ht {
return 404;
}
# Image not found replacement
location ~* (jpe?g|png|gif|webp) {
log_not_found off;
error_page 404 /content/images/system/default/404.gif;
}
# CORS header (avoids font rendering issues)
location ~ \.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$ {
add_header Access-Control-Allow-Origin "*";
}
# Pretty URLs
location / {
try_files $uri $uri/ /index.php?$query_string;
}
需要注意的就是这几处,然后访问网站域名,根据提示填入数据库信息后安装就可以了。具体安装过程可以看我以前的文章。
宝塔环境下支持WeBP格式的设置
Chevereto-Free从1.3.0版就开始支持WEBP了,宝塔面板PHP7.4默认GD库是支持WEBP的。
1、查看GD库是否支持webp格式
宝塔面板打开PHP7.4设置 - 选择phpinfo - 查看phpinfo - 找到GD库参数 - 查看 WebP Support
是否为 enabled
,看下图(图中标记错了,不碍事,能看懂就行),只要是 enabled
就说明支持。如果查看GD库不支持WEBP,可以用下列命令重新编译安装PHP7.4。
编译安装PHP7.4
wget -O php.sh http://download.bt.cn/tools/php.sh
bash php.sh install 7.4
2、网站nginx放行webp
然后打开网站设置,分别在Nginx配置文件和伪静态中添加webp,见下图,在这个两个位置加入 webp
,然后保存。
3、Chevereto后台启用webp
最后登录Chevereto,进入仪表盘 - 设置 - 图片上传 - 勾选WEBP - 保存,此时就可以上传webp图片了。
如果还是上传出现错误,在webp转码软件里面取消勾选 保留元数据
就可以正常上传了。
安装imagick驱动Chevereto支持WEBP格式
新版的Chevereto-Free已经支持ImageMagick扩展,或许你想使用ImageMagick驱动Chevereto,但宝塔PHP7.4默认安装的ImageMagick却不支持WEBP格式,Chevereto对PHP8的兼容又不太好。以下介绍宝塔PHP7.4编译安装ImageMagick及设置的方法。
1、编译安装PHP7.4及imagick
wget -O php.sh http://download.bt.cn/tools/php.sh
bash php.sh install 7.4
然后再去安装 imagick
扩展。
2、安装最新imagick包
- 下载安装包
在https://pecl.php.net/package/imagick 下载安装包,本文所用为当前最新版的3.5.1,从3.4.4后的版本都支持WEBP。
wget https://pecl.php.net/get/imagick-3.5.1.tgz
- 解压安装包
tar -xzvf imagick-3.5.1.tgz
- 编译安装
cd imagick-3.5.1
/www/server/php/74/bin/phpize
./configure --with-modules --with-webp --with-php-config=/www/server/php/74/bin/php-config
make && make install
- 配置PHP及ImageMagick
编辑PHP7.4的配置文件,在末尾加上以下内容(no-debug-non-zts-20190902文件夹名称需以你服务器的具体文件夹名为准,请自行修改,勿照抄):
[imagick]
extension = /www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/imagick.so
重启php应该就可以安装了
可选编辑/etc/ImageMagick-6/policy.xml
文件,根据服务器具体情况修改以下几项的值,memory,map,area将限制ImageMagick所使用的内存缓存,width,height限制ImageMagick所处理的图片大小。
<policy domain="resource" name="memory" value="1024MiB"/>
<policy domain="resource" name="map" value="2048MiB"/>
<policy domain="resource" name="width" value="16KP"/>
<policy domain="resource" name="height" value="16KP"/>
<policy domain="resource" name="area" value="2048MB"/>
<policy domain="resource" name="disk" value="2GiB"/>
修改app/settings.php文件
$settings['image_library'] = 'imagick';
跨域错误警告
今天发现本站在博文中Chevereto图床的图片提示跨域错误的警告,见下图,折腾了半天还是没能解决问题,最后在一篇博文中发现说Chrome不会有这个问题,但是Egde和Firefox就会出现上述问题,经我测试确实如此,所以应该是浏览器的问题,如果介意这个情况,可以换Chrome。
Access to XMLHttpRequest at 'https://cdn2.imgbed.top/images/2021/06/18/fca81fb7598573d4ff81e891426a71a5.jpg' from origin 'https://nie.su' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
webp上传错误
上面这些基本就是我因为Chevereto上传Webp图片提示错误,然后折腾的整个过程,但是经过上面的操作,再上传Webp图片竟然还是提示错误,就在我无计可施的时候,突然灵机一动,会不会不是Chevereto的问题,而是Webp图片有问题,会这样想还是因为上面提到的一句话:
如果还是上传出现错误,在webp转码软件里面取消勾选 保留元数据
就可以正常上传了。
平时我转换Webp图片都是用一个在线服务,无需上传文件的多功能图片批量处理程序v3.0,这里要说一下,这个服务还是非常不错的,大家都可以试试,多文件处理速度很快,会不会是转换文件的时候有点问题导致的上传错误,于是我就换另外一个在线服务,Squoosh,这一次上传成功了,所以应该就是在转换文件格式的时候有问题,我会向提供服务的这位大佬反馈这个问题,看下个版本能不能解决。
编译安装imageMagick不管用,还是不支持webp
按照上面的方法编译安装imgeMagick以后应该就能解决问题,重新加载PHP配置,重启PHP试试。
另外,自从Chevereto-Free分支被棒子接管以后,除了删除中文支持以为,各种问题层出不穷,建议换最新的开心版4.0试试。
https://nie.su/archives/2236.html
v4我也装了,同样卡在webp支持上
兰空图床和Chevereto的程序架构和底层支持是不一样的,同样的PHP环境,不一定就都能正常工作。其实现在选择比较多了,不是非常建议继续使用Chevereto了,换个其他的试试:滑稽:
我又开了台机子试了一下,centos不行,debian一切正常,看来是系统问题
:乖:应该不是,我就是centos7.9,完全没有问题。不过问题解决了就好。
那问题多半就出在环境上,看看网站日志错误信息,升级下宝塔面板试试,或者安装个其他版本的PHP看看,具体我也想不出来,实在不行就在宝塔论坛问问。
但是同一个环境下兰空图床可以正常使用,想不通