1
abelyao 2014-07-15 15:05:23 +08:00
更换之后一句 SQL 批量替换一下。
要么就存放相对路径,每次输出到页面之前都处理一下。 如果是商品类网站我倾向下面的,文章中的插图我倾向上面的方法。 |
2
imn1 2014-07-15 15:11:10 +08:00
script redir
|
3
582033 OP @abelyao 我记得知乎之前使用upyun的,它是怎么在upyun qiniu zhiimg三个图片服务间切换的呢?总觉得替换的方式很搓
|
4
shiny 2014-07-15 15:14:25 +08:00
你的域名有没有备案…… 备案过的域名可以设置为自己的域名,就可以无缝切换。
|
5
hging 2014-07-15 15:15:28 +08:00
建议把图片的域名或者IP写一个变量,然后数据库中存相对路径。这样只需要改一个配置文件就好了。
|
6
wangdaimishu 2014-07-15 15:19:09 +08:00 1
存内容的时候把图片替换成一个标签,比如 [img=2014/07/123.jpg],然后在前台显示的时候把内如读出来,用正则将img标签换成html标签就行了,这样以后换域名就非常简单。
最重要的是你所有的图片src地址都要用一个函数来生成,比如可以写一个 getImageUrl('2014/07/123.jpg'); 输出的是 http://ooxx.com/image/2014/07/123.jpg 类似这样的内容。 一旦你这样处理了,将来图片换服务器什么的就简单了,直接改getImageUrl()就好了,或者直接就在配置文件里定义好。 |
7
582033 OP @hging 简单举个数据库存放图片的例子
这是示例内容这是示例内容<img src="http://foo.com/bar.png"> 这是示例内容这是示例内容 内容存放肯定是这样的,如果图片是相对路径,那怎么存? |
10
582033 OP |
11
learnshare 2014-07-15 15:33:42 +08:00
只存相对路径,域名单独做变量。
|
12
abelyao 2014-07-15 15:38:03 +08:00
@582033 绑定域名,最简单了,换服务而无需换域名。
如果换域名的话,批量替换绝对是成本最低的方法了,而且最直接,最有效,用什么占位符的,都是在给服务器增加无谓的负担,考虑到访问量、和不同地方输出内容的时候都需要去替换占位符,简直就… |
14
wangdaimishu 2014-07-15 15:43:45 +08:00
@abelyao 如果你的内容只用在web上当然没问题,但是哪天老板想顺应移动大潮了怎么办?占位符的好处就显示出来了,我可以web用一份图片,app用另一份,简单灵活。。。。
|
15
abelyao 2014-07-15 15:47:27 +08:00
@wangdaimishu 看我在一楼的回复。
另外,如果考虑移动端,域名占位符也解决不了这个问题,而应该使用图片样式,来显示同一张图的不同尺寸版本,如果显示的是同一个尺寸版本,那就没必要想那么远了。 |
16
abelyao 2014-07-15 15:48:14 +08:00
@wangdaimishu 像 upyun 和 qiniu 都有提供“图片样式”或者叫“缩略图版本”的功能
|
17
582033 OP @abelyao 自己写了个nginx url_rewrite来实现图片样式,附上
location ~ .*\.(jpg|png|gif)?(!\w+|\s|!\d+)$ { rewrite ^/(tmp\/.*)/(\d+).(jpg|png|gif)!(\d+|\w+)$ /$1/$4_$2.$3; if ( !-f $request_filename ) { rewrite ^/(tmp\/.*)/(.*).(jpg|png|gif)$ /upload/create/$1/$2.$3 redirect; } expires 30d; } 例如原图地址是:http://foo.com/bar.jpg |
18
582033 OP @abelyao 自己写了个nginx url_rewrite来实现图片样式,附上
location ~ .*\.(jpg|png|gif)?(!\w+|\s|!\d+)$ { rewrite ^/(tmp\/.*)/(\d+).(jpg|png|gif)!(\d+|\w+)$ /$1/$4_$2.$3; if ( !-f $request_filename ) { rewrite ^/(tmp\/.*)/(.*).(jpg|png|gif)$ /upload/create/$1/$2.$3 redirect; } expires 30d; } 例如原图地址是:http://foo.com/bar.jpg 60x60的就是 http://foo.com/bar.jpg!60 80x80的就是 http://foo.com/bar.jpg!80 如果没有120x120这个尺寸,访问的时候会请求后端php生成 |
19
sobigfish 2014-07-15 16:45:41 +08:00
host 和 uri分开啊
|
20
Lax 2014-07-15 18:03:14 +08:00
之前做过的一个方案:
分10个目录dir[0-9],文件随机平均放进去。文件名形式为/dir[0-9]/path/to/file.jpg,数据库保存这个文件名。 另有一个对应关系表(存数据库或配置文件或memcache等):dir0-> img0.xxx.com, dir1-> img1.xxx.com, ... 想换域名时,只需要更改对应关系,比如dir0 -> up.img0.xxx.com, dir1 -> qiniu.img1.xxx.com,改数据库或配置文件即可生效。 |