ThinkPHP使用CDN加速不显示图片
如果你在用thinkPHP做东西,并且又用到了七牛之类的CDN加速方案,那么你应该会碰到这种情况:
当你在一个文章上传了一张图片,图片能正常显示到前端页面,当你在另一个文章又上传了同一张图片,这个时候当前文章的图片能正常显示,可是之前的那文章的图片却不见了。这是怎么加速呢?
其实是因为thinkPHP对图片有指纹验证功能,同样的图片不会二次上传,这其中的指纹识别是记录到数据库中的。当系统通过这种技术检测到图片已经存在的时候,会进一步判断图片实际文件是否真实存在,如果不存在就把数据库里面当前图片记录删除。
那么问题来了,当你上传图片是存到CDN服务器上的,本地图片其实是不存在的,或者等着你到CDN上同步过来,于是在这种情况下你再上传一张同样的图片,就会把之前的图片记录删除,这导致了之前图片的丢失。
这一切发生在如下文件:
ThinkPHP/Library/Think/Upload.class.php
/* 调用回调函数检测文件是否存在 */ $data = call_user_func($this->callback, $file); if( $this->callback && $data ){ if ( file_exists('.'.$data['path']) ) { $info[$key] = $data; continue; }elseif($this->removeTrash){ call_user_func($this->removeTrash,$data);//删除垃圾据 } }
解决也很简单:
/* 调用回调函数检测文件是否存在 */ $data = call_user_func($this->callback, $file); if( $this->callback && $data ){ /* Net file url have no file in local path */ if ( file_exists('.'.$data['path']) || file_get_contents($data['url'], 0, null, 0, 1) ) { $info[$key] = $data; continue; }elseif($this->removeTrash){ call_user_func($this->removeTrash,$data);//删除垃圾据 } }
就这样,不会因为本地没有实际图片而被删除记录了。
标签: php
日历
最新微语
- 有的时候,会站在分叉路口,不知道向左还是右
2023-12-26 15:34
- 繁花乱开,鸟雀逐风。心自宁静,纷扰不闻。
2023-03-14 09:56
- 对于不可控的事,我们保持乐观,对于可控的事情,我们保持谨慎。
2023-02-09 11:03
- 小时候,
暑假意味着无忧无虑地玩很长一段时间,
节假意味着好吃好喝还有很多长期不见的小朋友来玩...
长大后,
这是女儿第一个暑假,
一个半月...
2022-07-11 08:54
- Watching the autumn leaves falling as you grow older together
2018-10-25 09:45
分类
最新评论
- Goonog
i get it now :) - 萧
@Fluzak:The web host... - Fluzak
Nice blog here! Also... - Albertarive
In my opinion you co... - ChesterHep
What does it plan? - ChesterHep
No, opposite. - mojoheadz
Everything is OK!... - Josephmaigh
I just want to say t... - ChesterHep
What good topic - AnthonyBub
Certainly, never it ...
发表评论: