Реклама на сайте Advertise with us

Подскажите как правильно

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 29/11/11 в 19:45       Ответить с цитатойцитата 

У меня запущен цикл в процессе которого будет происходить запись в файл
цикл можкт идти до нескольких тысяч повторов за раз.
Стоит ли после каждой записи в файл, закрывать его
fclose($f);
???
Во время цикла генерятся файлы, и их имена как раз и записываются в отдельный файл.

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 29/11/11 в 20:03       Ответить с цитатойцитата 

надо, чтоб не мусорили память

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 29/11/11 в 20:46       Ответить с цитатойцитата 

Имхо кошерней будет собирать имена файлов в переменную и по окончании цикла один раз вызвать file_put_contents.

6
 



С нами с 31.05.10
Сообщения: 1991
Рейтинг: 487

Ссылка на сообщениеДобавлено: 29/11/11 в 21:05       Ответить с цитатойцитата 

вообще правильнее в бд писать конечно эти имена файлов - возни чуть больше, масштабировать проще.
но если писать список надо именно в файл (назову файл вывода - ФВ), то с одной стороны после каждой операции создания файла заново открывать фв, вносить туда изменения и закрывать не есть правильно.
с другой стороны обновлять фв после всех операций тоже чревато последствиями в виде подвисшего скрипта -> пропущенного внесения изменений. или set_time_limit(0) будет запрещен на хосте и скрипту не будет хватать времени чтобы в фв вносить данные - тоже косяк.
так что тут нужен промежуточный вариант - например копить данные для внесения в фв по 1000 строк по какому-то счетчику. потом записывать их в фв, обнулять счетчик.
повторюсь, на мой взгдял использовать текстовик для хранения 10к+ данных - неправильно.

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 29/11/11 в 21:18       Ответить с цитатойцитата 

LeadFarmer писал:
с другой стороны обновлять фв после всех операций тоже чревато последствиями в виде подвисшего скрипта -> пропущенного внесения изменений. или set_time_limit(0) будет запрещен на хосте и скрипту не будет хватать времени чтобы в фв вносить данные

register_shutdown_function не подойдёт?

6
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 29/11/11 в 21:18       Ответить с цитатойцитата 

LeadFarmer писал:

повторюсь, на мой взгдял использовать текстовик для хранения 10к+ данных - неправильно.


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

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 29/11/11 в 21:19       Ответить с цитатойцитата 

у меня на локалке генерятся кастомные галеры и сразу по шаблону создается файл для импорта в ДТР.
Чтоб сразу всё закинуть на сервер и дать ДТРу данные о вновь поступивших icon_wink.gif Поэтому писать всё это дело в БД ненужно.
ЗЫ Это всё на локалке, и всё сразу же подчищается после отправки на сервак.
Тут конечно и не играет особой роли стоит ли закрывать или нет, но всё же я только всё познаю потихоньку и хотелось бы знать.

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

1
 



С нами с 31.05.10
Сообщения: 1991
Рейтинг: 487

Ссылка на сообщениеДобавлено: 29/11/11 в 22:05       Ответить с цитатойцитата 

Yacc писал:
register_shutdown_function не подойдёт?

неа icon_smile.gif с точки зрения правильности написания скрипта пойдет конечно, но я бы не полагался на пых, который некоторые вещи делает своим феерическим способом. хотя это уже просто мой стиль программирования - перестраховываться и проч.
Lexikon писал:
у меня на локалке генерятся кастомные галеры и сразу по шаблону создается файл для импорта в ДТР

ну я не же знал всей задачи ) но я один раз столкнулся с подобной задачей - генерация файлов по шаблону, с сохранением их списка где-то в файле. после того как все сделал и сдал заказчику - тот вспомнил что хотел там еще перелинковку сделать хитрую. вот хз как о такой "мелочи" люди забывают icon_smile.gif
и эта перелинковка мне мозг вынесла пока я в бд ее не реализовал. хотя заказчик тоже говорил что бд ему вааще нахер не нужна.
где-то на винте это эпическое творение до сих пор хранится. маленький генератор дорвеев по шаблону с небольшой базенкой в 3 ляма записей с кеями и схемой перелинковки icon_smile.gif
2 ibiz - ну собственно выше я описал свое мнение о необходимости бд для подобных задач.

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 29/11/11 в 22:33       Ответить с цитатойцитата 

я вначале тоже думал о перелинковке, но даже если взять во внимание, что будет база, я х.з. какой алгоритм должен быть при перелинковки т.е. как первая страница должна ссылаться на другие, а те другие на остальные.
Самое просто е это сделать
А на В на С на А
но толку то от такой перелинковки

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

1
 



С нами с 31.05.10
Сообщения: 1991
Рейтинг: 487

Ссылка на сообщениеДобавлено: 29/11/11 в 22:45       Ответить с цитатойцитата 


ну я не особо в курсе какие тенденции перелинковки сейчас в моде icon_mrgreen.gif но по логике - ссылки с морды на все страницы малоэффективны.
ну я бы на твоем месте если о перелинковке думал - взял за основу блоговую структуру перелинковки. условные морда, промежуточные страницы, посты, в них similar posts.раз такое гугель хавает на ура - почему бы так и не делать. ну разве что переложить на твою почву.

ну или черкни ПМ я тебе скину линки интересные на ресурсы одного местного авм-а. у него реально аххулиард такого говноконтента проиндексирован по нч.

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 30/11/11 в 08:48       Ответить с цитатойцитата 

Подскажите еще такой момент.
Я так понял в ПХП нет функции подсчета слов в тексте. По крайней мере я такое не нашел. Стал думать как выйти из ситуации. Можно определить количество пробелов, но пробелы могут встречаться не по 2 -3 раза подряд, тут тогда нужно обработать текст регулярныым выражением и убрать все повторяющиеся подряд пробелы, а также удалить пробелы в начале и конце. и потом уже считать. Также опять скорее всего с помощью регулярок запретить подсчет одиночных символов ! : . , и т.д. которые тоже могут стоять между пробелами.
Подскажите куда копать. icon_rolleyes.gif

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 

Bitcoin

С нами с 18.11.01
Сообщения: 4709
Рейтинг: 3066


Передовик Master-X (16.09.2021) Передовик Master-X (01.10.2021)
Ссылка на сообщениеДобавлено: 30/11/11 в 08:51       Ответить с цитатойцитата 

Сделай preg_match_all и ищи все что может быть словом

Tube.Cash выкупит ваш трафик на галеры, заплатит за переходы с эмбедов

6
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 30/11/11 в 09:01       Ответить с цитатойцитата 

Lexikon писал:
Подскажите еще такой момент.
Я так понял в ПХП нет функции подсчета слов в тексте. По крайней мере я такое не нашел.


а это не оно случайно? trollface.png
http://php.net/manual/en/function.str-word-count.php

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 30/11/11 в 09:14       Ответить с цитатойцитата 

ibiz писал:
а это не оно случайно? trollface.png
http://php.net/manual/en/function.str-word-count.php

smail54.gif
то что нужно!!! Как я ее недоглядел icon_confused.gif
Громадное СПАСИБО!

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 30/11/11 в 11:09       Ответить с цитатойцитата 

Код: [развернуть]


вот только интересно как сделать одним разом вот это
Код: [развернуть]

тут нужно как то интервал указаь от не меньше или рано трем и не больше или ранов четырем. х.з. как сделать, сделал (3 => $n_word <=4) но ошибку выдало, значит неверный синтоксис. icon_confused.gif

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 30/11/11 в 11:56       Ответить с цитатойцитата 

сделай 2 условия в одном $n_word =3 или =4 trollface.png
Код:
elseif ($n_word == 3 || $n_word == 4)

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 12:18       Ответить с цитатойцитата 

Cthulhu way. icon_smile.gif

Код:
$file = "text.dat";

$ch = array(
    "vch.txt",
    "sch.txt",
    "nch.txt"
);

$file_array = file( $file );
$l = count( $file_array );
if( is_array( $file_array ) AND $l > 0 ) {
    for( $i = 0; $i < $l; $i++ ) {
        $n_word = str_word_count( $file_array[ $i ] );
        $j = ( $n_word == 3 OR $n_word == 4 ) + 2 * ( $n_word > 4 );
        $f = fopen( $ch[ $j ], "a" );
        fwrite( $f, $file_array[ $i ] );
        fclose( $f );
    }
}
else {
    echo( "Error Opening The File!" );
}


Последний раз редактировалось: Yacc (30/11/11 в 13:04), всего редактировалось 1 раз

5
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 12:29       Ответить с цитатойцитата 

Lexikon писал:
цикл можкт идти до нескольких тысяч повторов за раз.
Стоит ли после каждой записи в файл, закрывать его


Правильный вариант решения твоей задачи будет таким.

Код:
<?php

$dat_handle = fopen("txt.dat", "r") or die("can't open file txt.dat");
$vch_handle = fopen("vch.txt", "a") or die("can't open file vch.txt");
$sch_handle = fopen("sch.txt", "a") or die("can't open file sch.txt");
$nch_handle = fopen("nch.txt", "a") or die("can't open file nch.txt");

while (($dat_str = fgets($dat_handle)) !== false) {
   $word_count = str_word_count($dat_str);
   if ($word_count <= 2) {
      fwrite($vch_handle, $dat_str);
   } else if ($word_count == 3 || $word_count == 4) {
      fwrite($sch_handle, $dat_str);
   } else {
      fwrite($nch_handle, $dat_str);
   }
}

fclose($dat_handle);
fclose($vch_handle);
fclose($sch_handle);
fclose($nch_handle);


Цитата:
Cthulhu way. icon_smile.gif


