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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Перенос строки при записи в файл file_put_contents

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
avvaken7
Отправлено: 17 Июля, 2018 - 20:15:17
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2018  


Помог: 0 раз(а)




Доброго времени суток. Учусь писать небольшой парсер на 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 записывались каждое с новой строки друг напротив друга. Чтобы было соответствие Артикул - Цена.
Помогите, пожалуйста, или направьте на путь истинный Улыбка
Заранее благодарен за ответ. Помидорами не бросать, я только учусь.
 
 Top
Строитель Модератор
Отправлено: 17 Июля, 2018 - 22:52:18
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




avvaken7, может я не внимательно просмотрел ваш код, но так и не увидел - где вы передаёте эти переносы? Записать их можно либо ввиде строки в двойных кавычках
PHP:
скопировать код в буфер обмена
  1. "\r\n"
  2. // или без символа перевода каретки \r
  3. "\n"
либо ввиде константы
 
 Top
avvaken7
Отправлено: 18 Июля, 2018 - 12:44:30
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2018  


Помог: 0 раз(а)




Строитель пишет:
avvaken7, может я не внимательно просмотрел ваш код, но так и не увидел - где вы передаёте эти переносы? Записать их можно либо ввиде строки в двойных кавычках
PHP:
скопировать код в буфер обмена
  1. "\r\n"
  2. // или без символа перевода каретки \r
  3. "\n"
либо ввиде константы


Вот, мне бы хотелось узнать, где правильно их поставить. Логично, что они должны быть в цикле, что каждое новое значение ставилось с новой строки, но как это правильно расставить я еще не могу. Помогите, пожалуйста.
 
 Top
Строитель Модератор
Отправлено: 18 Июля, 2018 - 13:42:47
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




avvaken7, ну обычно пишут в конце строки:
PHP:
скопировать код в буфер обмена
  1. file_put_contents($saveFile, iconv('utf-8', 'windows-1251', $price) . PHP_EOL, FILE_APPEND);
Но правильно ли это будет в контексте вашего кода, я не могу сказать - запускайте, смотрите, анализируйте.
 
 Top
avvaken7
Отправлено: 18 Июля, 2018 - 13:49:24
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2018  


Помог: 0 раз(а)




Строитель пишет:
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();
 
 Top
Строитель Модератор
Отправлено: 18 Июля, 2018 - 14:46:20
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




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


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2018  


Помог: 0 раз(а)




Строитель пишет:
Попробуйте так
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]
Спасибо заранее.
 
 Top
Строитель Модератор
Отправлено: 18 Июля, 2018 - 15:19:26
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




avvaken7 пишет:
Не получилось, и с \r\n тоже не вышло и я не пойму в чем дело.
А как вы определяете? В браузере вы не увидите этих переводов - их или в текст. файле надо смотреть, или смотреть в исходном коде, или выводить в браузер с помощью var_dump().

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


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2018  


Помог: 0 раз(а)




Строитель пишет:
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(цифры);*содержимое переменной*
 
 Top
Строитель Модератор
Отправлено: 18 Июля, 2018 - 17:22:39
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




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


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2018  


Помог: 0 раз(а)




Строитель пишет:
avvaken7 пишет:
Выводит string(цифры);*содержимое переменной*
Без перевода на новую строку? И даже так?
Спойлер (Отобразить)
Покажите пожалуйста на скрине результат этого кода.


Вот скрин результата работы . PHP_EOL с моими значениями:
https://ibb.co/g65tJd

(Отредактировано автором: 18 Июля, 2018 - 17:56:08)

 
 Top
Строитель Модератор
Отправлено: 19 Июля, 2018 - 11:55:21
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




avvaken7, понятно. Вот так попробуйте, и вы увидите перевод на новую строку
Спойлер (Отобразить)
 
 Top
LIME
Отправлено: 22 Июля, 2018 - 18:34:19
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. $articul = 123 . '<br>';
чтоб наверняка понял
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB