以编程方式识别PHP和ASP包含依赖项

时间:2017-01-05 10:50:51

标签: c# php asp.net iis

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

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

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

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

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

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

我希望这是足够的细节,以便暂停'暂停'

1 个答案:

答案 0 :(得分:0)

非常感谢@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服务器访问的任何其他文件。