0

以下のコードを使用して、1 つの Web サイトに複数のファイルが存在するかどうかを確認しようとしていますが、トップ URL のみがテストされ、それが有効な URL であっても、まだURL が存在しないという問題が発生しています。

結果を正しく返し、テキスト ファイル内のすべての指定された URL をチェックするようにコードを変更するにはどうすればよいでしょうか。

<?php 
$site = "http://site.com"
$urls = file('urls.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$found = false;
foreach($urls as $url)
   if($_POST['url'] == $site . $url)
      $found = true;

if($found)
   echo "URL exists";
else
   echo 'URL doesn\'t exist';

?>
4

3 に答える 3

0

少しロジックを変更 - 必要に応じてカスタマイズします。

<?php 

$site = "http://site.com"
$urls = file('urls.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach($urls as $url)

   // TEST URL EXISTENCE HERE (not sure if just looking at $_POST will tell you if its a remote url?

   if($_POST['url'] == $site . $url) {
       echo "URL exists";
   } else {
       echo 'URL doesn\'t exist';
   }

}

?>
于 2013-02-03T08:59:26.443 に答える
0

これを試して。行末をスキップしなければならない場合があるので、rtim() を使用してください。また、urls.txt を複数の入力 URL に対してテストする場合も、スクリプトはそれを実行します。

<?php 
$site = "http://site.com"
$urls = file('urls.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach($urls as $url) {
  //if you want to test multiple input urls, they might be in input array, say url[]
  //we can check for the array here
  if(is_array($_POST['url'])) {
    foreach($_POST['url'] as $post_url) {
      //You may want to skip line endings, so use rtrim
      if($post_url == ($site . rtrim($url)) {
        print 'Url found - '.$post_url.'<br>';
      } else {
        print 'Url not found - '.$post_url.'<br>';
      }
    }
  } else {
    //You may want to skip line endings, so use rtrim
    if($POST['url'] == ($site . rtrim($url)) {
      print 'Url found - '.$POST['url'].'<br>';
    } else {
      print 'Url not found - '.$POST['url'].'<br>';
    }
  }  
}
?>
于 2013-02-03T09:01:11.883 に答える
0

リモート サーバー上の URL のリストをチェックするコード:

<?php 
$site = "http://site.com"
$urls = file('urls.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach($urls as $url) {
  $headers = get_headers($site . $url, 1);
  $status_parts = explode(" ", $headers[0]);
  $status_code = $status_parts[1];
   if ($status_code == 200)
     echo "URL exists";
   else if ($status_code == 404)
     echo 'URL doesn\'t exist';
   else
     // error or something else?
}
?>

注意すべき点がいくつかあります。

  1. 似たような質問があります
  2. URL が存在するかどうかを単に出力するのではなく、応答の int eh をログに記録することをお勧めします。
于 2013-02-03T09:17:01.127 に答える