Помощник
|
file / fopen |
Letmetouchyou
|
Сообщение
#1
|
||
|
|
||
|
|||
Webmaster_hb |
28.7.2010, 21:23;
Ответить: Webmaster_hb
Сообщение
#2
|
|
file_get_contents
|
|
|
Mulder_hb |
28.7.2010, 21:55;
Ответить: Mulder_hb
Сообщение
#3
|
|
http://php.su/articles/?cat=common&page=006#file
Могут быть такие варинты что файл не откроеться? Могут. Сколько раз он может быть открыт одновременно ? Пока памяти хватит. |
|
|
Letmetouchyou
|
Сообщение
#4
|
|
Webmaster, не вариант, т.к. возвращает одну строку
|
|
|
Letmetouchyou
|
Сообщение
#5
|
|
http://php.su/articles/?cat=common&page=006#file Цитата: Сообщение от Letmetouchyou Могут быть такие варинты что файл не откроеться? Могут. низнвю почему, php.su у меня не работает, так что прочитать не могу(((( если могут не открыться, то длетаь отрктыие фалйа через try или while ? ето относится и к file и к fopen? Пока памяти хватит. какой? зависит от конфигурации сервера? |
|
|
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 |
29.7.2010, 9:15;
Ответить: unnormal
Сообщение
#7
|
|
file(); - тянет много ресурсов, т.к. сохраняет все данные в памяти и рекомендуется для открытия только небольших файлов. Прост в использовании.
fopen(); - хорош тем, что можно прочитать отдельные части файла, не переполняя, тем самым, память ненужной информацией. |
|
|
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
|
Сообщение
#9
|
|
ZhukV, открытие файла имеется ввиду не для одного пользователя, а для нескольких. то есть как открываться index.php например, при входе на сайт, так и открываетсья и парсится файл.
а насчет памяти, когда то принимал участие в разработке картографичесого сервиса, и там каждый участок карты - ASCII таблица, размером до 10 000 000 строк. для одного учатска карты - 8 файлов. ДЛя карты Укарины оного масштаба 26 участков то есть - 26*8 = 208 файлов , каждый до 10 000 000 строк. чем меньше масштаб тем больше участков. И на построение карты Украины, тратилось примерно 4 секунды. ( Обработка каждого файла + потсроение изображений ). Правда ресурсов тратило около 26 Mb ))) |
|
|
Mulder_hb |
29.7.2010, 21:48;
Ответить: Mulder_hb
Сообщение
#10
|
|
|
Letmetouchyou, про одновременное открытие файлов: погуглите на тему блокировки и ее типов (рекомендательная и жесткая, исключительная, разделяемая, блокировка с запретом подвисания).
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Продаю сайт 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 |
Текстовая версия | Сейчас: 19.4.2024, 23:54 |