Я проверил это и не работал на меня! PHP Запишите переменную в файл txt
Так что это мой код, пожалуйста, взгляните! Я хочу записать все содержимое переменной в файл. Но когда я запускаю код, он записывает только последнюю строку содержания!
<?php $re = '/<li><a href="(.*?)"/'; $str = ' <li><a href="http://www.example.org/1.html"</a></li> <li><a href="http://www.example.org/2.html"</a></li> <li><a href="http://www.example.org/3.html"</a></li> '; preg_match_all($re, $str, $matches); echo '<div id="pin" style="float:center"><textarea class="text" cols="110" rows="50">'; // Print the entire match result foreach($matches[1] as $content) echo $content."\r\n"; $file = fopen("1.txt","w+"); echo fwrite($file,$content); fclose($file); ?>
Когда я открываю 1.txt, его показывают только меня
http://www.example.org/3.html
Это должно быть
http://www.example.org/1.html http://www.example.org/2.html http://www.example.org/3.html
Я что-то делаю неправильно?
Эта
foreach($matches[1] as $content) echo $content."\r\n";
только итерации по массиву и делает $content
последним элементом (у вас нет {}
так что это один лайнер).
Простая демонстрация вашей проблемы, https://eval.in/806352 .
Однако вы можете использовать использование implode
.
fwrite($file,implode("\n\r", $matches[1]));
Вы также можете упростить это, используя file_put_contents
. В руководстве:
Эта функция идентична вызовам fopen (), fwrite () и fclose () последовательно для записи данных в файл.
Таким образом, вы можете просто сделать:
$re = '/<li><a href="(.*?)"/'; $str = ' <li><a href="http://www.example.org/1.html"</a></li> <li><a href="http://www.example.org/2.html"</a></li> <li><a href="http://www.example.org/3.html"</a></li> '; preg_match_all($re, $str, $matches); echo '<div id="pin" style="float:center"><textarea class="text" cols="110" rows="50">'; file_put_contents("1.txt", implode("\n\r", $matches[1]));
Поздний ответ, но вы можете использовать file_put_contents с флагом FILE_APPEND
, также не используйте регулярное выражение для анализа HTML
, используйте парсер HTML
например DOMDocument , то есть:
$html = ' <li><a href="http://www.example.org/1.html"</a></li> <li><a href="http://www.example.org/2.html"</a></li> <li><a href="http://www.example.org/3.html"</a></li>'; $dom = new DOMDocument(); @$dom->loadHTML($html); // @ suppress DOMDocument warnings $xpath = new DOMXPath($dom); foreach ($xpath->query('//li/a/@href') as $href) { file_put_contents("file.txt", "$href->nodeValue\n", FILE_APPEND); }