为了账号安全,请及时绑定邮箱和手机立即绑定

PHP中是否有办法通过URL的取得其返回?

PHP中是否有办法通过URL的取得其返回?

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

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

好像没太明白题主在问什么,刚开始我是这么想题主是想知道是不是存在一个PHP脚本,在不请求任何远程资源的情况下,得到请求的响应内容。
然后自己呵呵了。
后来想,可能题主想问的是,如果在同一台服务器上,有这么一个可访问的资源,但是呢,目前只有建立一个HTTP连接访问一下才能知道其内容,好像这样开销挺大,那能不能不建立HTTP连接,而通过一个什么本地的方式得到结果呢?
真头疼,感觉处处是模棱两可的概念和没有弄明白的道理。
开始认真答题:
实际上这是一个逻辑问题,题主仔细分析一下就可以知道,但是,所谓/a.php?b的访问结果,并不仅仅由a.php本身所决定。例如,如果不经过PHP解释器,访问/a.php?b的结果在默认情况下*是其脚本文本本身。访问一个HTTP的资源,取决于你的HTTP服务器根据接受到的请求去输出什么内容。那么可以很容易明白的是,不同的HTTP服务器、不同的配置、不同的代码都将产生不同的结果。所以为了每次都能获得题主预想的内容,戏还得做全套(这好像是个信息论的什么结论来着,谁可以帮忙补充一下)。当然,如果题主知道了一些前提条件,在可控的情况下简化一些中间步骤说不定也可以得到100%的结果呢。
为什么说在默认情况下呢,因为如果我用perl的解释器,将会返回匪夷所思的内容
                            
查看完整回答
反对 回复 2019-04-10
?
倚天杖

TA贡献1828条经验 获得超3个赞

是有办法实现你说的要求的,思路是这样的:
1)第一种思路:在运行b.php中运行a.php,并且捕获a.php的标准输出作为方法的返回,这个需要事先构造出运行a.php的环境,比如设置query值,即a.php里的$_GET。
a)如何运行a.php并捕获标准输出,可以参考pipe(管道)方式;
b)如何构造运行环境,可以参考CGI的环境变量进行设置。
c)这种方式是需要额外运行一个进程来进行处理的,所以性能并不是很好,不好作为线上用途。
2)第二种思路:实现一个简单的php解释器,来运行这个a.php;
a)这种方式比较复杂,但性能比第一个要好。
3)可能会有部分第三方或者开源类库实现了已有功能,这个需要你自行查找。
然后大概听了你说的这些,感觉从需求上分析,你选用的方案应该是有问题,所以才造成了这么麻烦的实现方式。当然不清楚你项目的实际困难,是否只能采取这种方式,但如果是从头开始的话,推荐是将a.php的实现抽象出来,然后a.php和b.php分别调用才是更合理的方案。
                            
查看完整回答
反对 回复 2019-04-10
  • 2 回答
  • 0 关注
  • 416 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信