Php 无需、无需包含、无需url重写,但脚本执行时不在url中
我试图在一些遗留代码中跟踪执行流。我们有一份报告正在使用Php 无需、无需包含、无需url重写,但脚本执行时不在url中,php,apache,debugging,legacy-code,Php,Apache,Debugging,Legacy Code,我试图在一些遗留代码中跟踪执行流。我们有一份报告正在使用 http://site.com/?nq=showreport&action=view 这就是谜题: 在index.php中没有$\u GET['nq']或$\u GET['action'](并且没有 $\u请求 index.php,或它包含的任何源代码,不包括showreport.php 在.htaccess中,没有url重写 然而,showreport.php被执行 我可以访问服务器上的cPanel(但没有apache配置
http://site.com/?nq=showreport&action=view
这就是谜题:
- 在
中没有index.php
或$\u GET['nq']
(并且没有$\u GET['action']
$\u请求
,或它包含的任何源代码,不包括index.php
showreport.php
- 在
中,没有url重写.htaccess
showreport.php
被执行
我可以访问服务器上的cPanel(但没有apache配置文件),这是我无法随意使用的实时代码
是什么让这一切发生的?我应该去哪里看
更新有趣的事情-在状态更新中向客户发送了一个指向此问题的链接,以使其保持循环;几分钟后,所有访问被撤销,客户通知我项目被取消。我相信我已经足够小心了,不会留下任何代码实际所在的痕迹 我现在松了一口气,但我也渴望知道这是什么 谢谢大家的时间和帮助。我会安装并使用它来逐个查看它正在做什么 编辑: 好吧,只是个主意,但是。。。也许你的申请是一种地狱般的申请,有时我不得不在工作中搞砸?一个文件包含另一个文件,它包含另一个文件,并且该文件再次包含原始文件。。。所以,也许你的索引文件包含了一些最终导致这个文件被包含的文件 另一编辑:
或者,有时应用程序开发人员不知道什么是$\u GET变量,并且自己解析URL->doing manual includes based to based URL。您确定查看的是正确的配置或服务器吗?如果您转到上面的url,您会看到一个错误页面,似乎表明该服务器实际上是microsoft iis服务器,而不是apache服务器。检查您的crontab,[抱歉,我不知道您在cpanel中的何处可以找到它] -脚本是在特定时间启动的,还是只有在您请求特定页面时才会启动 -肖恩 编辑: 如果crontab不存在,请查看index.php[及其包含],并查找在url参数上循环的代码,而不特别注意“nq”和可能解析查询字符串的任何内容[可能类似于:$\u SERVER['query\u string']]
-sean我不知道它是如何工作的,但我知道Wordpress/Silverstipe正在使用自己的url重写来解析url以查找帖子/标签等。因此url解析可能在PHP脚本中完成。检查您的配置文件(PHP.ini和.htaccess),您可能已经设置了。解析url的方法有“上百种”——在不同的层中(系统、httpd服务器、CGI脚本)。因此,无法用您获得的信息来具体回答您的问题 您留下了一个非常明确的提示“遗留代码”。我想您的意思是,您不想完全阅读代码,甚至不想理解它,甚至不想找到正在解析该参数的相关应用程序部分 不过,如果您留下一些提示,说明代码的“遗留性”是如何的,那就太好了:年龄、PHP版本目标等。这会有所帮助 并非总是使用
$\u GET
访问这些值(对于$\u请求
也是如此,它们是近亲)
让我们看一下:
HTTP\u GET\u VARS
通过HTTP GET方法传递到当前脚本的变量的关联数组
脚本可能会使用这个数组吗?这只是一个猜测,在相当长的一段时间内,这是访问这些参数的有效方法
无论如何,这一定不是您搜索的内容。PHP中有一个经常被误解和误用(字面上被滥用)的功能。所以您可能只是在搜索$nq
除此之外,还有请求uri和apache/environment/cgi变量。请参阅上面的PHP3手册链接,其中列出了许多变量。将其与当前手册进行比较,以获得更广泛的理解
在任何情况下,您都可以使用grep
或多文件搜索(如果您需要检查某些IDE中的遗留代码,Eclipse有一个很好的内置版本)
因此,在一天结束时,您可能只需查找一个字符串,如
nq
,'nq'
,“nq”
或$nq
。然后检查搜索结果。基于字符串的搜索是进入您根本不知道的代码库的一个很好的入口。(或一次尝试。该输出类似于异常stacktrace的输出,因此它可以帮助您找出何时何地调用。如果您无法在本地开发系统上运行该应用程序,请确保没有其他人可以看到该输出Apache访问日志可能会告诉您more@MikeB有n个o访问日志,有一个access\u logs
目录是空的。http://site.com/nq=showreport&action=view
-只要启用了xdebug(但未启用配置跟踪等功能),则在showreport.php
?中尝试了debug\u backtrace()
,这是否缺少?
,您可以使用PHP函数为自己的请求启用它。我对刚刚启动的生产环境使用类似的调试;当发生PHP错误时,我可以通过这种方式获得更好的错误记录器。void xdebug_start_trace(字符串跟踪文件[,整数选项])在这里,这不是一个选项。这是一个实时统计网站,每秒点击率超过100次,不能被客户端严格禁止使用。你不能在开发环境中运行它吗?我唯一能想到的另一个选项是手动调试它,但那也不成问题。