АРМАДА
php, недо-дорген, как ему вытащить текстовую переменную
На страницу 1, 2  След.
Новая тема Написать ответ Advanced Hosters - профессиональный хостинг

Yabuti
V.I.P.
Зарегистрирован: 28.11.2008
Сообщений: 16263
Contest (Сумма: 2)
Обратиться по нику
# Добавлено:Пн Май 11, 2009 9:49 pmДобавить в избранноеОтветить с цитатой
Приветствую!
Ребят, кому не сложно, подскажите, что я неправильно делаю.
мини-ТЗ:
1) Есть дорген, генерящий доры, в которых текст идет без смысла - отрезанный кусок слов.
2) Хочу исправить этот момент - берется книжка в TXT, с абзацами и переносами, в общем, нормальная такая книжка. И нужно, чтобы дорген отрезал часть из книги, скажем, 10 Кб, и прямиком, со всем форматированием (абзацы и переносы) - вставлял в генерируемую страницу.

Посмотрите, вот код который сейчас:
Код:
/* generate pages */
      reset($p);
      @mkdir('./out/dimg',0777);
      $tfp = @fopen('./db/[B]sample.txt'[/B],'r') or print('Cannot open ./db/sample.txt ... ignoring {TEXT} <br>');
      while(list($k,$v)=each($p)) {
         $k++;
         $name=trim(translate($v));

         $tpl_out=str_replace('{TITLE}',$v,$tpl);
         $tpl_out=str_replace('{KEYWORDS}',ereg_replace("(\r\n|\n|\r)","",$keywords),$tpl_out);
         $tpl_out=str_replace('{DESC}',ereg_replace("(\r\n|\n|\r)","",implode(' ',$keys)),$tpl_out);
         $tpl_out=str_replace('{LINK}',$l,$tpl_out);
         $tpl_out=str_replace('{I}',$k,$tpl_out);
         $tpl_out=str_replace('{ENTER}',trim($_POST['enter']),$tpl_out);

         @copy('./db/sample.gif','./out/dimg/'.$name.'.gif');
         @copy('./db/sample.gif','./out/dimg/'.$name.'.jpg');
         $tpl_out=str_replace('{IMG}',$name,$tpl_out);
//----- ЭТОТ КУСОК МЕНЯ УБИВАЕТ - НЕ ХОЧЕТ БРАТЬ НОМАЛЬНЫЙ ТЕКСТ -----
         if ($tfp) {
            $buffer=''; $str='';
            if (feof($tfp)) {fseek($tfp,0);}
            while(trim($str) == '' && $buffer=='') {
               $str = trim(fgets($tfp, 4096));
               if ($str) {$buffer.=$str;}
               if (feof($tfp)) {fseek($tfp,0);}
            }
            $tpl_out=str_replace('{TEXT}',$buffer,$tpl_out);
// ----- КОНЕЦ КУСОЧКА ----- КОНЕЦ КУСОЧКА ----- КОНЕЦ КУСОЧКА -----
         }

         $fp=fopen('./out/'.$name.'.html','w');
         fwrite($fp,$tpl_out);
         fclose($fp);
         print 'Создание страниц(ы) успешно завершено. Результат: '.$name.'.html?lt;br>';
         flush();
      }
      if ($tfp) {fclose($tfp);}


Проблему выделил жирным шрифтом - и ставил размер буфера не 4 Кб, а больше, но дорген тупо берет только первую строку (до End of String) и все, дальше не берет.

Буду очень благодарен, кто посоветует, что здесь не так. Или может по-другому сделать.
Как модифицирую - выложу в свободный доступ.

Спасибо!
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
--

DrKronos
SEO-доктор
Зарегистрирован: 11.03.2008
Сообщений: 13024
Moder (Сумма: 1)
Обратиться по нику
# Добавлено:Пн Май 11, 2009 10:15 pmОтветить с цитатой
Где проблема выделенная жирным шрифтом?
Oscar the grouch Здесь могла быть ваша реклама

kaptmeh +
Опытный
Зарегистрирован: 27.02.2009
Сообщений: 102
Обратиться по нику
# Добавлено:Пн Май 11, 2009 10:21 pmОтветить с цитатой
Извиняйте Пых Пых пока что не курил, так что помогу тока в теории.

Как ты говориш
Цитата:
дорген тупо берет только первую строку

Это значит что он читает до символа конца строки. Здесь решения вижу два, либо сделай цикл который читает несколько строк и записывает их в буфер, но тут у тебя вариант с форматированием будет. Посмотри в доке там должно быть написан метод/функция с указанием до какого символа читать (например читать не до конца строки а до первого пробела). Второй вариант должна быть функция которая читает определенное кол-во байт, но тут проблема может быть что считает она тебе их в двоичном формате.

Как говорил выше именно практикой помочь не могу т.к. пишу на С++, пых пых тоже скоро курить буду.


