我有一个基本的PHP脚本,可以使用最近停止运行的Windows搜索查询索引。
脚本返回索引的结果 - 因此仍然可以工作 - 但是当脚本显然无法识别时会发生致命错误,应该停止循环遍历记录集。这是一个PHP日志摘录,在其中您可以看到找到并返回结果然后脚本死掉:
[2017年7月11日09:55:13 America / New_York] Copyofguidance.58de8e890c10e.xlsx
[2017年7月11日09:55:13 America / New_York] SRFWebsiteSchedule.5876a0ab683a8.xlsx
[2017年7月11日09:55:13 America / New_York] CSI_D01_S04_T03_STEP.5877ad8385974.pdf
[2017年7月11日09:55:13 America / New_York] Copyofguidance.58cbf217868d9.xlsx
[2017年7月11日09:55:13 America / New_York] Copyofguidance.58cbf39ca3955.xlsx
[2017年7月11日09:55:13 America / New_York] Copyofguidance.58cbf565194fc.xlsx
[11-Jul-2017 09:55:13 America / New_York] PHP致命错误:未捕获 带有消息'来源:的异常'com_exception' 未知
描述:未指定错误'in C:\ WEB \ srf \ scripts \ windowsSearch.php:149堆栈跟踪:0 C:\ WEB \ srf \ scripts \ windowsSearch.php(149):com-> moveNext()
在第149行的C:\ WEB \ srf \ scripts \ windowsSearch.php中抛出1 {main}
以下是相关的代码行:
$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搜索。
Windows 2008 R2服务器接收常规补丁,PHP最近更新为5.6.30。降级并不是一个真正的选择,即使结果证明是这个问题......
如果我遗漏了任何有用的信息,请告诉我。谢谢。