使用 PHP 检查是否可以在短时间内从本地应用程序访问 MySql 在线服务器
Check if MySql online server is reachable from local application in short period of time with PHP
我有一个基于 PHP 的 local Web 应用程序,它使用 online[=26] =] Mysql 服务器。
我需要知道我什么时候可以连接到那个服务器(我什么时候有互联网连接,或者服务器什么时候关闭)。
我试过了
$conn = new mysqli('hostname','username','password','db');
if($conn->connect_error){
//offline action
}
else{
//online action
}
这有效,但它会持续大约一分钟以确定服务器是否可访问。
我想知道是否有任何其他持续时间少于 3 或 4 秒的解决方案。
首先检查服务器 returns 是否有响应,您可以使用 fsockopen()
,但也可以使用其他方法,例如使用 operating system shell,因此您可以 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
用于 PDO
MYSQLI_OPT_CONNECT_TIMEOUT
对于 MySQLi
我有一个基于 PHP 的 local Web 应用程序,它使用 online[=26] =] Mysql 服务器。
我需要知道我什么时候可以连接到那个服务器(我什么时候有互联网连接,或者服务器什么时候关闭)。
我试过了
$conn = new mysqli('hostname','username','password','db');
if($conn->connect_error){
//offline action
}
else{
//online action
}
这有效,但它会持续大约一分钟以确定服务器是否可访问。
我想知道是否有任何其他持续时间少于 3 或 4 秒的解决方案。
首先检查服务器 returns 是否有响应,您可以使用 fsockopen()
,但也可以使用其他方法,例如使用 operating system shell,因此您可以 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
用于 PDOMYSQLI_OPT_CONNECT_TIMEOUT
对于 MySQLi