我有一个基本的 PHP 脚本来使用最近停止运行的 Windows 搜索查询索引。
脚本从索引返回结果——所以很多仍然有效——但是当脚本显然无法识别它应该停止循环遍历记录集时会发生致命错误。这是一个 PHP 日志摘录,您可以在其中看到找到并返回结果,然后脚本终止:
[11-Jul-2017 09:55:13 America/New_York] Copyofguidance.58de8e890c10e.xlsx
[11-Jul-2017 09:55:13 America/New_York] SRFWebsiteSchedule.5876a0ab683a8.xlsx
[11-Jul-2017 09:55:13 America/New_York] CSI_D01_S04_T03_STEP.5877ad8385974.pdf
[11-Jul-2017 09:55:13 America/New_York] Copyofguidance.58cbf217868d9.xlsx
[11-Jul-2017 09:55:13 America/New_York] Copyofguidance.58cbf39ca3955.xlsx
[11-Jul-2017 09:55:13 America/New_York] Copyofguidance.58cbf565194fc.xlsx
[2017 年 7 月 11 日 09:55:13 America/New_York] PHP 致命错误:未捕获的异常 'com_exception' 带有消息'来源: 未知
描述: C:\WEB\srf\scripts\windowsSearch.php:149 中的未指定错误堆栈跟踪:0 C:\WEB\srf\scripts\windowsSearch.php(149): com->moveNext()
1 {main} 在第 149 行的 C:\WEB\srf\scripts\windowsSearch.php 中抛出
以下是相关的代码行:
$conn = new COM('ADODB.Connection');
$rs = new COM('ADODB.Recordset');
$provider = "Provider=Search.CollatorDSO;Extended "
. "Properties='Application=Windows';";
$conn->open($provider);
$str = "SELECT System.ItemName, System.DateModified FROM SYSTEMINDEX "
. "WHERE DIRECTORY='"
. $nPath . "' AND CONTAINS('\""
. $kw . "\"')";
$rs->cursorLocation = 3;
$rs->lockType = 1;
$rs->cursorType = 3;
$rs->activeConnection = $conn;
$rs->open($str);
if (!($rs->bof && $rs->eof)) {
$rs->moveFirst();
while (!$rs->eof) {
error_log($rs->Fields['System.ItemName']->value);
$rs->moveNext();
}
}
我注意到 recordCount 方法也会引发致命错误。我不确定是什么改变导致了这个问题,或者是否有另一种方法可以用作解决方法。
使用 ADO 的其他代码继续运行没有问题,尽管该代码连接到 SQL Server,而不是 Windows Search。
Windows 2008 R2 服务器定期收到补丁,PHP 最近更新到 5.6.30。降级不是一个真正的选择,即使结果证明这是问题......
如果我遗漏了任何有用的信息,请告诉我。谢谢你。