2012-06-15 57 views
1

我試圖將ppt文件上的幻燈片轉換爲PNG文件,但是我的代碼有問題。新COM(「PowerPoint.Application」)不起作用

$ppApp = new COM("PowerPoint.Application") or die ("Unable to instantiate PowerPoint"); 

然後顯示"Maximum execution time of 30 seconds exceeded";

當我去我的直播服務器,首次腳本的工作,但那麼它顯示:

在本地測試腳本停留在該行

發生錯誤

"Fatal error: Uncaught exception 'Exception' with message 'Could not close ppt file 1251.pptx.'

我在Windows服務器上,並且我認爲我使用ppt進程的方式有問題。

這裏是代碼:

$ppApp = new COM("PowerPoint.Application") or die ("Unable to instantiate PowerPoint"); 
    $ppApp->Visible = True; 
    $strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"]))); 
    $ppName = $jobQuery['id'].".pptx"; 
    $FileName = "MyPP"; 

    //*** Open Document ***// 
    $ppApp->Presentations->Open(realpath($ppName)); 

    //*** Save Document ***// 
    $p_opned = $ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18); 
    //$ppApp->ActivePresentation->SaveAs(realpath($FileName),17); 
    $ppApp->Quit(); 
    $ppApp = NULL; 
    unset($ppApp); 

謝謝您的幫助。

+0

那麼首先一個需要檢查的是你最大的執行時間,因爲它似乎仍然設定在默認爲30秒。因此,請嘗試腳本頂部的set_time_limit(0)。請提供更多關於異常問題的代碼。 –

+0

感謝您的回覆,我只是添加了代碼。我都準備好嘗試修復最大執行時間。問題是在第一次執行腳本後,POWERPNT.EXE仍在後臺運行。 – user1271775

+0

不推薦使用服務器端辦公文檔處理。看看這篇文章:http://support.microsoft.com/kb/257757/EN-US – CodeZombie

回答

0

我認爲你的問題可能與你的保存位置有關,或者你的文件沒有找到,你確定你試圖保存的位置實際上是從你的代碼存在的,我不太確定嗎?

$strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"]))); 

應該是:

$strPath = realpath(dirname(__FILE__)); 

你確定該文件的位置確實存在:

file_exists($ppName) 

$ppName = $jobQuery['id'].".pptx"; 

與檢查它

在這裏尋找一個類似的問題:Fatal Error in convert PPT to PNG in PHP

編輯:

試試下面的,我覺得你的$ p_opned是保持開放的參考你的$ ppApp對象,因此你的情況是不正常除去。

//*** Save Document ***// 
$ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18); 

編輯2:

按照要求試試包裹你認爲是導致異常的行(因此假設其此行):

try { 
    //*** Save Document ***// 
    $ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18); 
} catch (Exception $e) { 
    echo 'Exception message: ', $e->getMessage(), "\n"; 
} 

雖然你的錯誤消息再次找它指的是您嘗試打開的原始文件(1251.pptx),因爲您試圖使用不同的修補程序(在代碼中未提及)保存該文件。

你可以嘗試包裝異常的try/catch圍繞「開放」的腳本行如果以上不工作,或者你可以嘗試退出之前添加:

$ppApp->ActivePresentation->Close(); 

如果你的錯誤是因爲在第一次實例調用之後,Powerpoint仍然處於閒置狀態,因爲您仍然有某個引用存在,因此請嘗試檢查您的所有代碼。如果你仍然得到一個錯誤,你應該在你的問題中包含FULL錯誤信息,並從你的問題中刪除最大執行錯誤信息,這實際上不是一個問題(我假設你仍然沒有得到「超過30秒的最大執行時間「消息了?)。

最後你總是可以嘗試PowerPoint演示庫:

+0

它在那裏的文件,但也許你是對的。我的意思是如果發生錯誤,那麼quit()函數將不會被執行。那麼如何避免在這種情況下使用try和catch錯誤?任何想法? – user1271775

+0

請參閱編輯的答案 - 也許您的$ p_opned =保持Powerpoint實例打開,可能不會有這個,因爲您似乎沒有使用$ p_opned var? –

+0

我刪除了$ p_opned文件,並且仍然在同一行出現錯誤。有任何方法使用try&catch檢查此行嗎?像if(error)做Quit()? – user1271775