gototopgototop
 

PHP | 架构研究室

  • Increase font size
  • Default font size
  • Decrease font size

检测用户上传图片格式的方法

E-mail Print PDF

以前我检测用户上传图片的格式(gif, jpg, png...)一直依赖$_FILES['inputName']['type']值,$_FILES['inputName']['type']的值是依赖于浏览器的,PHP内部不作判断,所以不是可靠的,应该使用getimagesize()来获得相关信息。

我测试了一下,果然如此,同样的jpg或者png文件在ie和ff下返回的MIME类型是不同的:

ie: jpg(image/pjpeg) png(image/x-png)

ff: jpg(image/jpeg) png(image/png)

对于gif格式,ie和ff返回的MIME倒是一样的,都是image/gif。

既然$_FILES['inputName']['type']是依赖浏览器的,那么我们就完全可以伪造它,所以还是使用getimagesize()安全些。

 

几个有趣的方法:stream_*

E-mail Print PDF

stream_context_create:

使用这个方法,就可以更容易的模拟GET、POST请求了,当然,他们作用不只局限于这些,演示代码:

  1. 'method'=>"GET",
  2. 'header'=>"Accept-language: en\r\n" .
  3. "Cookie: foo=bar\r\n"
  4. )
  5. );
  6.  
  7. $context = stream_context_create($opts);
  8.  
  9. /* Sends an http request to www.example.com
  10. with additional headers shown above */
  11. $fp = fopen('http://www.example.com', 'r', false, $context);
  12. fpassthru($fp);
  13. fclose($fp);
  14. ?>
  15.  

stream_wrapper_register:

简单的说,就是实现了一个钩子,在使用一些流相关的函数的时候,这些预定义的钩子会被自动执行。

闲言碎语不多讲,看代码:

  1. class Foobar {
  2. function stream_open($path) {
  3. echo 'The path is ' . $path;
  4. return true;
  5. }
  6.  
  7. function stream_read() {
  8. // ...
  9. }
  10.  
  11. function stream_eof() {
  12. // ...
  13. }
  14.  
  15. // ...
  16. }
  17.  
  18. stream_wrapper_register('demo', 'Foobar');
  19.  
  20. include('demo://abc.php');
  21.  
  22.  

当你执行上面代码的时候,会发现include操作触发了stream_open,打印出“The path is demo://abc.php“,当然,这样的代码没有实际的应用价值,但是改造一下,我们就能用stream_wrapper_register写出很 炫的东西来,还拿include操作来说,我们还可以实现类似下面的操作:

  1. include('xml://some_xml_file.php');
  2. include('yml://some_yml_file.php');
  3.  

在include的时候,按照我们定义的协议(xml/yml)去执行预先定义的钩子动作,比如说按照特定的格式解析文件并返回PHP能识别的变量等等。

我们还可以玩得更出格些,比如:

  1. include('aop://class.php');
  2.  

然后,可以按照我们预先设置好的配置文件完成对class.php的预编译以实现AOP的效果。

反正,没有做不到,只有想不到。

当然,除了include,其他如fopen, fread等流相关函数都可以,大家发挥自己的想象吧。

Last Updated on 2010-09-19 06:46
 

10个网站用户体验优化的研究结果

E-mail Print PDF

原作者:
来源10 Usability Tips Based on Research Studies
译者scv123


我们不断地从各种地方,听到各种关于用户体验优化的技巧或提示,其中许多乍一听都很富有逻辑,但是假如我们能找到真实的数据和报告去验证这些理论或猜想,显然就能更好地确认预期效果。

本文讨论一些用户可用性方面的研究发现,这些研究结果的获取,主要通过视觉轨迹、数据统计报告、以及关于网站可用性改进方面的调研。你将会发现,许多可用 性优化的提示是众所周知的,但是得到了更好的数据支持;与此同时,你也能得到一些惊喜,这些发现可能会改变你对目前网页设计方式发展走向的看法。

1、请忘记“三次点击定律”

这是一个历史悠久的说法:如果用户不得不点击三次以上才能找到他想要的内容,那么他会不耐烦并且有挫败感(而离去)。2001年,Jeffrey Zeldman--一个颇有名气的网页设计领域权威,在他的著作《Taking Your Talent to the Web》里提出,“三次点击定律”将帮助你的网站具备更有逻辑的层次和更符合直觉的访问感受。

逻辑上看,说的没错。用户在花了很多时间点击寻找所需内容以后,当然会烦躁。

但是为何要武断的设定“三次点击”的限制?是否有迹象显示,网站访客会在尝试了“三次”点击寻找以后就会忽然放弃?

事实上,大多数访客并不会因为他们点击了某个神秘的次数以后就放弃,点击的次数和他们是否烦躁并没有明显的关联。

一项由Joshua Porter在UIE(User Interface Engineering)网站发表的研究显示,用户经过更多次点击--例如十二次点击以后,并不比三次点击以后离去的趋势更明显。Porter提到,实际上几乎没有人因为点击了超过三次就放弃。


