com_dotnet 獨立為擴展,需手動啟用; php.ini extension=php_com_dotnet.dll ; 可選:允許 DCOM 遠端呼叫 com.allow_dcom = true
重啟 Web 伺服器 / PHP-FPM 生效。
<?php
try {
$word = new COM('Word.Application') or die('無法建立 Word COM 物件');
echo "Word 版本: {$word->Version}\n";
// 顯示 Word 視窗(預設隱藏)
$word->Visible = true;
// 建立新文件
$doc = $word->Documents->Add();
$doc->Content->Text = "Hello from PHP COM!\n";
$doc->SaveAs('C:\\temp\\php_com_test.docx');
$doc->Close();
$word->Quit();
} catch (com_exception $e) {
echo "COM 錯誤 (代碼 {$e->getCode()}): {$e->getMessage()}\n";
}
?>
| 場景 | ProgID | 關鍵操作 |
|---|---|---|
| Word 文件產生/轉檔 | Word.Application | Documents->Add, SaveAs(wdFormatPDF), PrintOut |
| Excel 報表自動化 | Excel.Application | Workbooks->Add, Cells/Range 讀寫, Chart 匯出圖片 |
| Outlook 寄信 | Outlook.Application | CreateItem(olMailItem), Send |
| ADSI 目錄查詢 | ADODB.Connection | Provider=ADSDSOObject, LDAP 查詢 |
| WMI 系統資訊 | WbemScripting.SWbemLocator | ConnectServer, ExecQuery('SELECT * FROM Win32_Process') |
| 自訂 COM 元件 | YourProgID.YourClass | 需先 regsvr32 YourCom.dll 註冊 |
Quit()、Close()、釋放變數 unset($obj),否則 Word/Excel 進程會殘留。com_load_typelib() 可快取型別庫提升速度。$sm = new COM('com.sun.star.ServiceManager') or die('需要安裝 OpenOffice/LibreOffice');
// 後續需使用 UNO API,學習曲線較陡峭,建議改用 Python uno 或 headless LibreOffice 轉檔
PHP COM 橋接適合「Windows 伺服器環境、需整合 Office 自動化、舊系統 COM 元件」場景。新專案若為跨平台或雲端部署,建議改用 PhpSpreadsheet、PhpOffice、LibreOffice headless、Pandoc 等純 PHP/容器化方案。