2016-10-11 9 views
1

Я пытаюсь создать скрипт, который будет показывать новый IP на основе имени состояния. IP-адрес должен быть взят из файла с тем же именем, что и имя состояния. Затем он принимает случайный IP-адрес и назначает его (вот как он должен работать).file_get_contents не получает содержимое нужного файла

Проблема в том, что он присваивает полностью случайные IP-адреса и загружает их IP-адреса из случайного файла вместо того, чтобы принимать его из правильного файла с именем состояния.

Как это должно работать: калифорния> california.txt> случайных IP

Как это работает сейчас: калифорния> NewYork/грузия/техасский/etc.txt> случайных IP

$state_content=["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","NewHampshire","NewJersey","NewMexico","NewYork","NorthCarolina","NorthDakota","Ohio","Oklahoma","Oregon","Pennsylvania","RhodeIsland","SouthCarolina","SouthDakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","WestVirginia","Wisconsin","Wyoming"]; 

$country_content=["UnitedStates", "UnitedKingdom", "Canada", "Australia", "Germany", "France", "Spain"]; 

$a = 0; 

function getStateContent($state_name) { 

    // checks do we already have content for this state 
    if(!isset($state_content[$state_name])) { 

     // generate file name 
     $file_name = "state/"; 
     $file_name .= str_replace(" ", "", ucwords($state_name)); 
     $file_name .= ".txt"; 

     $state_text = file_get_contents($file_name); 
     $state_content[$state_name] = explode("\n", $state_text); 
    } 

    return $state_content[$state_name]; 
} 

function getStateIpByName($state_name) { 
    $content = getStateContent($state_name); 
    return $content[array_rand($content)]; 
} 

function getCountryContent($country_name) { 

    // checks do we already have content for this state 
    if(!isset($country_content[$country_name])) { 

     // generate file name 
     $file_name = "country/"; 
     $file_name .= str_replace(" ", "", ucwords($country_name)); 
     $file_name .= ".txt"; 

     $country_text = file_get_contents($file_name); 
     $country_content[$country_name] = explode("\n", $country_text); 
    } 

    return $country_content[$country_name]; 
} 

function getCountryIpByName($country_name) { 
    $content = getCountryContent($country_name); 
    return $content[array_rand($content)]; 
} 

Использование:

if ($result->num_rows > 0) { 
    // output data of each row 
    echo "<div class='block'><div class='rows'>"; 

    while($row = $result->fetch_assoc()) { 

     if (!empty($row["state"]) && $row["country"] == "united states") { 
      $stateip = getStateIpByName($row["state"]); 
      $a++; 
      echo $stateip; 
     } 

     else if (empty($row["state"]) && $row["country"] == "united states") { 
      $countryip = getCountryIpByName($row["country"]); 
      $a++; 
      echo $countryip; 
      } 

     else if ($row["country"] != "united states") { 

     } 

    } 
+0

См эти заявления, '$ state_content [$ state_name] = explode ("\ n", $ state_text); 'и' $ country_content [$ country_name] = explode ("\ n", $ country_text); '. Оригинальные массивы, то есть '$ state_content' и' $ country_content', обрабатываются/меняются каждый раз, когда соответствующие функции вызывают из цикла while. –

+0

Я вижу. Любые идеи о том, как я могу это исправить? – Ricardo

+0

Что содержат эти файлы? IP-адреса? Кроме того, что вы пытаетесь сделать с * этими * утверждениями? –

ответ

1

Как я уже сказал в комментарии,

Эти заявления $state_content[$state_name] = explode("\n", $state_text); и $country_content[$country_name] = explode("\n", $country_text); манипулирует/изменяет исходный массив каждый раз, когда соответствующие функции вызываются из цикла while().

Решение есть (После обсуждения на чат)

Изменение getStateContent() и getCountryContent() функционирует следующим образом

function getStateContent($state_name) { 
    // checks do we already have content for this state 
    global $state_content; 
    $state_name = str_replace(" ", "", ucwords($state_name)); 
    if(in_array($state_name, $state_content)) { 
     // generate file name 
     $file_name = "state/"; 
     $file_name .= $state_name; 
     $file_name .= ".txt"; 

     $state_text = file_get_contents($file_name); 
     $ipaddresses = explode("\n", $state_text); 
     return $ipaddresses; 
    } 
} 

и

function getCountryContent($country_name) { 
    // checks do we already have content for this state 
    global $country_content; 
    $country_name = str_replace(" ", "", ucwords($country_name)); 
    if(in_array($country_name, $country_content)) { 
     // generate file name 
     $file_name = "country/"; 
     $file_name .= $country_name; 
     $file_name .= ".txt"; 

     $country_text = file_get_contents($file_name); 
     $ipaddresses = explode("\n", $country_text); 
     return $ipaddresses; 

    } 
} 
+0

Он просто показывает пустую страницу с 'state/California.txt' ... Мне нужно увидеть все записи с новыми IP-адресами на странице, и именно поэтому я использовал' while'. Что-то здесь ужасно неправильно. Возможно, вы забыли о 'getStateIpByName ($ state_name)' функции, которая извлекает случайный IP из связанного файла? Или, может быть, я просто не понимаю, как применить это в цикле 'while'? – Ricardo

+0

@ Ricardo О, мой плохой. Я случайно сохранил 'die ($ file_name);' в этой функции, вот почему. Я использовал это для отладки вашей проблемы. Я обновил свой ответ. И вам не нужно менять какой-либо цикл while, вам просто нужно изменить эти функции, вот и все. –

+0

Что я должен писать в цикле 'while', а вместо' echo $ stateip; '? Я думаю, что вы не понимали, что полностью понимаете вопрос. Я беру данные из своей базы данных и вам необходимо назначить EACH ROW с новым IP-адресом из текстового файла. Я предполагаю, что то, что вы сделали, просто показывает содержимое определенного .txt-файла. Где назначается новый IP для каждой строки базы данных? – Ricardo