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

Форум PHP

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

 

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

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

тема: Чтение файла
 
 автор: Fddd   (25.10.2006 в 18:21)   письмо автору
 
 

Я гдето слышал что если читать огромный файл функции file то это займёт много время и буудут проблемы.
Так какже его прочесть?

   
 
 автор: Trianon   (25.10.2006 в 18:55)   письмо автору
 
   для: Fddd   (25.10.2006 в 18:21)
 

а зачем его читать? Что Вы дальше хотите делать с его содержимым?

   
 
 автор: Fddd   (25.10.2006 в 19:04)   письмо автору
 
   для: Trianon   (25.10.2006 в 18:55)
 

>а зачем его читать?
Как это.... А зачем он тогда нужен?
Я храню там информацию, которая записана по строкам. Мне её нужно будет вывести на экран, коечто обработать.

   
 
 автор: Trianon   (25.10.2006 в 19:15)   письмо автору
 
   для: Fddd   (25.10.2006 в 19:04)
 

так и читайте по строкам. fopen, fgets

   
 
 автор: Alph[p]a   (25.10.2006 в 19:23)   письмо автору
 
   для: Trianon   (25.10.2006 в 19:15)
 

Блин интересно, чё это за "Огромный" файл, ты чё.. Лучше юзать Mysql чем хранить всё в txt :-))))

   
 
 автор: Fddd   (25.10.2006 в 19:30)   письмо автору
 
   для: Alph[p]a   (25.10.2006 в 19:23)
 

>Блин интересно, чё это за "Огромный" файл, ты чё.. Лучше юзать Mysql чем хранить всё в txt :-))))
Это всё понятно... Я не спорю.

Вот так чтоль открывать:

<?php
$file 
fopen("file.txt""r");
while (!
feof($file)) {
$text fgets($file1000);
echo 
$text;
}
fclose($file);
?>

И чё так будет быстрее работать? А параметр у fgets "1000" на скорость влияет?

   
 
 автор: Alph[p]a   (25.10.2006 в 19:41)   письмо автору
 
   для: Fddd   (25.10.2006 в 19:30)
 

>$text = fgets($file, 1000);
руководство по php:
string fgets (int fp, int length)
там сказано что параметр "int length" это длина возвращаемой строки, мол если в строке встречается символ "\n" то возвращаються все элементы до этого знака..
А так всё правильно. На скорость само собой будет влиять, смотря какой длины строка...

   
 
 автор: DEM   (25.10.2006 в 19:42)   письмо автору
 
   для: Fddd   (25.10.2006 в 19:30)
 

А что имено вы хранте в файлах? Какую имено информацию?

   
 
 автор: Fddd   (26.10.2006 в 22:48)   письмо автору
 
   для: DEM   (25.10.2006 в 19:42)
 

>А что имено вы хранте в файлах? Какую имено информацию?
А это имеет разницу при работе скрипта?

Вот интересно... У меня получилось так что через file получается быстрее чем через fopen.
Для примера возьмёт Деневер и файл весом в 995 КБ.
Пишем в файле file.php:

<?php
list($msec,$sec)=explode(chr(32),microtime());
$HeadTime=$sec+$msec;
/* Сам код */
$file file("files.txt");
foreach (
$file as $a){
        echo 
$a."<br>";
}
/* - - */
list($msec,$sec)=explode(chr(32),microtime());
echo 
"<br>Страница сгенерировалась за ".round(($sec+$msec)-$HeadTime,4)." сек.";
?>

А в файле fopen.php пишем:

<?php
list($msec,$sec)=explode(chr(32),microtime());
$HeadTime=$sec+$msec;
/* Сам код */
$file fopen("files.txt""r");
while (!
feof($file)) {
$text fgets($file100);
echo  
$text."<br>";
}
/* - - */
list($msec,$sec)=explode(chr(32),microtime());
echo 
"<br>Страница сгенерировалась за ".round(($sec+$msec)-$HeadTime,4)." сек.";
?>

