设置IIS上的PHP ODBC连接超时


Setting PHP on IIS ODBC Connection Timeout

我在IIS 7.5上运行PHP 5.5的Joomla站点上继承了一个问题。目前,它作为查询的一部分通过我们的防火墙访问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秒,如果超时,那么我可以只使用服务器的本地数据库内容继续脚本,但我找不到在哪里设置它。我找到了。php.ini中的connect_timeout条目,但这没有任何区别(我确信这是针对mssql_connect调用的,而不是odbc_connect,所以这是有意义的),并且似乎没有ODBC等效,我还尝试将"Timeout=10;"附加到ODBC连接字符串,但这似乎也不起作用。我在谷歌上搜索了一下,找到了Linux系统的设置,但显然这也没有什么帮助。在Windows中我需要在哪里设置这个,或者我需要将其转换为另一种数据库连接类型吗?

我想你已经解决了这个问题,但是我会使用某种基于PHP的代码来"测试"服务器是否在线。快速谷歌显示,这可能是一个可能的解决方案,为您的问题(只需更改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 
}