例如这里是一个a.php:
if(isset($_GET['a']))
echo 'There\'s an "a".';
elseif(isset($_GET['b']))
echo 'There\'s a "b".';
else echo 'Nothing\'s out there.';
?>
而b.php, 从用户输入得到了一个URL, 正好是/a.php?b:
assert($_GET["wanted"] === '/a.php?b');
// 是否存在一个方法whatever, 令:
$result = whatever($_GET["wanted"]);
echo strtoupper($result); // THESE'S A "B".
这些答案是不接受的:
file_get_contents() 或 fopen() 发起远程请求: 服务器未必Listen了localhost, 域名也是不确定的, 并且发起远程请求开销太大.
重定向: 得到返回内容以后还要进一步处理.
include 或 require_once: 实际情况可能很复杂, 包括url mapping等等, 根本不知道 include 哪个文件. 另外这个URL还有可能是静态文件.
更新 20140511:
貌似因为我刻意隐藏项目中的问题, 所以很难让人清楚, 非常抱歉. 简单来说, 我就是希望能得到whatever()的一种实现.
我在项目中遇到的问题是这样的. 一个网页, HTML中有一些JS和CSS的资源, 可以直接行内展开. 如果JS和CSS全部是静态这样好办, 直接读入文件然后用正则替换上去就是了. 然而某些JS是需要根据用户输入动态生成的, 这样就必须要请求到这些PHP生成的JS, 然后再替换上去.
项目中将所有url都Rewrite到index.php, 然后在index.php做url mapping. 包括当前的网页, 和希望得到内容的JS, 都通过index.php然后再生成.