Ещё один хороший пример максимально неэффективого, нелепого и непонятного кода. А потом удивляются, почему PHP-программистов называют быдлокодерами.

ВОСТОРГ ЗНАЧИТ BMW

7
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 12:34       Ответить с цитатойцитата 

samedi писал:
Правильный вариант решения твоей задачи будет таким.
...
Ещё один хороший пример максимально неэффективого, нелепого и непонятного кода. А потом удивляются, почему PHP-программистов называют быдлокодерами.

А когда файлов будет не 4, а 400? Тоже будешь все сразу открывать?

Иногда надо просто решать задачу, а не выёбываться. icon_smile.gif

6
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 12:47       Ответить с цитатойцитата 

Yacc писал:
А когда файлов будет не 4, а 400? Тоже будешь все сразу открывать?

Иногда надо просто решать задачу, а не выёбываться. icon_smile.gif

Это я выёбываюсь? facepalm.gif Редко пишу в подобных топиках, так как потом приходиться объяснять всю нелепость чужого кода, а автор так и останется при своём, кидая во всех говном.

Учи матчасть и еще раз внимательно прочитай ТЗ автора. Открывать и закрывать тысячи раз 3 (три) файла - это полный маразм.

Приведенное мной решение максимально простое, быстрое, эффективное и работает с любым размером исходного файла. Единственное ограничение - разумная длина строк.

Последний раз редактировалось: samedi (30/11/11 в 13:11), всего редактировалось 2 раз(а)

ВОСТОРГ ЗНАЧИТ BMW

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 12:56       Ответить с цитатойцитата 

samedi писал:
Учи матчасть и еще раз внимательно прочитай ТЗ автора.

Вот только не надо умничать, я тебя прошу. icon_smile.gif

Про fclose он вчера спрашивал, вчера ему и ответили. А сегодня вопрос был как написать условие, а не сайт газпрому. icon_smile.gif

5
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 13:13       Ответить с цитатойцитата 

Yacc писал:
А когда файлов будет не 4, а 400? Тоже будешь все сразу открывать?

Отвечу прямо на твой вопрос — нет. Учитывая следующую строку в твоем коде
Код:
$file_array = file( $file );

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

Мой вариант.

Код:
$string_list = file("txt.dat");
$count_list  = array();

while ($string = array_shift($string_list)) {
   $word_count = str_word_count($string);
   if (isset($count_list[$word_count])) {
      $count_list[$word_count][] = $string;
   } else {
      $count_list[$word_count] = array($string);
   }
}

foreach ($count_list as $count => $string_list) {
   file_put_contents("{$count}.txt", implode("\n", $string_list));
}


В этом случае расход памяти не превышает исходный файл. Работает быстро и эффективно для любого количества строк и любого количества конечных файлов. Хочешь возразить?

Yacc писал:
Вот только не надо умничать, я тебя прошу. icon_smile.gif
Про fclose он вчера спрашивал, вчера ему и ответили. А сегодня вопрос был как написать условие, а не сайт газпрому. icon_smile.gif


То есть, хочешь сказать, что когда писал свой код, не видел его кода? Может быть, если тебе нечего сказать и возразить, лучше промолчать, а не "выёбываться"?

ВОСТОРГ ЗНАЧИТ BMW

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 13:20       Ответить с цитатойцитата 

samedi писал:
Учитывая следующую строку в твоем коде

Да это не мой код, а ТС-а. Я, отвечая на его вопрос, по-сути, одну строку туда добавил, показывая возможности нестрогой типизации.

Твой код конечно лучше. Не лучший, а лучше, чем у ТС-а icon_smile.gif.

5
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 13:50       Ответить с цитатойцитата 

Yacc писал:
Твой код конечно лучше. Не лучший, а лучше, чем у ТС-а icon_smile.gif.

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

Очень расстроюсь, если лучшего кода от тебя не увижу. Хотя уверен в этом.

ВОСТОРГ ЗНАЧИТ BMW

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 30/11/11 в 15:02       Ответить с цитатойцитата 

вобще всем спасибо и ненужно тут ругаться.
т.к. я пока еще учусь я буду рассматривать и раскладывать для себя все возможные варианты.
Так что всем СПАСИБО!!! smail54.gif

PS ради интереса глянул сколько весит text.dat
в нем 10240 строк
и весит он 201кб
---
вот стата по моему коду
Код работал 97.00127196312с.
---
Yacc
Код работал 95.450877904892с.
samedi
Код работал 0.42947101593018с. - первый код (попробовал его погонять несколько раз, самый лучший результат был 0,15.....)
Код работал 2.2578520774841с. - второй код

---
я так предполочил что тут всё зависит от выбранного цикла, получается for делает много лишних телодвижений, хотя может я и не прав.

Нужно будет мне разобраться когда и какой цикл разумней применять в работе того или иного скрипта
for , while или do...while

---
Посоветуйте что почитать для развития знаний smail54.gif

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

1
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »