首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 呼叫 COM 元件完整指南:啟用 php_com_dotnet.dll 並操作 Word/Excel/自訂 COM 物件

     編輯:PHP 相關知識

環境需求

  • Windows 作業系統(COM 為 Windows 技術)
  • PHP 5.4.5+:com_dotnet 獨立為擴展,需手動啟用
  • 目標應用程式已安裝(如 Microsoft Office、自訂 COM 伺服器)

1. 啟用擴展

; php.ini
extension=php_com_dotnet.dll
; 可選:允許 DCOM 遠端呼叫
com.allow_dcom = true

重啟 Web 伺服器 / PHP-FPM 生效。

2. 基本實例化與錯誤處理

<?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";
}
?>

3. 常見應用場景

場景ProgID關鍵操作
Word 文件產生/轉檔Word.ApplicationDocuments->Add, SaveAs(wdFormatPDF), PrintOut
Excel 報表自動化Excel.ApplicationWorkbooks->Add, Cells/Range 讀寫, Chart 匯出圖片
Outlook 寄信Outlook.ApplicationCreateItem(olMailItem), Send
ADSI 目錄查詢ADODB.ConnectionProvider=ADSDSOObject, LDAP 查詢
WMI 系統資訊WbemScripting.SWbemLocatorConnectServer, ExecQuery('SELECT * FROM Win32_Process')
自訂 COM 元件YourProgID.YourClass需先 regsvr32 YourCom.dll 註冊

4. 重要參數型別對應

  • PHP 字串 → COM BSTR
  • PHP 整數/浮點 → COM VT_I4/VT_R8
  • PHP 陣列 → COM SAFEARRAY (VT_VARIANT)
  • PHP null → COM VT_EMPTY
  • PHP true/false → COM VT_BOOL (VARIANT_TRUE/VARIANT_FALSE)

5. 記憶體管理與效能提醒

  • COM 物件屬於跨行程邊界,建立/銷毀成本高,避免在迴圈中重複 new COM()。
  • 用完務必呼叫 Quit()、Close()、釋放變數 unset($obj),否則 Word/Excel 進程會殘留。com_load_typelib() 可快取型別庫提升速度。
  • 大量資料寫入 Excel 時,批次寫入 Range.Value = $bigArray 比逐 Cell 寫入快 100 倍以上。

6. OpenOffice/LibreOffice UNO 橋接(非 COM)

$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/容器化方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved