我在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中找到了mssql.connect_timeout条目,但这没有任何区别(我确定这是针对mssql_connect调用,而不是odbc_connect,所以这是有道理的),以及它似乎不是一个ODBC等价物,我也试过追加" Timeout = 10;"到ODBC连接字符串,但这似乎也不起作用。狩猎回合谷歌我已经找到了Linux系统的设置,但很明显,这也没有帮助。我在哪里需要在Windows中设置它,还是需要将其转换为另一种数据库连接类型?
答案 0 :(得分:1)
我想你已经解决了这个问题,但如果服务器在线,我会使用某种基于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
}