全球主机交流论坛

标题: [原创]论坛头像自动换原理 [打印本页]

作者: shy9000    时间: 2010-8-7 00:31
标题: [原创]论坛头像自动换原理
随便在你的网站创建一个文件夹,然后给下面的脚本随便命名[还是命名成index.php吧,方便绕过检查].
  1. <?php
  2. $min ='1';
  3. $max ='替换为你总共的图片数';
  4. $randnum = mt_rand($min,$max);
  5. header('Content-type: image/gif');
  6. readfile("./{$randnum}.gif");
  7. ?>
复制代码
然后在同一个目录丢图片,按编号1.gif.....n.gif编辑文件名.
然后头像外链用这个php地址:http://xxxxxxx/xxx/?.gif

[ 本帖最后由 shy9000 于 2010-8-7 03:38 编辑 ]
作者: wske    时间: 2010-8-7 00:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: shy9000    时间: 2010-8-7 00:33
无聊乱写的,闲着没事干.
其实可以再简化php的,为了方便就这样了...
作者: Globalization    时间: 2010-8-7 00:34
收藏1下
作者: shy9000    时间: 2010-8-7 00:36
原帖由 Linode 于 2010-8-7 00:34 发表
收藏1下

感谢2次加分,等到了元老给你加上
作者: edmin    时间: 2010-8-7 00:36
我也发个,网上找的一直在用

  1. <?php $url='face'; $files=array(); if ($handle=opendir("$url")) {   while(false !== ($file = readdir($handle))) {       if ($file != "." && $file != "..") {       if(substr($file,-3)=='png' || substr($file,-3)=='jpg') $files[count($files)] = $file;       }   } } closedir($handle); $random=rand(0,count($files)-1); readfile("$url/$files[$random]"); ?>
复制代码


'face' 是图片文件夹名称 图片文件名随便   图片类型 substr($file,-3)=='png' 也能改的

然后头像外链用这个php地址.

文件类型其实也能改。 其他自己试试吧

演示:我现在的头像
作者: shy9000    时间: 2010-8-7 00:38
原帖由 edmin 于 2010-8-7 00:36 发表
我也发个,网上找的一直在用



'face' 是图片文件夹名称 图片文件名随便   图片类型 substr($file,-3)=='png' 也能改的

然后头像外链用这个php地址.

文件类型其实也能改。 其他自己试试吧

演示:我现在 ...

好像很复杂,你这个不用特定编号的,不错,比我的高级.
作者: edmin    时间: 2010-8-7 00:39
标题: 回复 7# 的帖子
  我是小白。代码一点也不会。网上找的,然后拿来应用
作者: usa    时间: 2010-8-7 00:39
头像可以外链php地址。。。我擦~~
作者: Cat    时间: 2010-8-7 00:39
看我的博客头部图片.....原理差不多
作者: won.cc    时间: 2010-8-7 00:40
原帖由 usa 于 2010-8-7 00:39 发表
头像可以外链php地址。。。我擦~~


o,发现问题了,也就是说签名位没了,还有头像...
作者: edmin    时间: 2010-8-7 00:40
标题: 回复 9# 的帖子
http://zi.mu/hostloc?.gif

这样的就OK
作者: shy9000    时间: 2010-8-7 00:40
原帖由 Cat 于 2010-8-7 00:39 发表
看我的博客头部图片.....原理差不多

呵呵,是的,本质都是来个随机然后读取文件
作者: Globalization    时间: 2010-8-7 00:41
我也换个吧
作者: shy9000    时间: 2010-8-7 00:41
原帖由 won.cc 于 2010-8-7 00:40 发表


o,发现问题了,也就是说签名位没了,还有头像...

呵呵,聪明
作者: shy9000    时间: 2010-8-7 00:41
原帖由 edmin 于 2010-8-7 00:40 发表


这样的就OK

绕过检查,呵呵
作者: shy9000    时间: 2010-8-7 00:43
补充了...
作者: Globalization    时间: 2010-8-7 01:05
我的打不开空白
作者: se7en    时间: 2010-8-7 01:24
百变头像
作者: cnx    时间: 2010-8-7 01:36
我很低调。
作者: smdcn    时间: 2010-8-7 02:14
如果需要绕过检查,更好的方法是用rewrite嘛
作者: shy9000    时间: 2010-8-7 02:44
原帖由 smdcn 于 2010-8-7 02:14 发表
如果需要绕过检查,更好的方法是用rewrite嘛

