Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужна функция для работы с файлом.
 
 автор: adminn   (05.02.2007 в 23:54)   письмо автору
 
 

Помогите реализовать. Мне нужно чтоб мой скрипт читал файл построчно и где встречал строчку "load.exe" выводил её на экран.
вот , что у мня вышло :

<?
if (!($f=fopen("apache.txt""r")))
{ die(
"Open error!"); }
$s fread($f11);
print(
"<P><h1>IP , LOAD INFO:</h1> $s");
fclose($f);
?>

читаю файл и вывожу только первые 11 символов .. могу читать с конца и т.д
но не как не получается сделать так : что бы он читал файл и опираясь на условие выводил строчку где имеется совпадение с "load.exe". Подкиньте инфы или пример скрипта.

   
 
 автор: bronenos   (06.02.2007 в 00:03)   письмо автору
 
   для: adminn   (05.02.2007 в 23:54)
 

<?
$file 
file ('apache.txt');
if (!
$file) die ('error');

foreach (
$file as $f) {
 if (
strpos ($f'load.exe') !== false)
  print 
"$f<br>";
}
?>

   
 
 автор: adminn   (06.02.2007 в 00:25)   письмо автору
 
   для: bronenos   (06.02.2007 в 00:03)
 

Спасибо!
Все прекрасно работает.. еще вопрос :
- а не страшно грузить файл функцией file()
у меня файлы будут по 100 мб. и обращений будет тоже довольно много.. получается , что такой сценарий будет жрать очень много ресурсов.
наверно будет лучше использовать fopen() или как?

   
 
 автор: Саня   (06.02.2007 в 00:58)   письмо автору
 
   для: adminn   (06.02.2007 в 00:25)
 

Конечно страшно! Банально может не хватить памяти.
<?
$fp 
fopen("apache.txt""r");

while ( !
feof($fp) ) {
  
$str fgets($fp);
  if ( 
strpos($str"load.exe") !== false ) { 
    print 
$f."<br>";
  }
}

   
 
 автор: Trianon   (06.02.2007 в 10:56)   письмо автору
 
   для: Саня   (06.02.2007 в 00:58)
 

Опасно... строка (т.е. нечто до байта 0Ah) тоже может оказаться весьма длинной.

....
Не поглядел, о чем речь идет. Для строк лога вполне приемлемо.

   
 
 автор: ZuArt   (06.02.2007 в 11:13)   письмо автору
 
   для: Trianon   (06.02.2007 в 10:56)
 

никто не мешает брать не строку а символ и проверять его на соответствие букве "l" - потом читать еще нужное кол-во для сравнения с "load.exe" - и потом до конца... просто усложниться процесс тем, что надо доп буфер организовывать, куда сохранять набираемую посимвольно строку... но это исключит переполнение (кстать, если еще и учесть, что выводимая строка большая может быть, то тут много нюансов - все расписывать не буду - лень)

   
 
 автор: tonnal   (06.02.2007 в 00:58)   письмо автору
 
   для: adminn   (06.02.2007 в 00:25)
 

Скороее Вам нужно решить вопрос кэширования полученных данных

   
 
 автор: Loki   (06.02.2007 в 09:19)   письмо автору
 
   для: tonnal   (06.02.2007 в 00:58)
 

lol

   
 
 автор: Disable   (06.02.2007 в 12:05)   письмо автору
 
   для: adminn   (06.02.2007 в 00:25)
 

Если в файле более 10000 строк желательно использовать базу данных..

   
 
 автор: adminn   (06.02.2007 в 17:13)   письмо автору
 
   для: Disable   (06.02.2007 в 12:05)
 

Причем тут база данных? если я читаю лог апача?
Всем спасибо.

   
 
 автор: ZuArt   (06.02.2007 в 18:16)   письмо автору
 
   для: adminn   (06.02.2007 в 17:13)
 

Если читать лог апача - то строки всяк не более максимальной длины, поддерживаемой браузером - вроде 1Кб - так что смело можешь читать построчно =))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования