#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;