说的也是,呵呵
作者: serverpoint    时间: 2010-8-7 03:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: 咯拉无米    时间: 2010-8-7 03:27
这种帖子还是发网站建设区吧
实在的方法很多
去年的帖子: http://www.discuz.net/forum.php?mod=viewthread&tid=1256811
作者: shy9000    时间: 2010-8-7 03:39
原帖由 Linode 于 2010-8-7 01:05 发表
我的打不开空白

函数打错了,应该是mt_rand...少了中间一下划
作者: shy9000    时间: 2010-8-7 03:41
原帖由 咯拉无米 于 2010-8-7 03:27 发表
这种帖子还是发网站建设区吧
实在的方法很多
去年的帖子: http://www.discuz.net/forum.php?mod=viewthread&tid=1256811

擦汗,你的代码压缩的够简洁,呵呵.
作者: lyylts    时间: 2010-8-7 08:48
GAE=不浪费你的主机流量+全球<200ms的延迟+99.99%uptime头像从不503
  1. import wsgiref.handlers
  2. import random
  3. from google.appengine.api import users
  4. from google.appengine.ext import webapp
  5. from google.appengine.ext import db
  6. from google.appengine.api import urlfetch
  7. from google.appengine.api import images
  8. from google.appengine.api import memcache

  9. class Avatar(db.Model):
  10.     url_mime = db.StringProperty(required=True) # mime if avatar, or url
  11.     avatar = db.BlobProperty()

  12. def flushcache():
  13.     return memcache.Client().delete('avatars')

  14. def getcachedlist():
  15.     alist = memcache.Client().get('avatars')
  16.     if alist:
  17.         return alist
  18.     else:
  19.         alist = []
  20.         q = Avatar.all();
  21.         for avatar in q:
  22.             alist.append(str(avatar.key()))
  23.         return alist

  24. def checkauth(handler):
  25.     user = users.get_current_user()
  26.     if not (user and users.is_current_user_admin()):
  27.         handler.redirect(users.create_login_url(handler.request.uri))

  28. def sendmsg(handler, msg, dest=None):
  29.     handler.response.clear()
  30.     handler.response.headers['Content-Type'] = 'text/html'
  31.     if 'Referer' in handler.request.headers:
  32.         dest = handler.request.headers['Referer']
  33.     if dest:
  34.         handler.response.out.write("""
  35.             <html>
  36.             <head><title>Message</title></head>
  37.             <body>
  38.             <script language="JavaScript">
  39.             alert("%s");
  40.             window.location="%s";
  41.             </script>
  42.             %s

  43.             go to <a href="%s">%s</a>
  44.             </body>
  45.             </html>
  46.         """ % (msg, dest, msg, dest, dest))
  47.     else:
  48.         handler.response.out.write("""
  49.             <html>
  50.             <head><title>Message</title></head>
  51.             <body>
  52.             <script language="JavaScript">
  53.             alert("%s");
  54.             history.back();
  55.             </script>
  56.             %s

  57.             go back now
  58.             </body>
  59.             </html>
  60.         """ % (msg, msg))

  61. def sendavatar(handler, url_mime=None, avatar=None):
  62.     handler.response.clear()
  63.     handler.response.headers['Expires'] = 'Thu, 01 Dec 1994 16:00:00 GMT'
  64.     if url_mime:
  65.         if avatar:
  66.             handler.response.headers['Content-Type'] = 'image/png'
  67.             handler.response.out.write(avatar)
  68.         else:
  69.             handler.redirect(url_mime)
  70.     else:
  71.         handler.response.headers['Content-Type'] = 'text/plain'
  72.         handler.response.out.write('no avatar')

  73. def resizeandsaveavatar(handler, url_mime, avatar=None):
  74.     if avatar:
  75.         r = int(handler.request.get('r'))
  76.         w = int(handler.request.get('w'))
  77.         h = int(handler.request.get('h'))
  78.         if w == 0 and h == 0 and r == 0 and url_mime \
  79.             and handler.request.get('hflip') != 'yes' \
  80.             and handler.request.get('vflip') != 'yes' \
  81.             and handler.request.get('lucky') != 'yes': # no op
  82.                 avataro = Avatar(url_mime=url_mime, avatar=db.Blob(avatar))
  83.         else:        
  84.             imageo = images.Image(avatar)
  85.             if w or h:
  86.                 imageo.resize(w, h)
  87.             imageo.rotate(r)
  88.             if handler.request.get('hflip') == 'yes':
  89.                 imageo.horizontal_flip()
  90.             if handler.request.get('vflip') == 'yes':
  91.                 imageo.vertical_flip()
  92.             if handler.request.get('lucky') == 'yes':
  93.                 imageo.im_feeling_lucky()
  94.             avataro = Avatar(url_mime='image/png', avatar=db.Blob(imageo.execute_transforms()))
  95.     else:
  96.         avataro = Avatar(url_mime=url_mime)
  97.     avataro.put()
  98.     flushcache()

  99. class addavatar(webapp.RequestHandler):
  100.     def get(self):
  101.         checkauth(self)
  102.         self.response.headers['Content-Type'] = 'text/html'
  103.         self.response.out.write("""
  104.             <html>
  105.             <head><title>Add Avatar</title></head>
  106.             <body>
  107.             <form method="post" enctype="multipart/form-data">
  108.             URL/MIME: <input type="text" name="url_mime" value=""/>

  109.             (if you don't want us to convert, please tell us MIME)

  110.             <label><input type="checkbox" name="fetch" value="yes" checked="checked"> Fetch it</label>

  111.             Avatar: <input type="file" name="avatar"/>

  112.             Image Operation:

  113.             (CMYK images can't be transformed)

  114.             Resize to: <input type="text" size="5" name="w" value="0"> x <input type="text" size="5" name="h" value="0">

  115.             (width x height, 0 x 0 means not resizing)

  116.             Rotate clockwise: <input type="text" size="5" name="r" value="0"> deg.

  117.             <label><input type="checkbox" name="hflip" value="yes"> Flip horizontally</label>

  118.             <label><input type="checkbox" name="vflip" value="yes"> Flip vertically</label>

  119.             <label><input type="checkbox" name="lucky" value="yes"> I'm Feeling Lucky</label>

  120.             <input type="submit" value="Add"/>

  121.             </form>
  122.             <a href="/listavatar">Avatar List</a>
  123.             </body>
  124.             </html>
  125.         """)
  126.      