Кстати ты там функцию юзаеш fgets если я не ошибаюсь то в си она служит для получения строки, а строка у нас кончается \n поэтому у тебя и береться только первая строчка. if (feof($tfp)) {fseek($tfp,0);} и перевод каретки тут не совсем понятен ...

ЗЫ Это уже придирки, но делай одну операцию на одной строке, намного код читабельнее будет, и не забывай ставить комменты Shout
Code monkey Razz

Yabuti
V.I.P.
Зарегистрирован: 28.11.2008
Сообщений: 16263
Contest (Сумма: 2)
Обратиться по нику
# Добавлено:Пн Май 11, 2009 11:17 pmОтветить с цитатой
DrKronos, извиняйте, не жирным шрифтом, а линиями:
//----- ЭТОТ КУСОК МЕНЯ УБИВАЕТ - НЕ ХОЧЕТ БРАТЬ НОМАЛЬНЫЙ ТЕКСТ -----
...
// ----- КОНЕЦ КУСОЧКА ----- КОНЕЦ КУСОЧКА ----- КОНЕЦ КУСОЧКА -----

kaptmeh, спасибо за совет!
Сейчас попробую сделать, если пойдет -выложу скрипт для всех - он очень полезный.
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
--

Yabuti
V.I.P.
Зарегистрирован: 28.11.2008
Сообщений: 16263
Contest (Сумма: 2)
Обратиться по нику
# Добавлено:Пн Май 11, 2009 11:52 pmОтветить с цитатой
Ура! Работает!
Сделал, вот таким образом:
Код:
$buffer=file_get_contents('./db/sample.txt');
$tpl_out=str_replace('{TEXT}',$buffer,$tpl_out);


Теперь в переменную $buffer записывается весь файл sample.txt и дает его в генерируемую страницу.

Но появилась новая проблема - не сохраняется форматирование текстовых файлов, которые берутся для работы скриптом =((
Ребята, подскажите, как можно обработать TXT, чтобы в нем появились html-теги - где абзац, там <br>, где отступ, там спецсимовол пробела - никогда не видел таких скриптов\программ, но, может они существуют в природе? В голову только приходит вставить в WYSiWYG-редактор WordPress'a в визуальном режиме, а потом переключить на HTML-отображение и скопировать - но геммор еще тот.. Вот был бы скриптик - ему TXT-файл дал, а он все теги проставил..

Очень, очень надеюсь на Ваши подсказки!
Спасибо!
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
--

kaptmeh +
Опытный
Зарегистрирован: 27.02.2009
Сообщений: 102
Обратиться по нику
# Добавлено:Пн Май 11, 2009 11:55 pmОтветить с цитатой
Кстати ещё как варинат може посимвольно читать файл (но это не особо оптимальный вариант). Попробуй найти функцию читающую определенное кол - во данных (в С++ эта функция называлась read). А функция чтения чтения до определенного значения вроде обзывалась Get (там указываеш какое значение, либо какой то символ, либо как говорил конец строки или пробел).

ЗЫ Опять же все это актуально для си для пых пыха не знаю точно Smile
Code monkey Razz

kaptmeh +
Опытный
Зарегистрирован: 27.02.2009
Сообщений: 102
Обратиться по нику
# Добавлено:Вт Май 12, 2009 12:06 amОтветить с цитатой
Код:
$buffer=file_get_contents('./db/sample.txt');

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

Ну так ты прочитай какое то кол-во информации потом найди в ней символ(ы) абзаца например, и замени на <br>. Там смотри если у тебя например абзац выделен тремя переходами на новую строку то ищи строчку что тои типа "\n\n\n" и меняй её на <br>. Табуляция вроде тоже каким то спец символом обозначается, найди его и замени. Smile


ЗЫ За грамматику извиняйте, я давно не спал Smile
Code monkey Razz

Yabuti
V.I.P.
Зарегистрирован: 28.11.2008
Сообщений: 16263
Contest (Сумма: 2)
Обратиться по нику
# Добавлено:Вт Май 12, 2009 12:17 amОтветить с цитатой
ой-ей! это же придется побитово рассматривать структуру файлов!
А есть какая-нибудь готовая программа?

PS Поэкспериментировал с file_get_contents(), в нее можно подставлять URL'ы!
И тут идея в голову пришла - а что, если сделать грабер чужих библиотек?
1) RSS-фиды скапливаются все в один текстовый файл на сервере;
2) Крон раз в день пинает скрипт, ищущий ссылки на файлы с текстами, книжками, статьями;
3) Потом Крон пинает скрипт из этой темы, который посредством file_get_contents() грабит ту страничку\файл, генерит свою, возможно даже синонимизировать походу действия, и заливает к себе.
4) Последним Крон пинает скрипт, который смотрит все добавленные в папку books страницы, генерит из их названий карту и рассылает ссылку на нее по списку своих ГСов.

