Php COM自动化后如何强制Excel进程退出?

Php COM自动化后如何强制Excel进程退出?,php,excel,com,Php,Excel,Com,在PHP中,我使用COM对象创建一个XLS文件 $excel = new COM("Excel.Application") or die("Excel is not installed!"); $excel->WorkBooks->Add(); ... $excel->WorkBooks[1]->SaveAs($path); $excel->Quit(); $excel->Release(); $excel = null; 运行此代码后,Excel.exe进

在PHP中,我使用COM对象创建一个XLS文件

$excel = new COM("Excel.Application") or die("Excel is not installed!");
$excel->WorkBooks->Add();
...
$excel->WorkBooks[1]->SaveAs($path);
$excel->Quit();
$excel->Release();
$excel = null;

运行此代码后,Excel.exe进程仍将在内存中保留约6分钟。如何强制立即退出此进程?

您使用的是COM对象,所以您一定在谈论Windows上的php。基本上,您可以使用命令行工具终止任务。您可以使用php命令shell\u exec调用它,如

shell_exec('taskkill /F /IM "excel.exe"');
如果您没有权限(但我认为您应该这样做,因为您启动了此过程),请使用运行cmd行


但是!您使用的是php,因此,如果您在web环境中运行php,并且人们同时访问您的网站,则可能会有多个Excel实例正在运行。如果是这样的话,您必须确定要杀死哪一个对象。

如果请求另一个“Excel.Application”对象,则该进程将保留一段时间,这样我们就可以避免启动新进程和加载所有DLL的成本

我只是把它看作一种功能。

还有另一种方法。。。
尝试取消初始化COM。不要只做一次,而是做四次。这是通过尝试和错误建立的,所以我没有一个有效的理由,除了它是有效的。然而,这并不是一直都有效。它可能只适用于您的情况

hmm,但在具有相同Windows 2008 server R2和Excel 2003的其他服务器上,进程会立即终止。正如我所知,Windows在执行结束后的一段时间内不会卸载可执行文件,但进程在任务管理器中不可见。在我的例子中,Excel.exe进程在任务管理器中保持可见。当我再次运行PHP代码时,系统会创建新的进程。这应该是一个注释,而不是答案。检查此项以及如何给出正确答案。