X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> file / fopen
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 28.7.2010, 21:02; Ответить: Letmetouchyou
Сообщение #1


есть файл.

сейчас обрабатываетсья c помошью fopen -> feof -> fclose. (то есть открываем ®, и читаем каждую линию).

Так же сущесвует способ $data = file(). где $data - массив, каждый жлемент которого - строка файла.

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

Могут быть такие варинты что файл не откроеться? Сколько раз он может быть открыт одновременно ?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 28.7.2010, 21:23; Ответить: Webmaster_hb
Сообщение #2


file_get_contents
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 28.7.2010, 21:55; Ответить: Mulder_hb
Сообщение #3


http://php.su/articles/?cat=common&page=006#file
(Letmetouchyou @ 29.7.2010, 00:02) *
Могут быть такие варинты что файл не откроеться?

Могут.
(Letmetouchyou @ 29.7.2010, 00:02) *
Сколько раз он может быть открыт одновременно ?

Пока памяти хватит.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 28.7.2010, 21:57; Ответить: Letmetouchyou
Сообщение #4


Webmaster, не вариант, т.к. возвращает одну строку
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 28.7.2010, 22:01; Ответить: Letmetouchyou
Сообщение #5


(Mulder_hb @ 29.7.2010, 00:55) *
http://php.su/articles/?cat=common&page=006#file

Цитата:





Сообщение от Letmetouchyou


Могут быть такие варинты что файл не откроеться?




Могут.


низнвю почему, php.su у меня не работает, так что прочитать не могу((((

если могут не открыться, то длетаь отрктыие фалйа через try или while ?

ето относится и к file и к fopen?



(Mulder_hb @ 29.7.2010, 00:55) *
Пока памяти хватит.


какой? зависит от конфигурации сервера?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 28.7.2010, 22:05; Ответить: Letmetouchyou
Сообщение #6


только что тестил
[PHP]<?php
$start_time = microtime(true);
$a = file('hlx_template/inc.hlx');

echo '<pre>';
print_r($a);
echo '</pre>';


echo memory_get_usage()/1024 .'Kb<br/>';
echo $exec_time = microtime(true) - $start_time;

?>[/PHP]

65Kb
~0.0012-0.0020




[PHP]<?php
$start_time = microtime(true);
$a = fopen('hlx_template/inc.hlx','r');
while(!feof($a)){
$b[] = fgets($a);
}
fclose($a);
echo '<pre>';
print_r($b);
echo '</pre>';


echo memory_get_usage()/1024 .'Kb<br/>';
echo $exec_time = microtime(true) - $start_time;

?>[/PHP]

67 Kb
~0.00089


То етсь второй способ работате быстрее, использует примерно столько же памяти. Но получаеться что во втором случае файл открыт дольше, и шанс что он не откроеться у дргуого пользователя больше, чем в первом способе. так?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
unnormal
unnormal
сообщение 29.7.2010, 9:15; Ответить: unnormal
Сообщение #7


file(); - тянет много ресурсов, т.к. сохраняет все данные в памяти и рекомендуется для открытия только небольших файлов. Прост в использовании.

fopen(); - хорош тем, что можно прочитать отдельные части файла, не переполняя, тем самым, память ненужной информацией.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 29.7.2010, 10:31; Ответить: ZhukV
Сообщение #8


Функция file() в любом случае будет забирать больше веремни, поскольку файл сначала открывается, да и в придачу обрабатывается (заносится в массив)
fopen(), только резервирует память для файла и отдает его дескриптор.

Относительно памяти:
Раз нужно было сделать импорт с текстового файла.
Файл был около 4 - 7 метра.
Когда юзал file(), по памяти были приколы, поскольку создавался большой массив. Далее проганял его через foreach
Память ишла, будто в пропасть.
Тогда пришлось воспользоватся функцией unset(), чтоб освобождать память, зарезервируваную под переменную или чего-то другого.
[PHP]
$f = fopen('1.txt', 'r');
while($r = @fgets($f)){
//вот здесь не добавляем в массив, а обрабатываем
//в результате, переменная $r всегда будет иметь новое значение и не наполнять буфер
}
[/PHP]

Отсносительно открытия файла два раза одновременно:
Если открывать файл только для чтения 'r', проблем нет никаках!!! Просто переменная получает новый дескриптор файла, и все....

[PHP]
for($i=0; $i<10; $i++){
$f[] = fopen('1.txt', 'r');
}
var_dump($f);
[/PHP]
Вроде как ни один дескриптор не закрывался при помощи fclose(), а обработалось норма :)
При дампе, увидим, что каждый элемент массива имеет совсем другой дескритор.

Если уж файл открывается для записи, тогда вроде как устанавливается для него атрибут, типа файл уже используется.
Даный пример можна увидить даже у Windows-а. Открывай файл сто раз одновременно, ничего не будет. Но если ты захочешь открыть файл, а потом его удалить, вылезит ошибка :)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 29.7.2010, 21:15; Ответить: Letmetouchyou
Сообщение #9


ZhukV, открытие файла имеется ввиду не для одного пользователя, а для нескольких. то есть как открываться index.php например, при входе на сайт, так и открываетсья и парсится файл.

а насчет памяти, когда то принимал участие в разработке картографичесого сервиса, и там каждый участок карты - ASCII таблица, размером до 10 000 000 строк. для одного учатска карты - 8 файлов. ДЛя карты Укарины оного масштаба 26 участков то есть - 26*8 = 208 файлов , каждый до 10 000 000 строк.

чем меньше масштаб тем больше участков.

И на построение карты Украины, тратилось примерно 4 секунды. ( Обработка каждого файла + потсроение изображений ).
Правда ресурсов тратило около 26 Mb )))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 29.7.2010, 21:48; Ответить: Mulder_hb
Сообщение #10


Letmetouchyou, про одновременное открытие файлов: погуглите на тему блокировки и ее типов (рекомендательная и жесткая, исключительная, разделяемая, блокировка с запретом подвисания).

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Продаю сайт Top-file.ru
28 Staff92 8232 24.2.2010, 16:46
автор: Monah
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыНовый File Share сервис! 20$ за 1000 загрузок!
95 БаSтеR 20528 28.1.2009, 19:27
автор: edder


 



RSS Текстовая версия Сейчас: 19.4.2024, 23:54
Дизайн