Для того чтобы создать проверочный текстовый файл(files.txt) пишем скрипт:

<?php
$f 
fopen("files.txt""a+");
$tex="";
for (
$i=0$i<=10000$i++){
$tex.=$i." Строка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка\r\n";
}
fwrite ($f$tex);
?>

   
 
 автор: Fddd   (27.10.2006 в 16:00)   письмо автору
 
   для: Fddd   (26.10.2006 в 22:48)
 

..

   
 
 автор: Fddd   (27.10.2006 в 22:56)   письмо автору
 
   для: Fddd   (27.10.2006 в 16:00)
 

..

   
 
 автор: kasmanaft   (27.10.2006 в 23:01)   письмо автору
 
   для: Fddd   (27.10.2006 в 22:56)
 

" .. " - означает "вопрос все еще актуален", up?
я думал это ляп затертый....

Дело наверное в том, что длина строк уже после 10-ков, будет больше ста байт, соответственно приходится одну строку считывать в несколько заходов. Увеличив значение второго аргумента fgets хотя бы на несколько байт время работы сократится существенно (хотя будет не меньше чем file() ).

Но использовать лучше fgets, потому что если файл окажется большего размера, то он банально может не уместиться в предаставленной хостером оперативной памяти.

   
 
 автор: Unkind™   (27.10.2006 в 23:23)   письмо автору
 
   для: Fddd   (26.10.2006 в 22:48)
 

for ($i=0; $i<=10000; $i++){
$tex.=$i." Строка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка Проверка\r\n";
}


Вообще-то есть специальная функция str_repeat()...:)

   
 
 автор: mrklon   (28.10.2006 в 01:03)   письмо автору
 
   для: Unkind™   (27.10.2006 в 23:23)
 

Вот про оперативную память я забыыыл совсем...я пока оставил это.
Вот новая задачка:
Есть код:

$vivod=preg_replace("{{nik}}", $nik[$n+$i],$msg);

Как сделать, что заменять несколько значений за раз? *Я хочу сказать, чтоб ненадо было дублировать функцию для каждой замены. заменить все зараз)
И еще, вместо "{{nik}}" он должен ввыдавать "Вася", а выает "{Вася}". Почему?

   
 
 автор: kasmanaft   (28.10.2006 в 06:48)   письмо автору
 
   для: mrklon   (28.10.2006 в 01:03)
 

В каком виде у вас данные в файлах записаны?
Да и тут наверное лугше будет воспользоваться ф-ей str_replace (строковые ф-и работают быстрее, а тут еще такая простая замена):

<?
$text 
"text {{nik}} text {{nik}}";
echo 
preg_replace ("/{{nik}}/is""VASYA"$text),'<br>';
echo 
str_replace ('{{nik}}''VASYA'$text);
?>

пс: в рег. выражениях preg_replace, выражение нужно брать в ограничители - 2 практически любых, одинаковых самвола по краям

   
 
 автор: mrklon   (28.10.2006 в 14:29)   письмо автору
 
   для: kasmanaft   (28.10.2006 в 06:48)
 

Извиняюсь за путаницу.
preg_replace использую для врисывания данных в шаблон сообщения (гостевуха).

и вот кучку типа:
$vivod=preg_replace("/{{nik}}/", $nik[$n+$i],$msg);
$vivod2=preg_replace("/{{mail}}/", $mail[$n+$i],$vivod);
$vivod3=preg_replace("/{{web}}/", $web[$n+$i],$vivod2);
$vivod4=preg_replace("/{{msg}}/", $mmm[$n+$i],$vivod3);

свести к одному preg_replace
------------

За "пс: в рег. выражениях preg_replace, выражение нужно брать в ограничители - 2 практически любых, одинаковых самвола по краям"
Спасибо!

   
Rambler's Top100
вверх

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