URL-адрес curl ping из базы данных и время публикации на веб-странице

Итак, в настоящее время я пытаюсь пропинговать 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);
}
?>
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
491
2

Ответы 2

$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 = "$url"; вообще не нужна, учитывая пример, предоставленный OP. Причина этого в том, что OP уже назначил эту переменную $url = $row['url'];, поэтому переназначение здесь неуместно. Преобразование его в sting может быть выполнено $url = "$row['url']";, если это вообще необходимо. Но ваше решение верно =)

Eugene Anisiutkin 28.01.2019 16:48

Поскольку вам просто нужно определить, активен ли конкретный 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'

Jeffrey 28.01.2019 17:51

не могли бы вы поделиться одним из URL?

Professor Abronsius 28.01.2019 19:14

Другие вопросы по теме