Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Создание массива

Модерирует : Cheery

articlebot (04-04-2019 21:23): Простенький вопрос по PHP  Версия для печати • ПодписатьсяДобавить в закладки

   

sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Непростой вопрос для меня.  
 
Получаем информацию из логов с удаленного сайта
 
$file=file_get_contents("https://site.xx/web.log?id=2221/")
 
 
получаем массив:
 
 Array
(
    [0] => 04:05:10 26.02.19 | 1.1.222.17 | id-2221 | /list.html <- https://yandex.ru/ | Mozilla/5.0 (Linux; U; Android 6.0;)
    [1] => 04:06:10 26.02.19 | 1.1.222.17 |  id-2221 | /list2.html <- /list.html | Mozilla/5.0 (Linux; U; Android 6.0;)
    
)
 
 
Функция file_get_contents, сливает эту информацию в единую строку, поэтому разбиваем обратно в массив:
$dd = explode("[", $file);    
 
Прогоняем через foreach
   
foreach ($dd as $stroka) {
    echo '<span>'. $stroka.'</span><br />'  ;
  }
 
Получаем исходный вывод.  Вопрос как разбить каждую строку в еще один массив и чтобы выводить строчку не целиком, а только нужные фрагменты?
 
т.е. вместо:
[0] => 04:05:10 26.02.19 | 5.18.222.17 | id-2221 | /list.html <- https://yandex.ru/ | Mozilla/5.0 (Linux; U; Android 6.0;)
 
 
Стало  
     04:06:10 26.02.19 | 5.18.222.17 |  /list2.html <- /list.html  
   

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 10:05 03-04-2019
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88
Может хватит и каждый раз создавать новую тему??

Цитата:
Вопрос как разбить каждую строку в еще один массив и чтобы выводить строчку не целиком, а только нужные фрагменты?  
 

Сначала разбить по переносу строки "\n" - это даст строки, а потом уже каждую строчку разбивать по |

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 11:21 03-04-2019
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Сначала разбить по переносу строки "\n

так переноса изначально нет, мы его получаем когда  прогоняем через foreach  и добавляем к каждой строчке <br />'  ;

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 11:41 03-04-2019
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88
flle_get_contents не возвращает массив, а текст.
А вы показываете какой то массив.  
Если данные построчные - по переносу. Если нет - покажите точно, что получается по запросу.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 12:36 03-04-2019
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
flle_get_contents не возвращает массив, а текст.

 
я знаю  и уже об этом писал:  
 
Функция file_get_contents, сливает эту информацию в единую строку, поэтому разбиваем обратно в массив:  
 $dd = explode("[", $file);    

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 14:22 03-04-2019
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88
Я спросил в каком виде инфа.
Если то, что выглядит как дамп, то почему именно в таком виде, а не просто две строки (скрипт же ваш, как понимаю)

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 15:46 03-04-2019
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. на сайте лежит обычный файл лог апача
2. рядом файл поиска, через GET ?id=22219899  получаем информацию по нужному нам посетителю.
выглядит так (если обратиться к эту файлу через браузер)
 
 Array  
 (  
     [0] => 04:05:10 26.02.19 | 1.1.222.17 | id-2221 | /list.html <- https://yandex.ru/ | Mozilla/5.0 (Linux; U; Android 6.0;)  
     [1] => 04:06:10 26.02.19 | 1.1.222.17 |  id-2221 | /list2.html <- /list.html | Mozilla/5.0 (Linux; U; Android 6.0;)  
       
 )
 
3. когда мы забираем через file_get_contents  мы получаем информацию в виде строки:
 
 Array (  [0] => 04:05:10 26.02.19 | 1.1.222.17 | id-2221 | /list.html <- https://yandex.ru/ | Mozilla/5.0 (Linux; U; Android 6.0;)      [1] => 04:06:10 26.02.19 | 1.1.222.17 |  id-2221 | /list2.html <- /list.html | Mozilla/5.0 (Linux; U; Android 6.0;)  )
 
4. разбиваем обратно в массив:  
  $dd = explode("[", $file);    

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 16:24 03-04-2019
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88
Сделайте вывод нормально, а не через print_r - проблем с обработкой будет в сто раз меньше.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 16:28 03-04-2019
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Сделайте вывод нормально,

это как ?

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 17:23 03-04-2019
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
это как ?

вместо print_r($var) в скрипте вывода, сделать
foreach($var as $line)
echo $line . "\n";
к примеру, либо можно вообще все выдать в JSON формате.
тогда проще будет получать и парсить информацию
 
с print_r же нужно делать как то так

Код:
<?php
$str =<<<END
 Array  
 (  
     [0] => 04:05:10 26.02.19 | 1.1.222.17 | id-2221 | /list.html <- https://yandex.ru/ | Mozilla/5.0 (Linux; U; Android 6.0;)  
     [1] => 04:06:10 26.02.19 | 1.1.222.17 |  id-2221 | /list2.html <- /list.html | Mozilla/5.0 (Linux; U; Android 6.0;)  
       
 )  
END;
 
if (preg_match_all('/^.*=>\s*(.*)$/m', $str, $matches))
foreach($matches[1] as $match) {
    // разбиваем по |
    $tmp = array_map('trim', explode('|', $match));
    var_dump($tmp);
}

вместо var_dump используем нужные элементы

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:44 03-04-2019
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Большое спасибо за помощь

Цитата:
if (preg_match_all('/^.*=>\s*(.*)$/m', $str, $matches))

хорошая идея.  
 

Цитата:
вместо print_r($var) в скрипте вывода, сделать

 
честно говоря я так и не понял откуда вы решили что я использую  print_r для вывода.

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 10:58 04-04-2019
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
вы решили что я использую  print_r для вывода.


Цитата:
 Array  
 (  
     [0] => 04:05:10 26.02.19 | 1.1.222.17 | id-2221 | /list.html <- https://yandex.ru/ | Mozilla/5.0 (Linux; U; Android 6.0;)  
     [1] => 04:06:10 26.02.19 | 1.1.222.17 |  id-2221 | /list2.html <- /list.html | Mozilla/5.0 (Linux; U; Android 6.0;)  
       
 )  

это результат работы print_r

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 19:10 04-04-2019
   

Компьютерный форум Ru.Board » Интернет » Web-программирование » Создание массива
articlebot (04-04-2019 21:23): Простенький вопрос по PHP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru