用最短的PHP代码返回HTTP响应码
下一篇: 在Mysql数据库中存储Session
在PHP中,有标准、写入文档的方法来返回HTTP相应码。下面介绍的方法是文档中没有,但代码更简短的实现方法。
标准文档中代码
在PHP文档中,建议返回404 NOT FOUND的代码是:
header("HTTP/1.0 404 Not Found");
我打算写一个能返回HTTP响应码,而且适合框架且代码量尽量简短,所以,我并不想在代码中用数组来实现响应文本,因为这使代码太长了。
测试其它可能方法
我决定测试一系列可行的方法来看看是否可以使得代码变短,以下是我的测试效果:
header("HTTP/1.1 404"); //works header("HTTP/1 404"); //works header("HTTP/ 404"); //works header("HTTP 404"); //doesn't work, returns 200 OK header("HTTP/1.1",0,404); //doesn't work, returns 200 OK header("HTTP/1",0,404); //doesn't work, returns 200 OK header("HTTP/",0,404); //doesn't work, returns 200 OK header("HTTP",0,404); //works header("",0,404); //doesn't work, returns 200 OK header("/",0,404); //works header("1",0,404); //works header(1,0,404); //works header(0,0,404); //works
从上面的测试结果可以知道,最短的代码是:
header(0,0,404);
这个结果对我来说使我感到意外,因为文档说函数中为了使第三个参数生效,所以第一个参数不能为空。但是,通过empty()函数可以知道整型0属于为空的参数。
我在PHP 5.3.10中测试,当然,你可以在PHP 5.4.0或以上的版本使用 http_response_code() 函数,这是它并不够短。
我并没有测试所有可能的响应码,但在我测的从400-420和500-510这些状态码中都能很好的工作。
一个友好的警告
如一些其它人认为,使用一个未被官方批露的特性是非常危险的。因为他可能在未来就变得不可行,我不会再使用它,因为使用上面那种代码无法做到像下面这些比较友好的提醒:
header("HTTP/1.0 404 This is not the page you're looking for");
或者当你想进一步描述错误时,比如,访问者访问了/api/resource/1234,但找不到1234这个ID:
header("HTTP/1.0 404 Resource ID 1234 not found");
使用官方提供的代码,可以将404错误描述进一步具体化,对用户也会更加友好!
英文原文:http://www.codeproject.com/Tips/1062217/The-Shortest-PHP-Code-for-Returning-HTTP-Response
下一篇: 在Mysql数据库中存储Session