Как Вам схема? По-моему, просто супер! :thup:
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
--

kaptmeh +
Опытный
Зарегистрирован: 27.02.2009
Сообщений: 102
Обратиться по нику
# Добавлено:Вт Май 12, 2009 12:21 amОтветить с цитатой
Всмысле побитово разбирать ?

ЗЫ Насчет схемы вроде ты щас описал создатель сплогов если я не ошибаюсь.
Code monkey Razz

Yabuti
V.I.P.
Зарегистрирован: 28.11.2008
Сообщений: 16263
Contest (Сумма: 2)
Обратиться по нику
# Добавлено:Вт Май 12, 2009 12:23 amОтветить с цитатой
kaptmeh, Вы правы, если будет большой файл, то комп поперхнется. Но у меня такое специальное ТЗ, что на страничке максимум 100 Кб текста, больше нельзя, поэтому я так написал. Да и не умею я делать побайтово, проспал на той паре, когда объясняли, наверное r5

Теперь нужен такой скрипт\программа:
Берет крупный TXT-файл (книжку), проставляет в ней HTML-теги, а затем режет по заданному размеру на кусочки.
Такая программа - это предел моих мечтаний!

Даже в Гугле не получается сформулирвоать запрос на такое - может кто пользуется подобным или вручную уже никто не работает? Smile
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
--

creator123
Гуру
Зарегистрирован: 25.07.2007
Сообщений: 1145
Обратиться по нику
# Добавлено:Вт Май 12, 2009 12:29 amОтветить с цитатой
$text=str_replace(chr(13),'<br/>',$text);
$text=str_replace(chr(9),'&nbsp;',$text);
<----- если понравился пост, жмакай сюды <-----

kaptmeh +
Опытный
Зарегистрирован: 27.02.2009
Сообщений: 102
Обратиться по нику
# Добавлено:Вт Май 12, 2009 12:30 amОтветить с цитатой
Да ладно вам не изобретайте велосипед (Если можно меня на ВЫ не называйте, меня это бесит сильно).

Санала проверка на размер файла, если он меньше 100кбайт то отсалвяеш свою схему, больше 100кбайт читай буфер, доки глянь полюбому должна быть функция что то типа read или get (это у пых пыхеров узнай точнее). Далее функцией поиска подстстроки в строке (Это например тебе слово "это" нужно найти в предыдушем предложении Smile ) ищиш (в С это strstr, в С++ это find у контейнера стринг) обозначение форматирования (весь отстой что если не стандартный формат то оно может быть любым) и заменяеш их на HTMLвские, далее сохраняем получаеш свой лисапед Smile :thup: Посмотри доки по пых пых функциям, такие функции там полюбому должны быть, они впринцепи во всех языках как основные числяться.


Последний раз редактировалось: kaptmeh (Вт Май 12, 2009 12:31 am), всего редактировалось 1 раз
Code monkey Razz

Yabuti
V.I.P.
Зарегистрирован: 28.11.2008
Сообщений: 16263
Contest (Сумма: 2)
Обратиться по нику
# Добавлено:Вт Май 12, 2009 12:30 amОтветить с цитатой
Ну, индикатор EOF, EOS - чтобы их программа видела - нужно, наверное, каждый бит перебирать? Извиняйте, прогер ужасный, знаю только Turbo Pascal хорошо, а в Php меняю функции руководствуясь только логикой - если не одно, так другое =)

На сплог похоже, но, вроде, там грабятся RSS-фиды, а здесь скрипт будет грабить, синонимизировать и создавать свои странички, в итоге получаем рерайченный говно-контент, но не неуник! =) То есть, владельцы наехать не смогут.. наверное..
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
--

Yabuti
V.I.P.
Зарегистрирован: 28.11.2008
Сообщений: 16263
Contest (Сумма: 2)
Обратиться по нику
# Добавлено:Вт Май 12, 2009 12:44 amОтветить с цитатой
Creator, ты великий, ВЕЛИКИЙ программист!
Получилось!
Вот так:
Код:
$buffer=file_get_contents('./db/sample.txt');
$buffer=str_replace(chr(13),'<br/><br/>',$buffer);
$buffer=str_replace(chr(9),'&nbsp;&nbsp;',$buffer);
$tpl_out=str_replace('{TEXT}',$buffer,$tpl_out);


И все очень красиво и отформатировано.
Ура!
Огромное тебе спасибо!


Последний раз редактировалось: Yabuti (Вт Май 12, 2009 12:48 am), всего редактировалось 1 раз
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
--

kaptmeh +
Опытный
Зарегистрирован: 27.02.2009
Сообщений: 102
Обратиться по нику
# Добавлено:Вт Май 12, 2009 12:47 amОтветить с цитатой
Это не мне это creator123 :thup: тебе сказал Smile Я тут не причем.
Code monkey Razz
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





Генеральный спонсор



Партнеры