Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Перенос строки при записи в файл file_put_contents
Форумы портала PHP.SU » » Вопросы новичков » Перенос строки при записи в файл file_put_contents

Страниц (1): [1]
 

1. avvaken7 - 17 Июля, 2018 - 20:15:17 - перейти к сообщению
Доброго времени суток. Учусь писать небольшой парсер на phpquery. Столкнулся с такой проблемой. При записи спарсенных данных в файл, не хочет переносить на новую строку каждое значение переменной.
Вот весь мой код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  header('Content-type: text/html; charset=utf-8');
  4.  
  5.  require 'phpQuery-onefile.php';
  6.  echo "<link rel='stylesheet' href='style.css'>";
  7.  
  8. function parser ($url,$start,$end) {
  9.  
  10.         if ($start < $end) {
  11.        
  12.                 $file = file_get_contents($url);
  13.                 $file = preg_replace('#<!--.*#','',$file); // Удаляем комментарии html с выборки
  14.                 $doc = phpQuery::newDocument($file);           
  15.  
  16.                         foreach ($doc->find('.product-list') as $position) {
  17.                                 $position = pq($position); // Делаем $position объектов phpquery
  18.  
  19.                 $articul = $position->find('.name > span:even(1)')->text(); // Тащим нужный span
  20.  
  21.                 $articul = str_replace("Артикул:", " ", $articul);//Убираем слово "Артикул: " со строки
  22.  
  23.                 $price =$position->find('.actions .price')->html(); // Вытаскиваем цену, которая соответствует артикулу    
  24.    
  25.                
  26.                         }      
  27.                                 $saveFile = 'database.html'; // Файл, для сохранения
  28.                                 file_put_contents($saveFile, iconv('utf-8','windows-1251',$articul));
  29.                                 file_put_contents($saveFile, iconv('utf-8','windows-1251',$price),FILE_APPEND);
  30.  
  31.  
  32.                         echo "<div class=container>";
  33.                                 echo "<div class=first>";
  34.                                         echo "<pre>";
  35.                                         echo $articul;
  36.                                         echo "</pre>";
  37.                                 echo "</div>";
  38.                                 echo "<div class=second>";
  39.                                         echo "<pre>";
  40.                                         echo $price;
  41.                                         echo "</pre>";
  42.                                 echo "</div>";
  43.                         echo "</div>";
  44.                        
  45.  
  46.                         $next = $doc->find('.pagination .active')->next()->find('a')->attr('href'); // Ищем ссылку на следующую страницу сайта в пагинации
  47.                        
  48.                
  49.                 if ( !empty($next) ) {
  50.                         $start++;
  51.                         parser($next, $start, $end);
  52.                 }
  53.         }      
  54. }
  55.  
  56. $url = "https://www.agro-center.com.ua/combines-a/spare-parts-for-grain-harvesters/john-deere-c/?limit=100";
  57. $start = 0;
  58. $end = 1;
  59. parser($url,$start,$end);
  60.  
  61. phpQuery::unloadDocuments();
  62.  
  63. ?>
  64.  


Мне хотелось бы чтобы значения переменных $articul и $price записывались каждое с новой строки друг напротив друга. Чтобы было соответствие Артикул - Цена.
Помогите, пожалуйста, или направьте на путь истинный Улыбка
Заранее благодарен за ответ. Помидорами не бросать, я только учусь.
2. Строитель - 17 Июля, 2018 - 22:52:18 - перейти к сообщению
avvaken7, может я не внимательно просмотрел ваш код, но так и не увидел - где вы передаёте эти переносы? Записать их можно либо ввиде строки в двойных кавычках
PHP:
скопировать код в буфер обмена
  1. "\r\n"
  2. // или без символа перевода каретки \r
  3. "\n"
либо ввиде константы
3. avvaken7 - 18 Июля, 2018 - 12:44:30 - перейти к сообщению
Строитель пишет:
avvaken7, может я не внимательно просмотрел ваш код, но так и не увидел - где вы передаёте эти переносы? Записать их можно либо ввиде строки в двойных кавычках
PHP:
скопировать код в буфер обмена
  1. "\r\n"
  2. // или без символа перевода каретки \r
  3. "\n"
либо ввиде константы


Вот, мне бы хотелось узнать, где правильно их поставить. Логично, что они должны быть в цикле, что каждое новое значение ставилось с новой строки, но как это правильно расставить я еще не могу. Помогите, пожалуйста.
4. Строитель - 18 Июля, 2018 - 13:42:47 - перейти к сообщению
avvaken7, ну обычно пишут в конце строки:
PHP:
скопировать код в буфер обмена
  1. file_put_contents($saveFile, iconv('utf-8', 'windows-1251', $price) . PHP_EOL, FILE_APPEND);
Но правильно ли это будет в контексте вашего кода, я не могу сказать - запускайте, смотрите, анализируйте.
5. avvaken7 - 18 Июля, 2018 - 13:49:24 - перейти к сообщению
Строитель пишет:
avvaken7, ну обычно пишут в конце строки:
PHP:
скопировать код в буфер обмена
  1. file_put_contents($saveFile, iconv('utf-8', 'windows-1251', $price) . PHP_EOL, FILE_APPEND);
Но правильно ли это будет в контексте вашего кода, я не могу сказать - запускайте, смотрите, анализируйте.


А как правильно будет расставить переносы строки, чтобы при каждом проходе цикла значение в переменную заносились с новой строки:
Вот код в цикле, который тянет значения:

PHP:
скопировать код в буфер обмена
  1. $articul = $position->find('.name > span:even(1)')->text();
6. Строитель - 18 Июля, 2018 - 14:46:20 - перейти к сообщению
Попробуйте так
PHP:
скопировать код в буфер обмена
  1. $articul = $position->find('.name > span:even(1)')->text() . PHP_EOL;
7. avvaken7 - 18 Июля, 2018 - 15:02:27 - перейти к сообщению
Строитель пишет:
Попробуйте так
PHP:
скопировать код в буфер обмена
  1. $articul = $position->find('.name > span:even(1)')->text() . PHP_EOL;


Не получилось, и с \r\n тоже не вышло и я не пойму в чем дело.

Ну да это проблема не сильно давящая.
Вопрос к Вам, как к человеку знающему. Может направите в нужное русло.
Мой небольшой парсер тянет артикулы и цены с другого сайта.
Артикулы тянутся нормально, а вот цена. На сайте доноре присутствует понятие "Лучшая цена" и потом в блоке, с которого я тяну цены, появляется span class="price-new". Получается у меня тянет полностью всё содержимое. Из-за span появляются отступы и нарушается порядок Артикул - цена.
Я прикрепляю скриншот:
[img]https://thumb[dot]ibb[dot]co/gNSTJd/2[dot]png[/img]

Как мне избавится от этого? Я не могу зацепится больше ни за что. Блок с которого я тяну цену выглядит вот так:
[img]https://thumb[dot]ibb[dot]co/fdcjry/2[dot]png[/img]
Когда появляется span, блок выглядит вот так:
[img]https://thumb[dot]ibb[dot]co/jrTDjJ/3[dot]png[/img]
Спасибо заранее.
8. Строитель - 18 Июля, 2018 - 15:19:26 - перейти к сообщению
avvaken7 пишет:
Не получилось, и с \r\n тоже не вышло и я не пойму в чем дело.
А как вы определяете? В браузере вы не увидите этих переводов - их или в текст. файле надо смотреть, или смотреть в исходном коде, или выводить в браузер с помощью var_dump().

Попробуйте под этой строкой добавить контрольную точку, и посмотрите в браузере результат
PHP:
скопировать код в буфер обмена
  1. $articul = $position->find('.name > span:even(1)')->text() . PHP_EOL;
  2. var_dump($articul); die;
avvaken7 пишет:
Вопрос ...
Я с phpQuery работал ровно два раза, оба эти случая были на уровне примеров из его же документации. Поэтому что либо советовать я не могу.
9. avvaken7 - 18 Июля, 2018 - 15:29:31 - перейти к сообщению
Строитель пишет:
avvaken7 пишет:
Не получилось, и с \r\n тоже не вышло и я не пойму в чем дело.
А как вы определяете? В браузере вы не увидите этих переводов - их или в текст. файле надо смотреть, или смотреть в исходном коде, или выводить в браузер с помощью var_dump().

Попробуйте под этой строкой добавить контрольную точку, и посмотрите в браузере результат
PHP:
скопировать код в буфер обмена
  1. $articul = $position->find('.name > span:even(1)')->text() . PHP_EOL;
  2. var_dump($articul); die;
avvaken7 пишет:
Вопрос ...
Я с phpQuery работал ровно два раза, оба эти случая были на уровне примеров из его же документации. Поэтому что либо советовать я не могу.


Выводит string(цифры);*содержимое переменной*
10. Строитель - 18 Июля, 2018 - 17:22:39 - перейти к сообщению
avvaken7 пишет:
Выводит string(цифры);*содержимое переменной*
Без перевода на новую строку? И даже так?
Спойлер (Отобразить)
Покажите пожалуйста на скрине результат этого кода.
11. avvaken7 - 18 Июля, 2018 - 17:55:10 - перейти к сообщению
Строитель пишет:
avvaken7 пишет:
Выводит string(цифры);*содержимое переменной*
Без перевода на новую строку? И даже так?
Спойлер (Отобразить)
Покажите пожалуйста на скрине результат этого кода.


Вот скрин результата работы . PHP_EOL с моими значениями:
https://ibb[dot]co/g65tJd
12. Строитель - 19 Июля, 2018 - 11:55:21 - перейти к сообщению
avvaken7, понятно. Вот так попробуйте, и вы увидите перевод на новую строку
Спойлер (Отобразить)
13. LIME - 22 Июля, 2018 - 18:34:19 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. $articul = 123 . '<br>';
чтоб наверняка понял

 

Powered by ExBB FM 1.0 RC1