以编程方式识别 PHP 和 ASP 包含依赖项 [关闭]

Posted

技术标签:

【中文标题】以编程方式识别 PHP 和 ASP 包含依赖项 [关闭]【英文标题】:Programmatically identify PHP and ASP include dependencies [closed] 【发布时间】:2017-01-05 10:50:51 【问题描述】:

我正在尝试自动清理遗留/遗留代码,我可以从 IIS 日志中识别当前正在使用的资源,但是像 .ASP 和 .php 这样的服务器端页面包含我希望能够通过代码识别的链(C#)

为了缩小问题范围,因为它太宽泛了......

操作系统 - Windows 10 Web 服务器 - IIS 首选语言 - C# 示例 - 任何 IIS 服务的网站

我有读取 IIS 日志文件的代码,我在其中识别了所有静态服务资源,包括初始 .ASP 或 .PHP 页面。

我还需要一些附带的 C# 代码来详细说明在服务器上处理的任何 .ASP 或 .PHP 包含的文件,因此不会出现在 IIS 日志中。

碰巧我找到了解决方案并在下面提供了答案。

我希望这是足够的细节来取消“等待”

【问题讨论】:

Php 允许用户通过 spl_autoload_register 以任何方式将类名映射到文件路径(自动加载)。否则我会说寻找 include/require(_once) 行。 题外话:***.com/help/on-topic 不会涵盖所有内容,但最近的最后访问文件时间? 为了让这个问题更符合主题,请举例说明您迄今为止尝试过的代码/流程、预期结果以及哪些对您有效,哪些对您无效。 【参考方案1】:

非常感谢@Progrock 指点我检查目标文件夹中文件的上次访问时间。这是我必须做的。

确保捕获上次访问时间是由 Windows 设置的(请参阅Directory.GetFiles keeping the last access time)

Process.Start("fsutil", "behavior set disablelastaccess 0").WaitForExit();

还需要重新启动 IIS 以停止任何缓存在内存中的文件

Process.Start("IISRESET").WaitForExit();

需要刷新 FileInfo 以确保您获得正确的上次访问时间(请参阅How can System.IO.FileSystemInfo.Refresh be used)。

这导致了以下代码...

var start = DateTime.UtcNow;
Process.Start("fsutil", "behavior set disablelastaccess 0").WaitForExit();
Process.Start("IISRESET").WaitForExit();
//do work that will access folder. i.e. access IIS web pages
var files = Directory.GetFiles(iisPath, "*.*", SearchOption.AllDirectories).ToList();
files = files.Where(x =>

  var fileInfo = new FileInfo(x);
  fileInfo.Refresh();
  return fileInfo.LastAccessTimeUtc >= start;
).ToList();   

我可以使用此文件列表来识别所有 .ASP 和 .PHP 以及通过 IIS 服务器在页面请求中访问的任何其他文件。

【讨论】:

以上是关于以编程方式识别 PHP 和 ASP 包含依赖项 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法以编程方式列出所有 gradle 依赖项?

如何以编程方式列出 C++ 或 Python 中的 DLL 依赖项?

有没有办法以编程方式列出所有gradle依赖项?

如何以编程方式在C ++或Python中列出DLL的依赖项?

如何以编程方式确定 PHP 中的文档根目录?

php 允许您以编程方式(动态)将菜单项添加到WordPress菜单。