【发布时间】:2011-11-22 17:57:20
【问题描述】:
我正在考虑一个从用户那里接收大量数据的应用程序。 但是这个数据必须在php中验证:
f.e. $_GET['id'] 必须是一个数字数组的每个元素必须是一个特定范围之间的值。
那么像 is_int($x) 或 isset($x) 这样的函数效率如何?
也许 if($x!=null) 更快或 (int) x 导致相同的结果。
处理需要快速访问数据库但需要验证的数据的最佳方法是什么? $_GET 和 $_POST 的速度有区别吗?
也许实现一个可以改进某些东西的类?
也许为了更具体的机会回答,这里有点低效的代码:
if(isset($_GET["x"]) && $_GET["x"] > 0) { $x = $_GET["x"]; }
if(isset($_GET["y"]) && $_GET["y"] > 0) { $y = $_GET["y"]; }
if(isset($_GET["winWidth"]) && $_GET["winWidth"] > 0) { $winWidth = $_GET["winWidth"]; }
if(isset($_GET["winHeight"]) && $_GET["winHeight"] > 0) { $winHeight = $_GET["winHeight"]; }
if(isset($_GET["a"])) { $a = $_GET["a"]; }
更新:
进一步的安全功能怎么样:
mysql_real_escape_string($str);
或
stripslashes()
? 请 Stackoverflow,给我看看魔法:)
哈利
【问题讨论】:
-
除非您的表单有几百万个字段,否则这些 ifs() 单独和集体运行最多仍只需要几微秒。
-
这很可能不是您的应用程序的瓶颈;不要为了优化而优化。关于 POST 与 GET,使用指南说您应该仅将 GET 用于幂等操作,而在操作后状态可能发生变化时使用 POST。
-
规划项目,使用像 MVC 这样的设计模式,使用压缩,使用 memcache 缓存或静态 html 甚至将查询结果存储在会话中,不对循环迭代进行复杂/长时间的计算,使用相对包含文件的路径,不使用 100 个回显等会显着加快脚本速度。
-
如果您正在访问数据库,即使仅在连接设置中的延迟也会使您要执行的任何数量的检查相形见绌,请专注于数据库效率。
-
这是一个微优化和过早优化的经典案例。也不要这样做。它只会使您的代码比必要的更难维护,并且不会为您带来任何真正的性能提升,您的数据库会话的执行时间总是比表单验证多一个或两个数量级。
标签: php sql validation get micro-optimization