PHP читает ссылки из списка .txt и проверяет их, если они работают - PullRequest
0 голосов
/ 20 февраля 2019

Я новичок в .php и не могу заставить мой код работать.У меня есть функция, которая проверяет, работает ли веб-сайт или нет (это работает), после этого я просто пытаюсь получить ссылку из файла .txt и отображать их в результате функции проверки, но я не понимаю, правильно ли это,Вот мой код:

<?php

function url_test( $url ) {
  $timeout = 10;
  $ch = curl_init();
  curl_setopt ( $ch, CURLOPT_URL, $url );
  curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt ( $ch, CURLOPT_TIMEOUT, $timeout );
  $http_respond = curl_exec($ch);
  $http_respond = trim( strip_tags( $http_respond ) );
  $http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
  if ( ( $http_code == "200" ) || ( $http_code == "302" ) ) {
    return true;
  } else {
    // return $http_code;, possible too
    return false;
  }
  curl_close( $ch );
}


$links = file("test.txt");
if( !url_test( $links) ) {
  echo $links ." is down!";
}
else { echo $links ." functions correctly."; }
}


?>

Ребята, пожалуйста, помогите мне?Спасибо!

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Файл («test.txt»);читает все строки файла в массив.Если вы знаете, что ваш файл всегда будет иметь только одну строку, вы должны прочитать элемент массива с индексом 0 следующим образом:

$links = file("test.txt");
if( !url_test( $links[0]) ) {
  echo $links[0] ." is down!";
}
else { 
  echo $links[0] ." functions correctly."; 
}    

Но если ваш файл может содержать список из нескольких URL-адресов (по одному на строку) тогда вам придется пройтись по массиву и проверить их все так:

$links = file("test.txt");
foreach ($links as $line_num => $link) {
  if( !url_test( $link) ) {
    echo $link ." is down!";
  }
  else { 
    echo $link ." functions correctly."; 
  }
}
0 голосов
/ 20 февраля 2019

Проблема в том, что file() вернет массив строк, поэтому, если у вас есть только один URL в файле, вы можете использовать [0] для пропуска первой строки, в противном случае передайте список и используйте foreach().Также стоит использовать trim(), чтобы при настройке URL-адреса не было пробелов и т. Д.Я также изменил тест, чтобы проверить, находится ли код состояния в наборе возможных допустимых состояний, а не проверять отдельные значения.

Код мульти-URL ...

function url_test( $url ) {
    $timeout = 10;
    $ch = curl_init();
    foreach ( $url as $link )   {
        curl_setopt ( $ch, CURLOPT_URL, trim($link) );
        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt ( $ch, CURLOPT_TIMEOUT, $timeout );
        $http_respond = curl_exec($ch);
        $http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
        if ( !in_array($http_code , ["200", "301", "302"] ) ) {
            return false;
        }
    }
    curl_close( $ch );
    return true;
}

$links = file("test.txt");
if( !url_test( $links) ) {
    echo " is down!";
}
else { echo " functions correctly."; }

1 URLпример ...

function url_test( $url ) {
    $timeout = 10;
    $ch = curl_init();
    curl_setopt ( $ch, CURLOPT_URL, trim($url) );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt ( $ch, CURLOPT_TIMEOUT, $timeout );
    $http_respond = curl_exec($ch);
    $http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
    if ( !in_array($http_code , ["200", "301", "302"] ) ) {
        return false;
    }
    curl_close( $ch );
    return true;
}


$links = file("test.txt");
if( !url_test( $links[0]) ) {
    echo " is down!";
}
else { echo " functions correctly."; }
0 голосов
/ 20 февраля 2019

Вот обновление вашего кода, это означает, что у вас есть один URL на строку.

Надеюсь, это поможет, удачного кодирования.

<?php

function url_test( $url ) {
  $timeout = 10;
  $ch = curl_init();
  curl_setopt ( $ch, CURLOPT_URL, $url );
  curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt ( $ch, CURLOPT_TIMEOUT, $timeout );
  $http_respond = curl_exec($ch);
  $http_respond = trim( strip_tags( $http_respond ) );
  $http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
  if ( ( $http_code == "200" ) || ( $http_code == "302" ) ) {
    return true;
  } else {
    // return $http_code;, possible too
    return false;
  }
  curl_close( $ch );
}


$file ="test.txt";
$handle = fopen($file, "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        // process the url
         if(url_test(trim($line))){
             print "Url $line Up\n";
         }else{
             print "Url $line Down\n";
         }
    }

    fclose($handle);
} else {
    // error opening the file.
} 

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...