2011-07-18 105 views
2

我使用snmp2_real_walk函數。php警告重定向

$tmp = snmp2_real_walk($ip, '***'.$vlan, $title, 100000,10); 

當oid是正確的,設備正在工作,我得到所需的輸出。但我想處理警告:Invalid object identifier...No response from 192.168.19.249...或其他。我的問題是:我怎麼能將這些警告重定向到我的變量?

還是有一些其他功能顯示這些警告?

謝謝!

回答

1

你也可以看看set_error_handler設定自己的錯誤處理這個具體情況,然後使函數調用後恢復的錯誤處理程序。

+0

我懷疑這會起作用,因爲set_error_handler只是響應E_USER類型的錯誤。可以使用register_shutdown_function和error_get_last來完成。 – Raffael

+0

但這個工程!它與'error_get_last'大致相同,但對我來說似乎更加正確 – k102

+0

@ Raffael1984:'set_error_handler'響應'E_WARNING'錯誤,這是'snmp2_real_walk'觸發的錯誤。 – cmbuckley

1

使用error_get_last()是解決:)

0

你想使用try-catch塊來這裏趕上你的例外是從PHP文檔的調整。例如你的功能:

<?php 

try 
{ 
    $tmp = snmp2_real_walk($ip, '***'.$vlan, $title, 100000,10); 

} 
catch (Exception $e) 
{ 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

echo $tmp; 
?> 

的PHP手冊頁: http://php.net/manual/en/language.exceptions.php

+0

這也適用,但我必須在這裏做雙重工作:一旦我遇到異常,我必須解析它 – k102

1

看看PHP的set_error_handler函數。 snmp2_real_walk在遇到錯誤時會生成E_WARNING消息,set_error_handler將允許您捕獲並記錄它們。

+0

我懷疑這會起作用,因爲set_error_handler只是響應E_USER類型的錯誤。可以使用register_shutdown_function和error_get_last來完成。 – Raffael

+0

@ Raffael1984:實際上,'set_error_handler()'處理* most *錯誤類型,而不僅僅是'E_USER_ *'。值得注意的例外是邏輯上不可能的例外(例如解析或編譯錯誤)和(不幸的是)致命錯誤。 – pinkgothic