Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于PHP的Windows搜索_Php_Ado_Windows Server 2008 R2_Windows Search - Fatal编程技术网

基于PHP的Windows搜索

基于PHP的Windows搜索,php,ado,windows-server-2008-r2,windows-search,Php,Ado,Windows Server 2008 R2,Windows Search,我有一个基本的PHP脚本,可以使用最近停止运行的Windows Search查询索引 脚本从索引返回结果——因此大部分仍然有效——但是当脚本显然无法识别它时,就会发生致命错误,应该停止在记录集中循环。下面是一段PHP日志摘录,您可以在其中看到找到并返回结果,然后脚本消失: [2017年7月11日09:55:13美国/纽约] 指南的副本.58de8e890c10e.xlsx [2017年7月11日09:55:13美国/纽约] SRFWebsiteSchedule.5876a0ab683a8.xls

我有一个基本的PHP脚本,可以使用最近停止运行的Windows Search查询索引

脚本从索引返回结果——因此大部分仍然有效——但是当脚本显然无法识别它时,就会发生致命错误,应该停止在记录集中循环。下面是一段PHP日志摘录,您可以在其中看到找到并返回结果,然后脚本消失:

[2017年7月11日09:55:13美国/纽约] 指南的副本.58de8e890c10e.xlsx

[2017年7月11日09:55:13美国/纽约] SRFWebsiteSchedule.5876a0ab683a8.xlsx

[2017年7月11日09:55:13美国/纽约] CSI_D01_S04_T03_STEP.5877ad8385974.pdf

[2017年7月11日09:55:13美国/纽约] 指南副本.58cbf217868d9.xlsx

[2017年7月11日09:55:13美国/纽约] 指南的副本.58cbf39ca3955.xlsx

[2017年7月11日09:55:13美国/纽约] 复制指南.58cbf565194fc.xlsx

[11-Jul-2017 09:55:13美国/纽约]PHP致命错误:未捕获 异常“com_exception”和消息“Source: 未知
说明:中的“未指定错误” 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 Search

Windows 2008 R2服务器定期收到补丁,PHP最近更新为5.6.30。降级并不是一个真正的选择,即使事实证明这是一个问题


如果我遗漏了任何有用的信息,请告诉我。谢谢。

似乎在moveNext()中引发了异常。您可以尝试将其包装在try/catch块中,捕获并处理抛出的异常。@BojanBedračI能够捕获并忽略错误,脚本将完成。很高兴知道发生了什么事情需要这个解决办法,但这是一个对我有效的解决办法,这对现在来说很好。谢谢我将暂时不讨论这个问题,看看是否有人对moveNext()问题有任何见解。