2017-01-05 64 views
-5

我试图自动清理遗留/遗产代码,我可以从IIS日志中识别当前正在使用的资源,但服务器端页面如.ASP和.PHP包含我想要的链能够通过代码来识别(C#)以编程方式识别PHP和ASP包括依赖关系

为了缩小的问题,因此它的范围太广...

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

我有一些代码读取,我已经确定了所有的静态资源供应,包括初始.ASP或.PHP页面IIS日志文件。

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

碰巧我已经找到了解决方案,并提供了以下的答案。

我希望这是足够的细节,借此关闭“待定”

+0

Php允许类名的用户映射以任何方式通过spl_autoload_register文件路径(自动加载)。否则,我会说寻找包括/需要(_once)线。 – Progrock

+0

焦虑问题:http://stackoverflow.com/help/on-topic – CD001

+1

不会涵盖所有内容,但最近的最近访问文件时间? – Progrock

回答

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服务器进行访问的任何其他文件。