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 :: Версия для печати :: Нужно быстро считать 3 строчки из файлов
Форумы портала PHP.SU » » Вопросы новичков » Нужно быстро считать 3 строчки из файлов

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

1. Rooner - 06 Февраля, 2013 - 15:40:23 - перейти к сообщению
У меня есть примерно 30 файлов (модулей), в которых я хочу хранить название, описание, требования модуля, чтобы потом скриптом просканировать эти файлы и получить эти описания для модулей. Каталог с модулями я просканировал, а как мне быстро зайти в каждый файл и считать оттуда только первые 3 строки, начиная со второй?
Функций для чтения файлов много, какую выбрать, чтобы работала побыстрее?
В результате хочу получить массив:
[модуль 1]
[name] модуль1
[descr] описание модуля
[need] требования модуля
[модуль 2]
[name] модуль2
[descr] описание модуля
[need] требования модуля
(Добавление)
Вроде так работает, но быстро ли...
PHP:
скопировать код в буфер обмена
  1.  
  2. $handle = fopen("modules/sendmail/sendmail.php", "r");
  3. $i = 0;
  4. while (($i<=3)) {
  5.   $buffer = fgets($handle, 4096);
  6.   echo $buffer;
  7.   $i++;
  8. }
  9. fclose($handle);
  10.  
2. createl - 06 Февраля, 2013 - 15:57:52 - перейти к сообщению
Возможно хватит даже file_get_contents ()
(Добавление)
Тупанул. Если три строки Тогда fgets()
(Добавление)
createl пишет:
Вроде так работает, но быстро ли...

Быстрее будет только если SSD поставишь!
3. EuGen - 06 Февраля, 2013 - 16:12:56 - перейти к сообщению
Rooner
PHP:
скопировать код в буфер обмена
  1. function file_slice($sName, $iStart=0, $iLength=null)
  2. {
  3.    $iStart = (int)$iStart;
  4.    $iLength= (int)$iLength;
  5.    if($iStart<0 || $iLength<=0)
  6.    {
  7.       return null;
  8.    }
  9.    if(!file_exists($sName) || !is_readable($sName))
  10.    {
  11.       return null;
  12.    }
  13.    $rFile  = fopen($sName, 'r');
  14.    $iPos   = 0;
  15.    while($iPos++<$iStart && !feof($rFile))
  16.    {
  17.       fgets($rFile);
  18.    }
  19.    if(feof($rFile))
  20.    {
  21.       fclose($rFile);
  22.       return null;
  23.    }
  24.    $iPos  = 0;
  25.    $sData = '';
  26.    while(!feof($rFile) && $iPos++<$iLength)
  27.    {
  28.       $sData.=fgets($rFile);
  29.    }
  30.    fclose($rFile);
  31.    return $sData;
  32. }

- как универсальный безопасный вариант. Вызов
PHP:
скопировать код в буфер обмена
  1. $sContent = file_slice('/path/to/file', 1, 3); // get 3 lines starting from 1 (global start is 0)

даст нужный результат.

 

Powered by ExBB FM 1.0 RC1