杰奇cms上传头像不成功,原因解析

这个问题,折磨了我半年,我现在只想愤怒骂街。我怎么都想不通,为什么一个头像上传还能看人品,只要是windows有些人可以。有些人却怎么都不行,而且在linux下又是完全正常的。甚至我还看见一个奇葩的杰奇二次开发者,通过js记录cookies方式来强制把头像写入,而且大多数环境下,杰奇1.8一直到2.3全部都是不成功的,不过我终于找到原因了,无比坑爹的原因。

首先说我的过程:
1.linux下能成功,windows下不成功, 我首先想到的是文件夹权限问题,杰奇涉及头像上传的文件夹是/files/system/avatar,但是我无论设置怎样的权限,仍然是上传不了,而且我发现,杰奇在修改头像的时候,第一步头像出现的时候,它还并没有写入数据库,而是处于缓存状态。缓存状态是什么概念,那就是存在一个缓存文件夹,然而我找不到。
2.于是我想到那种通过js配合几个文件强制写入方法,我并没有弄懂原理,但是可以确定的是,只有2.3版本可以使用,2.2下面没点卵用。但由于是唯一成功的方案,我不断尝试了很久,仍然是失败,所以后来选择放弃,甚至想过通过完全移植2.3的整个会员中心,然后仍然是失败的。
3.过了一段时间之后,我选择解密setavatar.php文件,并没有发现有什么不对,直到我解密tmpavatar.php文件之后,发现了惊人之处。
杰奇cms上传头像不成功,原因解析
关键在这一段代码:

$uptmp = (0 < strlen(ini_get("upload_tmp_dir")) ? ini_get("upload_tmp_dir") : (0 < strlen($_ENV["TEMP"]) ? $_ENV["TEMP"] : (0 < strlen($_ENV["TMP"]) ? $_ENV["TMP"] : (strtolower(substr(PHP_OS, 0, 3)) == "win" ? "C:/WINDOWS/TEMP" : "/tmp"))));

它直接说明了C:/WINDOWS/TEMP这个路径,就是windows安装状态下,头像图片的缓存路径,那我第一时间就想到是不是这个文件的权限问题,于是很快按照网上的修改,并且意外的查询到php.ini中有一条这样的代码:

session.save_path="C:/WINDOWS/TEMP"

但是我本地由于是phpstudy一键环境,我打开php.ini之后,发现是不同的:

session.save_path="E:\phpStudy\tmp\tmp"  //这是我本地的

我顿时就绝对问题就出在这里,然后首选给user用户读写C:/WINDOWS/TEMP权限,然后修改php.ini,满怀期待的重启环境,结果仍然不能上传头像,我……
杰奇cms上传头像不成功,原因解析
所以我差点就放弃了,认为这个问题解决不了。

但是,我吃完饭冷静下来之后,注意到tmpavatar.php那个文件中代码的一个字段。

upload_tmp_dir

我觉得很眼熟好像在哪见过,果然搜索php.ini的时候,发现这这样一段话。
杰奇cms上传头像不成功,原因解析

那么我就尝试百度了一下,结果发现有一句这样的。

upload_tmp_dir =C:/WINDOWS/TEMP

就和之前定义session.save_path差不多,那么我把这句话加入php.ini之后,再重启环境去上传头像。

杰奇cms上传头像不成功,原因解析

是的成功了!!!

所以总得来说,杰奇cms在windows下无法上传头像的时候。
排除掉环境问题,源码问题,那就只剩下upload_tmp_dir没有定义了。
解决办法就是在php.ini里面加上这一句。

upload_tmp_dir =C:/WINDOWS/TEMP

好了,我辛苦写出来的教程在这里,可以转载但注明来源~~

本文由网友投稿或「聚码源码网」整理自网络,如转载请注明出处:https://www.jumaniu.com/14032/

本站发布的内容若侵犯到您的权益,请邮件联系 zhangqy2022#yeah.net 删除,我们将及时处理!

从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!

本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。

本站资源仅供学习和交流使用,版权归原作者所有,请在下载后24小时之内自觉删除。

若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。

常见问题
  • 本站所有资源解压密码为:www.jumaniu.com 或 www.tdji.cn
查看详情

相关文章

评论
暂无评论