2010-07-28 48 views
2
$file='C:/a.doc'; 
$saveas=__DIR__.'/tmp/a.html'; 
$word=new COM('word.application'); 
$document=$word->Documents->Open($file); 
$document->SaveAs($saveas,8); 
$word->Quit(); 
$word=null; 
echo file_get_contents($saveas); 
@unlink($saveas); 

它工作正常,在PHP CLI模式(PHP -f 「com_server.php」),但是當我運行它通過網絡(在Windows /阿帕奇http://localhost/com_server.php),發生了錯誤:PHP轉換Word與COM的HTML

Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `word.application': Server execution failed' in D:\www\wwwroot\com_server.php:16 Stack trace: #0 D:\www\wwwroot\com_server.php(16): com->com('word.applicatio...') #1 {main} thrown in D:\www\wwwroot\com_server.php on line 16

我也嘗試將代碼包裝在shell_exec中,但同樣的錯誤以及。

有什麼建議嗎?

+0

如果Apache運行作爲不同的用戶,那麼它可能沒有權限運行的MSWord – 2010-07-28 09:31:26

+0

已經跑apache服務爲相同的用戶,仍然沒有運氣,錯誤如下: 致命錯誤:調用一個成員函數另存爲()非對象d上:\ WWW \ wwwroot的\ com_server.php每個我運行該頁面時線18 ,並有一個新的WINWORD progress.It必須停止打開該文件時。 謝謝 – Dong 2010-07-28 09:58:52

回答

0

我猜,第16行是從SaveAs()的一個:

$document=$word->Documents->Open($file); 
    $document->SaveAs($saveas,8); 

正如你說的意見, 有時$word->Documents->Open()給出錯誤;喜歡的東西$word->ActiveDocument嘗試,如果您之前已經打開了它,或嘗試:

$word->Documents->Add() 
$word->ActiveDocument->open() 

,然後嘗試保存聲明。看起來你沒有能夠正確地打開它。我還沒有測試過這個,所以給它一個鏡頭。另外,請記住不要在括號中留下括號,如print(但大括號),並在完成時清空對象。

如果這兩項都不起作用,請檢查this page,以獲取有關Word的expression.SaveAs2方法的廣泛說明。也許它會有所幫助。祝你好運。