Итак, в настоящее время я пытаюсь пропинговать URL-адреса в таблице БД, которая затем должна опубликовать статус 'LIVE' или 'DOWN' этого URL-адреса на веб-странице, если пинг был успешным. Прежде чем я попробовал это таким образом, я настроил его как массив php с fsocket, который работал.
В настоящее время, когда я использую код, как показано ниже, он извлекает данные из таблицы базы данных, но значок, показывающий 'LIVE' или 'DOWN', постоянно показывает 'DOWN'.
<?php
require_once "config/config.php";
$sql = "SELECT * FROM deployments";
if ($result = mysqli_query($link, $sql)){
if (mysqli_num_rows($result) > 0){
echo "<tr>";
echo "<th>Server</th>";
echo "<th>Deployment</th>";
echo "<th>URL</th>";
echo "<th>Status</th>";
echo "<th>Port</th>";
echo "</tr>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>" . $row['server'] . "</td>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['url'] . "</td>";
$url = $row['url'];
$port = $row['port'];
$url = '$url';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if (200==$retcode) {
echo "<td><span class='badge badge-success'>LIVE</span></td>";
} else {
echo "<td><span class='badge badge-danger'>DOWN</span></td>";
}
echo "<td>" . $row['port'] . "</td>";
echo "</tr>";
}
// Free result set
mysqli_free_result($result);
} else{
echo "No records matching your query were found.";
}
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
?>






$url='$url';
Там не должно быть этой строки. И если он там, он должен быть в двойных кавычках, чтобы работать.
Одинарные и двойные кавычки в php работают по-разному. Наличие переменной $ не будет работать так, как вы ожидаете, если она заключена в одинарные кавычки.
<?php
//Example of how php treats a string in double quotes
$strFirstName = "John";
echo "$strFirstName";
?>
<?php
//Example of how php treats a string in single quotes
$strFirstName = "John";
echo '$strFirstName';
?>
Первый пример будет работать, как и ожидалось, но второй буквально выведет «$strFirstName» вместо «John».
Поскольку вам просто нужно определить, активен ли конкретный URL-адрес, у меня возникнет соблазн использовать get_headers ~ это довольно быстро
$url='https://www.google.com';
$headers = get_headers( $url, 1 );
$active = !empty( $headers );
if ( $active ){/* do stuff */}
Или поместите его в функцию
function get_status( $url ){
$headers = @get_headers( $url, 1 );
return !empty( $headers );
}
$url = 'http://www.holycatflap.com';
$status = get_status( $url ) ? sprintf( '"%s" is UP!',$url ) : sprintf( '"%s" DOWN',$url );
printf("<pre>%s</pre>", $status );
выходы:
"http://www.holycatflap.com" DOWN
Я пробовал это, спасибо за ваш ответ! но в настоящее время он все еще показывает все URL-адреса как 'DOWN'
не могли бы вы поделиться одним из URL?
Я бы сказал, что строка
$url = "$url";вообще не нужна, учитывая пример, предоставленный OP. Причина этого в том, что OP уже назначил эту переменную$url = $row['url'];, поэтому переназначение здесь неуместно. Преобразование его в sting может быть выполнено$url = "$row['url']";, если это вообще необходимо. Но ваше решение верно =)