来源: User Interface Engineering

留住用户的重点,不在于降低点击次数到某个神秘的数字以下,而是增加易用性本身。如果你能建立一个易用且带来愉悦的用户界面,但需要15次点击(5倍的“三次点击”)来完成某项工作,那么不要让无聊的三次点击定律限制了你自己。

Read more...
 

有些英文,不要不懂装懂

E-mail Print PDF

原来yellow book不是“黄书”啊,呵呵,有些英文,不要不懂装懂,望文生义。

有些英文,不要不懂装懂| jiaren.org

sporting house 妓院(不是“体育室”)

dead president 美钞(上印有总统头像)(并非“死了的总统”)

lover 情人(不是“爱人”)

busboy 餐馆勤杂工(不是“公汽售票员”)

busybody 爱管闲事的人(不是“大忙人”)

dry goods (美)纺织品;(英)谷物(不是“干货”)

heartman 换心人(不是“有心人”)

mad doctor 精神病科医生(不是“发疯的医生”)

eleventh hour 最后时刻(不是“十一点”)

blind date (由第三者安排的)男女初次会面(并非“盲目约会”或“瞎约会”)

Read more...
 

太平洋海底光缆

E-mail Print PDF

——世界首条海底高速直达光缆

工程总投资:10亿美元以上
工程期限:1997年——2020年

只要您在上网,您就会用到光纤。这些头发丝般粗细的石英玻璃光导纤维影响着几十亿人的生活。

2006年12月26日20点25分,我国台湾省南部海域发生7.2级海底地震,造成该海域13条国际海底光缆受损,致使我国至欧洲大部分地区和南 亚 部分地区的语音通信接通率随即明显下降;至欧洲、南亚地区的数据专线大量中断;互联网大面积拥塞、瘫痪,雅虎、MSN等国际网站无法访问,1500万 MSN用户长期无法登陆,1亿多中国网民一个多月无法正常上网,日本、韩国、新加坡等地网民也受到影响。5艘海缆维修船经过一个月努力,才将断裂的海缆修 复。可以说,现代生活已经无法离开海底光缆,而它偏偏出了问题。

海底光缆是目前世界上最重要的通信手段之一。1986年,美国ATT公司在西班牙加那利群岛和相邻的特内里弗岛之间,铺设了世界第一条商用海底光 缆, 全长120公里。1988年,美国与英国、法国之间铺设了世界第一条跨大西洋海底光缆(TAT-8)系统,全长6700公里,含有3对光纤,每对的传输速 率为280Mb/s,中继站距离为67公里。这标志着海底光缆时代的到来。

太平洋海底光缆

1989年,跨越太平洋全长13200公里的(TPC-3)海底光缆也建设成功,从此,海底光缆就在跨洋洲际海缆领域取代了同轴电缆。铺设1000 公 里的同轴电缆大约需要500吨铜,改用光缆只需几吨石英玻璃材料就可以了。与昂贵的铜材相比,沙石中就含有石英,几乎取之不尽。此外一根头发般细小的光 纤,其传输的信息量相当于一捆饭桌般粗细的铜线。一对金属电话线至多只能同时传送一千多路电话,而一对细如蛛丝的光导纤维理论上可以同时接通一百亿路电 话!

 

Last Updated on 2010-06-29 20:28 Read more...
 

[转] 适用于 PHP 开发人员的 Python 基础知识

E-mail Print PDF

Thomas Myer, 负责人, Triple Dog Dare Media
Thomas Myer 是一名顾问、作家和讲师,居住在 Austin。他创立了 Triple Dog Dare Media。
简介: 您是一名经验丰富的 PHP 开发人员,并且希望学习 Python 吗?本文将从 PHP 开发人员的角度来探索 Python 开发的世界,将大家熟悉的 PHP 概念(如变量、列表、函数)转换成同等的 Python 概念。

您是一名 PHP 开发人员。您在过去 五年(或更长时间)中可能一直都编写应用程序,您已经将许多想像变成了可能 — 电子商务系统、简单内容管理系统、Twitter 和 Facebook 集成以及各种自定义实用工具。您可能还需要维护大量代码 — 从简单的显示页面到包含数千行其他人编写的代码的自定义应用程序,不一而足。

Read more...
 

大教堂与市集(续)

E-mail Print PDF

◇◇ 摘 要 ◇◇

Linux的发展史促生了一些关于软件工程的惊人理论。在开源项目fetchmail中,我有意应用了这些理论并取得了很大成功。以fetchmail的成功为例,我在本文中系统地总结和剖析了这些理论。这里涉及到两种截然不同的开发模式:大多数商业项目使用的“大教堂”模式和Linux世界的“市集”模式。我们将看到,这两种模式源于对软件调试工作本质的两种彼此对立的假设。我接着从Linux的经验出发,对“只要眼球足够多,所有臭虫都好捉”的定理作了论证;给出了它与由自私个体组成的自纠错系统的相似之处。最后,我探讨了这个发现对未来软件业的启示。

