Обработка ошибок PHP в плагине WordPress - PullRequest
0 голосов
/ 03 апреля 2010

Я новичок как в PHP, так и в Wordpress (но хорошо в C #), и я пытаюсь понять обработку ошибок в пользовательском плагине, который я пытаюсь написать. Основы плагина - это запрос существующей базы данных MSSQL (обратите внимание, что это не стандартная база данных MYSQL ...) и возврат строк обратно на экран. Это работало хорошо, но хостинг-провайдер перевел мою базу данных в автономный режим, что привело меня к проблеме обработки ошибок (которая, я думаю, была в порядке).

Следующий код не может подключиться к базе данных (как и ожидалось), но выводит сообщение об ошибке на экран и останавливает обработку страницы. Он даже не выводит текст ошибки «или умереть».

ВОПРОС: Как я могу просто вывести простое сообщение "Не удается загрузить данные" и продолжить нормально?

function generateData()

{

 global $post; 

 if ("$post->post_title" == "Home")
 { 
  try 
  {
   $myServer = "<servername>";
   $myUser = "<username>";
   $myPass = "<password>";
   $myDB = "<dbName>"; 

   //connection to the database
   $dbhandle = mssql_connect($myServer, $myUser, $myPass) 
                              or die("Couldn't open database $myDB"); 


            //... query processing here...
        }
        catch (Exception $e)
  {
         echo "Cannot load data<br />";
  }

 }

 return $content;
}

Ошибка при создании: (строка 31 - $ dbhandle = mssql_connect ...)

Предупреждение: mssql_connect () [function.mssql-connect]: невозможно подключиться к серверу: в <путь к файлу> в строке 31

Неустранимая ошибка: превышено максимальное время выполнения в 30 секунд в <путь к файлу> в строке 31

Ответы [ 2 ]

5 голосов
/ 03 апреля 2010

Прежде всего, если mssql_connect выдает предупреждение при возникновении проблемы, вы ничего не можете сделать, чтобы ее избежать: единственное, что вы можете сделать, это скрыть это, используя @ оператор :

if (($dbhandle = @mssql_connect($myServer, $myUser, $myPass)) === false) {
    // connection failed
}

Примечание: вы не должны die() при возникновении ошибки соединения: это остановит выполнение всего приложения, что, безусловно, нежелательно.


Фатальная ошибка - это вторая проблема (которая, вероятно, является следствием первой) .

Обратите внимание, что вы не можете восстановиться после фатальной ошибки: это Фатальная . Что означает, что вы должны избегать этого, так или иначе.

Здесь ошибка в том, что ваш скрипт работает более max_execution_time секунд; поскольку в строке mssql_connect сообщается об ошибке, я полагаю, что сценарий ожидает успешного установления соединения и не устанавливается менее чем за 30 секунд.


У меня нет базы данных SQL Server для тестирования, но, глядя на раздел Runtime Configuration руководства по mssql, я бы сказал, что это выглядит интересно:

       name               Default value
mssql.connect_timeout        "5"
mssql.timeout                "60"

Вы можете попробовать изменить их,

  • либо в вашем файле php.ini, если вы можете изменить его
  • или используйте ini_set() перед попыткой подключения.

Во втором случае что-то подобное может сработать:

ini_set('mssql.connect_timeout', '3');
ini_set('mssql.timeout', '3');
0 голосов
/ 27 февраля 2012

Возможно, вы захотите взглянуть на класс WP_Error для элегантной обработки ваших ошибок. Обратите внимание, что это общий подход, и вам придется отдельно обрабатывать логику обнаружения ошибок. WP_Error поможет вам собрать все ошибки в одном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...