php — файл() возвращает массив, действующий неправильно

#php #file-io

Вопрос:

У меня есть некоторый php-код, который, по моему мнению, должен считывать строки текстового файла в массив, а затем отображать окно предупреждения JavaScript, последовательно отображающее каждую строку файла.

Он отлично работает, если я использую строку 11 (т. Е. Использую базовый массив), но не работает, если я читаю строки из файла (строка 10).

 lt;!DOCTYPE htmlgt; lt;htmlgt;  lt;headgt;  lt;meta charset="UTF-8"gt;  lt;link rel="stylesheet" href="style.css"gt;  lt;/headgt;  lt;bodygt;  lt;div id="main"gt;  lt;?php  //$text = file("C:\Apache24\htdocs\release_notes_2.txt"); // line 10  $text = array('line 1', 'line 2', 'line 3', 'line 4', 'line 5'); // line 11  $it = 0;   foreach ($text as $line) {  echo "lt;script type='text/javascript'gt;alert('".$text[$it]."');lt;/scriptgt;";  $it  ;  }  ?gt;  lt;/divgt;  lt;/bodygt; lt;/htmlgt;  

Когда я использую строку 10 вместо строки 11, я получаю только одно предупреждение, и предупреждающее сообщение соответствует самой последней строке файла.

Почему это происходит?

Примечание: Я использую php версии 7.0.14.

Комментарии:

1. 1) ЭТО должно вызывать какую-то ошибку консоли. вы сделали CTRL-J это и посмотрели его? 2) вы знаете, что вы можете поставить foreach($text as $it=gt;$line) вместо всего этого $it=0 и $it бит? 3) Я подозреваю, что ваша файловая команда повторяет новые строки, и именно поэтому она не работает, но я не пытался это выяснить.

Ответ №1:

вместо того, чтобы повторять все lt;scriptgt; теги, попробуйте использовать только один, вот так

 lt;!DOCTYPE htmlgt; lt;htmlgt; lt;headgt;  lt;meta charset="UTF-8"gt;  lt;link rel="stylesheet" href="style.css"gt; lt;/headgt; lt;bodygt;  lt;div id="main"gt;  lt;?php  //$text = file("C:\Apache24\htdocs\release_notes_2.txt"); // line 10  $text = array('line 1', 'line 2', 'line 3', 'line 4', 'line 5'); // line 11  $it = 0;   echo "lt;script type='text/javascript'gt;";   foreach ($text as $line) {  echo "alert('".$text[$it]."');";  $it  ;  }  echo "lt;/scriptgt;";  ?gt;  lt;/divgt; lt;/bodygt; lt;/htmlgt;  

кроме того, для фактического чтения из файла и передачи в массив вам необходимо разделить всю строку вручную, сначала обработав файл. установите границу, например , по количеству строк или по . , это зависит от вас.

лол, это неверное предположение. Вам нужно открыть файл и прочитать его строка за строкой

 lt;!DOCTYPE htmlgt; lt;htmlgt; lt;headgt;  lt;meta charset="UTF-8"gt;  lt;link rel="stylesheet" href="style.css"gt; lt;/headgt; lt;bodygt;  lt;div id="main"gt;  lt;?php  //$text = file("C:\Apache24\htdocs\release_notes_2.txt"); // line 10  $file = fopen(__DIR__.'/text-2.txt','r'); //the file you wan to read    $text = [];  if ($file) {  while (($line = fgets($file)) !== false) {  $text[] = $line;  }   fclose($file);  } else {  // error opening the file.  }     $it = 0;    echo "lt;script type='text/javascript'gt;";   foreach ($text as $line) {  echo 'alert("'.trim($text[$it]).'");';  $it  ;  }  echo "lt;/scriptgt;";    ?gt;  lt;/divgt; lt;/bodygt; lt;/htmlgt;  

или

 lt;!DOCTYPE htmlgt; lt;htmlgt; lt;headgt;  lt;meta charset="UTF-8"gt;  lt;link rel="stylesheet" href="style.css"gt; lt;/headgt; lt;bodygt;  lt;div id="main"gt;  lt;?php  //$text = file("C:\Apache24\htdocs\release_notes_2.txt"); // line 10  $file = file(__DIR__.'/text-2.txt');    print_r($file);    $it = 0;    echo "lt;script type='text/javascript'gt;";   foreach ($file as $line) {  echo 'alert("'.trim(htmlspecialchars($file[$it])).'");';  $it  ;  }  echo "lt;/scriptgt;";    ?gt;  lt;/divgt; lt;/bodygt; lt;/htmlgt;