复制代码

[ 本帖最后由 lyylts 于 2010-8-7 08:50 编辑 ]
作者: lyylts    时间: 2010-8-7 08:48
接上文
  1.     def post(self):
  2.         checkauth(self)
  3.         url_mime = self.request.get('url_mime')
  4.         avatar = self.request.get('avatar')
  5.         if url_mime or avatar:
  6.             if avatar:
  7.                 try:
  8.                     resizeandsaveavatar(self, url_mime, avatar)   
  9.                     sendmsg(self, 'added')
  10.                 except Exception, ex:
  11.                     sendmsg(self, "failed to transform and/or save: %s" % ex)
  12.             else:
  13.                 if self.request.get('fetch') == 'yes':
  14.                     try:
  15.                         fc = urlfetch.fetch(url_mime)
  16.                         if fc.status_code == 200:
  17.                             if 'Content-Type' in fc.headers:
  18.                                 url_mime = fc.headers['Content-Type']
  19.                             else:
  20.                                 url_mime = None
  21.                             avatar = fc.content
  22.                             try:
  23.                                 resizeandsaveavatar(self, url_mime, avatar)   
  24.                                 sendmsg(self, 'added')
  25.                             except Exception, ex:
  26.                                 sendmsg(self, "failed to transform and/or save: %s" % ex)
  27.                         else:
  28.                             sendmsg(self, 'cannot fetch avatar: http status ' + str(fc.status_code))
  29.                     except Exception, ex:
  30.                         sendmsg(self, 'cannot fetch avatar: %s' % ex)
  31.                 else:
  32.                     try:
  33.                         resizeandsaveavatar(self, url_mime)
  34.                         sendmsg(self, 'added')
  35.                     except Exception, ex:
  36.                         sendmsg(self, "failed to transform and/or save: %s" % ex)
  37.         else:
  38.             sendmsg(self, 'fill in the form!')

  39. def sendavatarbykey(handler, key):
  40.     avatar = db.get(key)
  41.     if avatar:
  42.         sendavatar(handler, avatar.url_mime, avatar.avatar)
  43.     else:
  44.         sendavatar(handler)

  45. class showspecavatar(webapp.RequestHandler):
  46.     def get(self, key):
  47.         sendavatarbykey(self, key)

  48. class showavatar(webapp.RequestHandler):
  49.     def get(self, ext):
  50.         alist = getcachedlist()
  51.         key = random.choice(alist)
  52.         sendavatarbykey(self, key)

  53. class flushavatarcache(webapp.RequestHandler):
  54.     def get(self):
  55.         checkauth(self)
  56.         self.response.headers['Content-Type'] = 'text/plain'
  57.         self.response.out.write(str(flushcache()))
  58.         self.response.out.write("""
  59.         The return value is 0 (DELETE_NETWORK_FAILURE) on network failure,
  60.         1 (DELETE_ITEM_MISSING) if the server tried to delete the item but didn't have it,
  61.         and 2 (DELETE_SUCCESSFUL) if the item was actually deleted.
  62.         This can be used as a boolean value, where a network failure is the only bad condition.""")

  63. class delavatar(webapp.RequestHandler):
  64.     def get(self, key):
  65.         checkauth(self)
  66.         avatar = db.get(key)
  67.         if avatar:
  68.             avatar.delete()
  69.             flushcache()
  70.             sendmsg(self, 'avatar %s is deleted' % key)
  71.         else:
  72.             sendmsg(self, 'nothing to delete')

  73. class listavatar(webapp.RequestHandler):
  74.     def get(self, sizelimit=None):
  75.         if sizelimit:
  76.             trstr = """
  77.                 <tr><td><a href="/delavatar/%%s">Delete</a></td><td><img width="%s" height="%s" src="/avatar/%%s"/></td><td>%%s</td></td><td>%%s</td></tr>
  78.             """ % (sizelimit, sizelimit)
  79.         else:
  80.             trstr = """
  81.                 <tr><td><a href="/delavatar/%s">Delete</a></td><td><img src="/avatar/%s"/></td><td>%s</td><td>%s</td></tr>
  82.             """
  83.         q = Avatar.all()
  84.         self.response.headers['Content-Type'] = 'text/html'
  85.         self.response.out.write("""
  86.             <html>
  87.             <head><title>List of Avatars (%d in total)</title></head>
  88.             <body>
  89.             <a href="/addavatar">Add Avatar</a> | <a href="/flushavatarcache" target="_blank">Flush Cache</a> | Size: <input type="text" size="4" id="limit">
  90.             <input type="button" value="go" onclick="window.location='/listavatar/'+document.getElementById('limit').value"/>
  91.             

  92.             <table border="1"><tr><td>Action</td><td>Avatar</td><td>URL/MIME</td><td>Key</td></tr>
  93.         """ % q.count())
  94.         for avatar in q:
  95.             key = str(avatar.key())
  96.             self.response.out.write(trstr % (key, key, ('MIME:' if avatar.avatar else 'URL:') + str(avatar.url_mime), key))
  97.         self.response.out.write("""
  98.             </table>
  99.             </body>
  100.             </html>
  101.         """)

  102. def main():
  103.     application = webapp.WSGIApplication([
  104.         ('/addavatar', addavatar),
  105.         ('/avatar(\..*)?', showavatar),
  106.         ('/avatar/(.+)', showspecavatar),
  107.         ('/delavatar/(.+)', delavatar),
  108.         ('/listavatar', listavatar),
  109.         ('/listavatar/(.*)', listavatar),
  110.         ('/flushavatarcache', flushavatarcache)
  111.         ])
  112.     wsgiref.handlers.CGIHandler().run(application)

  113. if __name__ == "__main__":
  114.     main()
复制代码
以上为转载,但代码我也不知道那里找来的了

[ 本帖最后由 lyylts 于 2010-8-7 08:51 编辑 ]




欢迎光临 全球主机交流论坛 (https://hostloc.gdisk.cf/) Powered by Discuz! X3.4