2011-01-20 28 views
0

我正在將遺留應用程序從PHP4遷移到PHP5.2,並且它使用的其中一個庫現在引發導致腳本中斷的異常。我正確地認爲在PHP4下這個異常不會以相同的方式處理(即根本不處理),所以腳本從現在拋出的異常處繼續運行?有什麼方法可以在PHP5下恢復這種行爲(理想情況下只適用於包含庫的頁面)?有關的例外是來自處理Excel的庫的com_exception。將PHP4移植到5並處理異常

+0

請添加示例代碼和完整的異常消息或/並添加更多關於您使用的操作系統和您使用的PHP版本的更多信息! – powtac 2011-01-20 12:48:54

+0

脫離主題,但爲什麼5.2?爲什麼不直接使用PHP5.3,因爲這是最新的成熟版本? (它有幾個很好的功能,缺少5.2) – Spudley 2011-01-20 12:59:28

回答

1

我嘗試過所有從5.1.2到5.1.3(cvs也是)的Windows二進制PHP發行版,我不得不處理異常。

我的PHP設置是PHP 包的'install.txt'中描述的典型設置。我在php.ini中做出的唯一更改(除了 doc_root)是'com.allow_dcom = true'。

所以ü將不得不使用

catch(com_exception $e) 
{ 
print($e->__toString()); 
} 
0

PHP 4,在所有不支持例外。在PHP 4中,拋出異常的語法本來就是無效的語法。請參閱http://uk3.php.net/manual/en/language.exceptions.php

如果被告知更多關於正在拋出該exeption的類,將會很方便。

我的猜測是,有一個bugm或者在類本身或者你調用它的方式被一直觸發並被忽略,但現在導致這個異常被拋出。

這個網頁是關於在PHP5的變化,並有一些分析上市公司發出com_exception是如何工作的:http://devzone.zend.com/article/762

引述:

PHP 5引入了結構化異常處理(呵,catch()和throw()),這使我們可以使用內置的com_exception類將底層的COM異常暴露給PHP。如果你想趕上在腳本中的錯誤,你可能會這樣寫代碼:

<?php 
$com = new COM("..."); 
try { 
    $com->call_a_method(); 
} 
catch (com_exception $e) { 
    print $e . "\n"; 
} 
?> 

我希望上面的代碼片段可以幫助你。打印錯誤消息可能(應該)更多地揭示究竟是哪裏出了問題,哪些應該可以幫助您確定從哪裏出發。

當然,您正在使用的Excel類也可能需要升級;如果它是你舊的PHP4應用程序的一部分,那麼可能它是相當老的類;可能會有更新的版本可用,如果您在課堂上發現了錯誤,那麼新版本可能會處理該錯誤。