Настройка PHP для времени ожидания соединения IIS ODBC

#php #iis #odbc

#php #iis #odbc

Вопрос:

Я унаследовал проблему на сайте Joomla, работающем на PHP 5.5 в IIS 7.5. В настоящее время он обращается к серверу SQL через наш брандмауэр как часть запроса, но этот сервер может быть доступен не всегда, поэтому я хотел убедиться, что скрипт справился с этим корректно. Мы подключаемся с

 $itemodbc = "Driver={SQL Server Native Client 10.0};Server=$itemserver;Database=$itemdatabase;";

$con = odbc_connect($itemodbc,$itemuser,$itempassword) or die('SQL connection error');
  

но если я имитирую недоступность сервера, изменяя IP-адрес сервера, это занимает много времени, и в конечном итоге время ожидания сценария страницы (я полагаю) истекает и выдает ошибки. Что я хочу сделать, так это установить это время ожидания на 5 или 10 секунд, и если это время истекло, я могу продолжить сценарий, используя только содержимое локальной базы данных сервера, но я не могу найти, где это настроить. Я нашел запись mssql.connect_timeout в php.ini, но это не имеет никакого значения (я уверен, что это для вызовов mssql_connect, а не для odbc_connect, так что это имеет смысл), и, похоже, нет эквивалента ODBC, я также попытался добавить «Timeout = 10;» в строку подключения ODBC, но это также, похоже, не работает. Поиск в Google я нашел то, что кажется настройками для системы Linux, но, очевидно, это также не помогает. Где мне нужно установить это в Windows, или мне нужно преобразовать его в другой тип подключения к базе данных?

Ответ №1:

Я полагаю, что вы уже решили эту проблему, но я бы использовал какой-то код на основе PHP для «проверки», был ли сервер подключен к сети. Быстрый поиск в Google показал, что это может быть возможным решением вашей проблемы (просто измените google.com к прямому маршруту к вашему серверу, может быть, IP-адрес на другом порту, или, может быть, что-то вроде server.companyhost.com )

 function availableUrl($host, $port=80, $timeout=10) { 
  $fp = fSockOpen($host, $port, $errno, $errstr, $timeout); 
  return $fp!=false;
}

//Return "true" if the url is available, false if not.
if (!availableUrl("www.google.com")) {
    print " some message that the server is down with neat html that suits your needs  ";
    exit;
}else{
    //the connection is ok... proceed 
}