Недавно мы установили FreeTDS с php56-mssql на один из наших серверов RHEL7. Кажется, все работает правильно, за исключением этой странной проблемы. При первой загрузке страницы php, использующей функцию mssql_connect (), страница обращается к экземпляру sql server 2012, получает данные и отображает страницу, как ожидалось. Однако, если мы обновим страницу один раз, она отобразится, но без каких-либо данных из базы данных. Если мы обновим второй раз, мы получим следующее сообщение 503:
Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
Если мы продолжим обновление в третий раз, страница будет отображаться со всеми данными, как и ожидалось. Также во время устранения неполадок я заметил, что если мы загружаем страницу, ждем ~ 15 секунд, а затем обновляемся, страница загружается должным образом.
Изучая error_log, мы видим следующие сообщения:
[Fri Oct 21 12:37:44.971872 2016] [proxy_fcgi:error] [pid 14052:tid 140504888997632] [client xx.xxx.xx.xx:xxxxx] AH01071: Got error 'PHP message: PHP Warning: mssql_select_db(): 2 is not a valid MS SQL-Link resource in /var/www/vhosts/example.com/e0/conn.php on line 6\nPHP message: PHP Warning: mssql_init(): 2 is not a valid MS SQL-Link resource in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 16\nPHP message: PHP Warning: mssql_bind() expects parameter 1 to be resource, boolean given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 17\nPHP message: PHP Warning: mssql_bind() expects parameter 1 to be resource, boolean given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 18\nPHP message: PHP Warning: mssql_execute() expects parameter 1 to be resource, boolean given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 19\nPHP message: PHP Warning: mssql_free_statement() expects parameter 1 to be resource, boolean given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 20\nPHP message: PHP Warning: mssql_fetch_array() expects parameter 1 to be resource, null given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 23\nPHP message: PHP Notice: Undefined offset: 0 in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 53\nPHP message: PHP Notice: Undefined offset: 0 in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 60\n', referer: http://example.com/contacts/
[Fri Oct 21 12:37:45.347450 2016] [proxy_fcgi:error] [pid 14109:tid 140504956139264] (104)Connection reset by peer: [client xx.xxx.xx.xx:xxxxx] AH01075: Error dispatching request to :, referer: http://example.com/e1/
[Fri Oct 21 12:37:45.347625 2016] [include:warn] [pid 14109:tid 140504956139264] [client xx.xxx.xx.xx:xxxxx] AH01374: mod_include: Options +Includes (or IncludesNoExec) wasn't set, INCLUDES filter removed: /error_docs/maintenance.html, referer: http://example.com/e1/
Какие-либо предложения? Я не понимаю, почему это происходит именно так !?
ОБНОВИТЬ
Протестировал другую страницу, используя это соединение. Он загружается нормально в первый раз, но если вы запросите его снова до истечения 15 секунд, он не сможет подключиться:
AH01071: Got error 'PHP message: PHP Warning: mssql_connect(): Unable to connect to server: theServerName
Проблема в этом случае заключалась в том, что наш новый сервер был настроен на запуск этого приложения как «приложение FPM, обслуживаемое Apache», тогда как мы должны были настроить это приложение для запуска как «приложение FastCGI, обслуживаемое Apache».