2015-07-17 2 views
0

Мне нужно проверить, существует ли файл в нескольких доменах/серверах, а затем показать ссылку для загрузки пользователю или написать сообщение об ошибке. Я этот скрипт работает для домена 1:Проверьте, существует ли файл в нескольких доменах

<?php 
    $domain0='www.example.com'; 
    $file=$_GET['file'] 
    $resourceUrl = 'http://$domain0/$file'; 
    $resourceExists = false; 

    $ch = curl_init($resourceUrl); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_exec($ch); 
    $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 

    //200 = OK 
    if ($statusCode == '200') { 
    $resourceExists = true; 
    } 

    if ($resourceExists == true) { 
     echo "Exist! $file"; 
    } else { 
     echo "$file doesnt exist!"; 
    } 
?> 

Теперь мне нужно проверить, если этот файл существует в 4-х областях, как я могу это сделать? Я не знаю, как использовать массивы, поэтому, может быть, если кто-то объяснит мне это, я буду очень благодарен.

ответ

0
  1. Я хотел бы создать массив для доменов
  2. Я бы цикл через массив с «Еогеаспом»
  3. я бы вызвать функцию, чтобы получить результат

    function checkFileOnDomain($file,$domain) { 
        $resourceUrl = "http://$domain/$file"; 
    
        $ch = curl_init($resourceUrl); 
        curl_setopt($ch, CURLOPT_NOBODY, true); 
        curl_exec($ch); 
        $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
        curl_close($ch); 
    
        if($statusCode == '200') 
         return true; 
    } 
    
    $file=$_GET["file"]; 
    // $_GET should be sanitized! 
    
    $domain_list=array("www.test1.com","www.test2.com"); 
    
    
    foreach ($domain_list as $domain) { 
        echo "Check DOMAIN: $domain <hr/>"; 
    
        if (checkFileOnDomain($file,$domain)) { 
         echo ">> [ $file ] EXISTS"; 
        } else { 
         echo ">> [ $file ] DOES NOT EXIST"; 
        } 
        echo "<br/><br/>"; 
    } unset($domain); 
    

EDIT:

Для применения спецификации, вам требуется дополнительная переменная перед Еогеасп.

$link_to_file=""; 
    foreach ($domain_list as $domain) { 

     if (checkFileOnDomain($file,$domain)) { 
      $link_to_file="$domain/$file"; 
      break; // get first result and quit 
     } 

    } unset($domain); 

    if (!empty($link_to_file)) { 
      echo $link_to_file; //file is here 
    } else { 
      echo "404"; 
    } 
+0

я думаю, что это чистое решение, я буду стараться, когда я некоторое время – eazy

+0

нормально, я пытался, но я получил палкой по одной задаче: Еогеасп проходит все домены, а затем дает мне результаты, но Мне не нужны все результаты, мне нужны эти результаты: если файл существует в одном из доменов внутри массива, он показывает только ссылку на этот домен и ничего больше; если файл не существует ни в одном из доменов внутри массива, то он эхо-текст «404-файл не найден» и ничего больше. Это возможно? – eazy

+0

отлично! извините за поздний ответ, но я был болен, так или иначе код отлично работает! Большое спасибо. Тем не менее у меня есть вопрос, можно «кэшировать» результаты в html, потому что я нахожусь на общем хостинге, а пользователи 50-70k, делающие «foreach» в 140 тыс. Раз или более, вызывают большую нагрузку на процессор, поэтому я хочу преобразовать результат на html-страницу, и, возможно, пусть срок действия кеша истекает каждые 6 часов или что-то вроде этого – eazy

0

Массив должен решить проблему для вас. Это создает массив доменов, которые вы хотите проверить, а затем циклически перебирает их один за другим, используя написанный вами код.

Если вы боретесь с массивами, см here для более определенной информации

<?php 

    // Create an array of domains 
    $domains = ['www.example.com', 'www.example2.com', ...]; 

    // Cycle through all the domains and run the code 
    foreach($domains as $domain) { 

     $domain0='www.example.com'; 
     $file=$_GET['file'] 
     $resourceUrl = 'http://$domain0/$file'; 
     $resourceExists = false; 

     $ch = curl_init($resourceUrl); 
     curl_setopt($ch, CURLOPT_NOBODY, true); 
     curl_exec($ch); 
     $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
     curl_close($ch); 

     //200 = OK 
     if($statusCode == '200') { 
      $resourceExists = true; 
     } else if($resourceExists == false) { 

     } 

     if ($resourceExists == true) { 
      echo "Exist! $file"; 
     } else { 
      echo "$file doesnt exist!"; 
     } 

    } 

?> 
Смежные вопросы