用户A设置相册的图片为"朋友可见"时,他的朋友能打开图片链接,而不是他朋友即便在浏览器打开这个图片链接也是看不到的;这个如何来设计?请大家多多讨论下!

解决方案 »

  1.   

    权限设置,这个不太难吧?
    数据库字段设置权限,读取后跟访问者的session权限比较判断true/false
      

  2.   

    朋友和朋友间肯定有一个确认字段friend(ENUM(TRUE,FALSE))来判断是否为好友,那么查看图片的时候就根据这个字段来判断就可以了!
    $sql1='select * from 朋友关系表'
    ...//执行SQL语句
    IF($row['friend'])//判断是朋友为TRUE,否则为FALSE;
     $SQL='查照片的SQL';
     $PDO->query($SQL);
    else
     ECHO '对不起,您不是他的朋友';
      

  3.   

    我的意思是:作为“朋友”在浏览器中可以查看到照片的url,如若他将这个url传给别人,让让别人没办法打开才行。参考了下腾讯相册,他们网站的私密照片url,传给其他人是可以打开看见的。我要的比腾讯更进一步的功能,就是用户登录后是可以看到他“好友”的照片,当然也就知道这些照片的URL,好友将这些照片的URL保存下来转发给别人,我的需求:是不能让别人打开(腾讯是可以打开的)。
      

  4.   

         如果图片没有做任何处理,那么知道地址就一定能在URL打开,处理方法楼上已经说了防盗链,而防盗链的处理方法也有几种,我知道可以把图片处理成二进制格式,保存到数据库,显示的时候为一个独立文件加图片头,它就只能在本站显示!外界无法引用。其他方法期待高人补充。我觉得设置.htaccess的URL的跳转应该也可以。但是没有做过.不清楚.
      

  5.   

    放入数据库也太浪费,用fread/file_get_contents什么的读入就行,这样也不知道图片的存放地址
    当然能控制服务器目录的话,禁止直接访问是最省资源的做法
      

  6.   

        图片放目录下,如果图片不多无所未,但是图片一多,那个占整个空间是非常之巨大的,而且如果我压缩它的话,file_get_contents还能读取吗?我觉得同样的情况,我会选压缩格式的二进制来存储图片,而不是直接放目录里,而且这样图片在服务器地址还是真实存在的。只是读取方式改变了。如果我知道图片地址。还是一样可以通过URL方式来显示的。我个人觉得放数据库从整个空间上来说可以起到节约空间作用,你可以做一个10万张图片的测试!除非你的图片也能跟着压缩。否则那个体积将是想不到的庞大。而且会日积月累。
      

  7.   

    图片很多的话,一般都是要用图片服务器的,空间是小问题,少量资金就可以解决访问者不可能知道file_get_contents读取的路径吧?就算图片拥有者也不可能知道file_get_contents可以读入zip压缩字串的,用zlib解压也可以
    不过总体上来说,消耗CPU(其实就是间接造成服务器日PV量降低->广告收入减少),比花钱增加存储空间更不值得所以,web编程是要考虑这点的,就是帮老板多赚点钱,嘿嘿
    还有一种方法,动态路径,就是根据session把图片复制到临时目录显示,session不同,临时目录就不同
    session结束后就把临时目录删除,不过这个也是需要更多空间的
    引申出来就是路径映射的方法,不用复制,根据session创造不同的“路径”,但实际上都映射到同一个地方,大型图片空间多使用这种方式,不过这个需要服务器的配合,一般无服务器控制权就很难实现
      

  8.   

    snmr_com: 觉得这种防盗链Nginx做比较适合,而apache好像不行啊