Read more...
 

大教堂与市集

E-mail Print PDF

◇◇ 摘 要 ◇◇

Linux的发展史促生了一些关于软件工程的惊人理论。在开源项目fetchmail中,我有意应用了这些理论并取得了很大成功。以fetchmail的成功为例,我在本文中系统地总结和剖析了这些理论。这里涉及到两种截然不同的开发模式:大多数商业项目使用的“大教堂”模式和Linux世界的“市集”模式。我们将看到,这两种模式源于对软件调试工作本质的两种彼此对立的假设。我接着从Linux的经验出发,对“只要眼球足够多,所有臭虫都好捉”的定理作了论证;给出了它与由自私个体组成的自纠错系统的相似之处。最后,我探讨了这个发现对未来软件业的启示。

Last Updated on 2010-06-09 09:41 Read more...
 

转载:完全使用Linux工作

E-mail Print PDF

作者:王垠

我已经半年没有使用 Windows 的方式工作了。Linux 高效的完成了我所有的工作。

GNU/Linux 不是每个人都想用的。如果你只需要处理一般的事务,打游戏,那么你不需要了解下面这些了。

我不是一个狂热的自由软件份子,虽然我很喜欢自由软件。这篇文章也不是用来推行自由软件运动的,虽然我觉得自由软件运动是非常好的。

这篇文章也不是用来比较 Linux 和 Windows 内核效率,文件系统,网络服务的。我现在是作为一个用户而不是一个开发者来说话的,我们的讨论是基于操作,应用层面的。是为了告诉大学里还不了解,或者不理解 UNIX 的科学工作者和大学生,UNIX 比 Windows 更适合用于科学研究工作,请大家理解 UNIX 的工作方式,不要用 Windows 的标准来要求 Linux,而要用一个科学工作者的标准来要求自己,用UNIX 的思想来武装自己。

我显然是反对在大学,特别是理工科专业推广 Windows 的。我也反对在对"娃娃"们的计算机启蒙教育中使用 Windows。因为 Windows 不论从技术上,经济上,思想风格上都是与我们培养高科技人才的目标格格不入的。Windows 的流行属于历史遗留问题,爷爷一级的人当然已经不可救药,但是我们不应该让下一代继续走上歧途。

Last Updated on 2010-06-04 13:44 Read more...
 

集成 Twitter 到你的网站中

E-mail Print PDF

Twitter 提供了 API,可以在网站引入 timeline,然而由于一些原因,你知道的……

如果你有网站,主机在墙外,那么还是有方法的。以下代码可以满足你的要求:

  1. // 读取Twitter的函数
  2. function twitter_process($url)
  3. {
  4. $ch = curl_init($url);
  5. curl_setopt($ch, CURLOPT_VERBOSE, 1);
  6. curl_setopt($ch, CURLOPT_HEADER, 0);
  7. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  8. curl_setopt($ch, CURLOPT_USERAGENT, 'super_man');
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  10. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  11. curl_setopt($ch, CURLOPT_USERPWD, "hiEmpty:PASSWORD");
  12.  
  13. $response = curl_exec($ch);
  14. $response_info = curl_getinfo($ch);
  15. curl_close($ch);
  16.  
  17. switch(intval($response_info['http_code']))
  18. {
  19. case 200:
  20. $json = json_decode($response);
  21. if ($json)
  22. return $json;
  23. return $response;
  24. case 401:
  25. default:
  26. // NOOP
  27. }
  28. }
  29.  
  30. // 显示tweets在你的网站
  31. $o=twitter_process("https://twitter.com/statuses/user_timeline/hiEmpty.json?count=10");
  32. // $o=twitter_process("https://twitter.com/statuses/friends_timeline/hiEmpty.json?count=10");
  33. echo '<ul>';
  34. for ($i = 0; $i < count($o); $i++)
  35. {
  36. $item = $o[$i];
  37.  
  38. echo '<li>';
  39. echo '<img src=',$item->user->{'profile_image_url'},'>';
  40. echo $item->user->{'screen_name'};
  41. echo $item->{'text'};
  42. echo $item->{'created_at'},' via ',$item->{'source'};
  43. echo '</li>';
  44. }
  45. echo '</ul>';
Last Updated on 2010-06-03 21:25
 
  • «
  •  Start 
  •  Prev 
  •  1 
  •  2 
  •  3 
  •  4 
  •  Next 
  •  End 
  • »


Page 1 of 4

Hi,

I'm a 27-year-old web programer living in Earth.
I´m interested in Php Development, MySQL Performance and User Interfaces. I love playing and listening to music. I have worked as a Web Developer for three years.

Tweets

    Who's Online

    We have 1 guest online

    Newsflash

    The one thing about a Web site, it always changes! Joomla! makes it easy to add Articles, content, images, videos, and more. Site administrators can edit and manage content 'in-context' by clicking the 'Edit' link. Webmasters can also edit content through a graphical Control Panel that gives you complete control over your site.