我想知道如何将参数传递给PHP页面:想象一下我有一个页面" user.php",并且每个用户都有一个5位数的唯一ID。所以,例如,现在我正在写" user?id = 01234"访问用户01234页面,但我想写#34; user / 01234",看起来更好,我认为......
知道如何做到这一点?
谢谢!
答案 0 :(得分:1)
有许多人正在使用PHP MVC-ish框架(Laravel,Zend 2/3等),他们将深入了解有关URL重写,路由,调度等知识,以解决此问题。 URL重写可能是最佳选择。
我不知道您使用的是什么,您的软件架构或安全预防措施。但是,也就是说,$_SERVER['REQUEST_URI']
可以与explode('/', $_SERVER['REQUEST_URI'])
分开,您可以通过检索最后一个元素来获取所需的用户ID,该元素对应于结果数组中的最高索引。
你必须做一些输入验证等,但是,它可以工作。我不建议拆分$_SERVER['REQUEST_URI']
并直接使用生成的数组。首先应用基本安全流程,然后使用它。
此外,请记住,您可以使用filter_input_array(INPUT_SERVER)
来使用内置的FILTER_SANITIZE_URL
和FILTER_VALIDATE_URL
内容。
我假设您已经在进行一些过滤和验证用户ID,因此您应该能够轻松地提出例程。但这完全取决于你如何处理请求。
一个问题是默认您的网络服务器(没有任何URL重写魔法)将尝试在本地webroot下找到用户ID资源。
示例:
http://www.foo.com/user/01234/
此URL将指示HTTP服务器在名为01234 /的目录中查找index.php
。
由于可能不存在,而您想要漂亮的网址,我建议您了解网址重写。这样,您就可以了解高级用户的工作并实现目标。
URL Rewriting with mod_rewrite
获得此权力后,您将开始以全新的视角看待您的Web服务器。巧合的是,这往往会导致您在应用程序/网站的单一入口点拥有集中式index.php 。一般来说,在那个世界中,您需要检查请求以确定向用户显示哪个视图。
你不需要一个预制框架来做这件事,但有些人会引导你走向一个,因为框架已经找到了这个重写/路由/调度系统。请一些框架用户为你详细说明系统,啊,现在你发现谁知道发生了什么。不可否认,我在这里偶然发现了一些,但是,我一般都知道会发生什么。
最后,我要提一下,已经做出了标准化框架中如何处理HTTP请求的努力。 PHP-FIG(PHP Framework Interop Group)有一个名为PSR-7的标准。事实上,在理解了URL重写和面向对象设计的SOLID原则之后,这更有意义。
基本上,不是在PHP中有一堆与HTTP请求相关的分散资源($_POST
,$_GET
,$_SERVER
,$_COOKIE
),我会说PSR-7尝试为HTTP请求中包含的信息创建标准的PHP,面向对象的接口。从理论上讲,如果框架符合PSR-7标准,那么应该能够从一个框架转移到另一个框架,而无需深入挖掘以发现基本HTTP请求信息的位置。
为什么要这样做?关键是,一旦你确定了获取漂亮网址的方法,最终,你也会想要在其他地方做到这一点。创建您自己的重写/路由/调度系统,并以自定义方式处理HTTP请求,或创建与PSR-7解决方案接口的系统。
突然,在这一点上,一个罐头框架听起来很吸引人。 PSR-7并不像PSR-2(编码标准)和PSR-4(类的自动加载)那样容易学习,但是请继续进行URL重写。你将能够做到这一点。祝你好运。