我有基于 php 的a local Web应用程序,该应用程序使用在线 mysql Server。P>
我需要知道何时可以到达该服务器(我何时具有Internet连接,或者何时关闭服务器)。
我尝试了这个
$conn = new mysqli('hostname','username','password','db');
if($conn->connect_error){
//offline action
}
else{
//online action
}
哪个有效,但可以持续大约一分钟以确定服务器是否可以到达。
我想知道是否还有其他持续3或4秒的解决方案。
检查服务器是否首先返回响应,您可以使用fsockopen()
,但也可以使用其他方法,例如使用操作系统壳,以便您可以ping
。
function is_connectable(string $host, int $port=80, int $timeout=3){
if($fp = @fsockopen($host, $port, $errno, $errstr, $timeout)){
return fclose($fp) || true;
}
return false;
}
$host = "mysql.someserver.com";
$port = 3306;
$user = "username";
$pass = "mypassword";
$mydb = "mydatabase";
if(is_connectable($host, $port)){
try{
$pdo = new PDO("mysql:host=$host;port=$port;dbname=$mydb", $user, $pass);
} catch(Exception $e){
die($e->getMessage());
}
} else {
die("mysql server '$host' is down");
}
也可以直接从数据库驱动程序中使用超时:
-
PDO::ATTR_TIMEOUT
for pdo -
MYSQLI_OPT_CONNECT_TIMEOUT
for mysqli