我有一個PHP腳本會引發異常(例如無法連接到服務器)。在發展領域,我希望獲得儘可能多的信息,但在製作過程中,我不想讓遊戲離開。但是我希望能夠在兩種環境中都能正常工作的代碼,並且使我能夠進一步開發代碼。PHP異常,如何處理它們
是否有規定的技術來實現這一目標?
編輯
是使用Apache和PHP
但如何,而無需更改代碼庫的生產環境和開發環境來區分。
我有一個PHP腳本會引發異常(例如無法連接到服務器)。在發展領域,我希望獲得儘可能多的信息,但在製作過程中,我不想讓遊戲離開。但是我希望能夠在兩種環境中都能正常工作的代碼,並且使我能夠進一步開發代碼。PHP異常,如何處理它們
是否有規定的技術來實現這一目標?
編輯
是使用Apache和PHP
但如何,而無需更改代碼庫的生產環境和開發環境來區分。
您通常對付這種與環境變量。它可以是啓動時加載的配置文件.php(或.ini,.yml,.xml,無論用於配置文件),還是具有特定於環境的值。例如,在生產服務器上,你的環境配置文件可能是這樣的:
$config['environment'] = 'production';
另一種選擇是使用由Web服務器提供的環境變量。兩種方法都很好,但我更喜歡前者。
然後你捕獲所有未捕獲的異常(並將錯誤轉化爲異常。在開發過程中禁用錯誤可能會令人討厭,並且啓用錯誤並且不會捕獲它們可能是生產中的巨大安全漏洞)我以前寫過一篇自己寫的文章,但非常棘手,除了學習目的之外,我不建議寫自己的捕手。然後就這樣做吧:
if($config['environment'] == 'production') {
echo 'Oops, something went wrong';
} else {
// print full backtrace and stuff
}
作爲一個旁註,這是'框架'應該爲您解決的那類問題。如果您使用Silex或Symfony 2,則默認情況下此功能可用。
你可以建立一個處理一個用戶友好的方式異常的自定義異常類。
class MyCoolException extends Exception
{
//Throw exceptions in a friendly way.
//Perhaps redirect them to a custom error page?
public function __construct($error)
{
//do whatever with your error data
}
public function redirect()
{
}
}
然後,設置您的try/catch模式來接受它:
try
{
}
catch(MyCoolException $e)
{
}
catch(Exception $e)
{
}
作爲另一個回答說,你可以直接扔根據環境配置異常的流量。
有使用PHP一個更簡單的方法。使用set_exception_handler()http://php.net/manual/en/function.set-exception-handler.php。
什麼這個函數的作用是,當一個異常被拋出,它總是調用特定的功能。您可以使用此功能檢查當前環境並採取相應措施。
但你必須告訴你的腳本是在哪個環境。對於這一點,我同意ChocoDeveloper他回答說。
例如:
<?php
function custom_exception_handler_function($exception) {
global $config;
if ($config['environment'] == 'production') {
continue;
} else {
throw $exception;
}
}
set_exception_handler('custom_exception_handler_function');
?>
這樣所有捕獲的異常(即那些不是在try-catch塊)將統一解決。
您是否在使用PHP與Web服務器(例如Apache?) – DPlusV 2012-07-15 07:02:27
try {} catch {} finally {}? – 2012-07-15 07:02:55
在php中沒有「finally」。 – MilMike 2012-07-15 07:11:33