Как прикрутить PHP скрипт?

Тема в разделе "PHP", создана пользователем Ewsen, 26 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Ewsen

    Ewsen

    Регистр.:
    26 июл 2008
    Сообщения:
    163
    Симпатии:
    59
    Есть статический сайт на PHP инклудах. Задача - с генерировать мета теги keywords и description к каждой странице.
    Нашел такой скрипт для генерации таких мета-тегов:
    PHP:
    ### Функция создает список ключевых слов по тексту, а также краткое описание.
    ### Входящие параметры:
    ###   - $text - Сообственно текст для которого хотим получить ключевые слова
    ###   - $keywords - Дополнительные ключевые слова. Будут добавляться в начало полученных.
    ###   - $description - Дополнительное описание. Будет добавляться в начало полученного.
    ###                    (Учтите, описание не более 200 символов, поэтому полученное будет
    ###                     обрезаться с учетом длинны дополнительного)
    ###
    ### Выходные параметры:
    ###   - $meta['keywords'] - Соответственно ключевые слова
    ###   - $meta['description'] - и описание
    ###
    ### Использование:
    ###   - $meta=create_meta($text);
    ###   - $meta=create_meta($text, $keywords);
    ###   - $meta=create_meta($text, 'дополнительные,ключевые,слова');
    ###   - $meta=create_meta($text, $keywords, $description);
    ###   - $meta=create_meta($text, 'дополнительные,ключевые,слова', 'дополнительное,описание');
    function create_meta($text$keywords=''$description='') {
        
    ### Нормализация текста
        
    $text=trim(stripslashes(preg_replace('/[\r\n\t]/i'' 'strip_tags($text))));
        
    ### Формируем описание из текста, макс.200 за до первого знака пунктуации
        
    $idx=200;
        if(!empty(
    $description)) {
            
    $description=trim($description).' ';
            
    $idx-=strlen($description);
        }
        while(!
    in_array($text[$idx], array('.''!''?')))$idx--;
        
    $meta['description']=$description.substr($text0$idx+1);

        
    ### Загружаем таблицу общих слов и удаляем эти слова из текста
        
    $name='common-words.txt';
        if(
    file_exists($name)) {
            if(
    $file=fopen($name'r')) {
                
    $data='';
                while(!
    feof($file)){
                    
    $word=trim(fgets($file));
                    if(
    $word[0]=='#')continue;
                    
    $data.=' '.$word;
                }
                
    fclose($file);
                
    $data=str_replace(' ''|'trim($data));
            }
            
    $text=preg_replace('/\b'.$data.'\b/i'''$text);
        }

        
    ### Удаляем из текста все знаки препинаний и пунктуации и преобразуем в массив слов
        
    $text=split(' 'preg_replace('/[^\w]+/i'' '$text)); $data='';
        foreach(
    $text as $key=>$word) if(strlen($word)>4)$data.=' '.strtolower($word);
        
    $text=split(' 'trim($data)); $size=count($text);
        
    $arr1=array(); $arr2=array(); $arr3=array();

        
    ### Строим массив слов отсортированный по частоте вложений в тексте
        
    for($i=0$i<$size$i++) {
            
    $word=$text[$i];
            if(
    $arr1[$word])$arr1[$word]++; else $arr1[$word]=1;
        }
        
    arsort($arr1);
        
    ### Строим массив фраз состоящих из двух слов отсортированный по частоте вложений в тексте
        
    for($i=0$i<$size-1$i++) {
            
    $word=$text[$i].' '.$text[$i+1];
            if(
    $arr2[$word])$arr2[$word]++; else $arr2[$word]=1
        }
        
    arsort($arr2);
        
    ### Строим массив фраз состоящих из трех слов отсортированный по частоте вложений в тексте
        
    for($i=0$i<$size-2$i++) {
            
    $word=$text[$i].' '.$text[$i+1].' '.$text[$i+2];
            if(
    $arr3[$word])$arr3[$word]++; else $arr3[$word]=1;
        }
        
    arsort($arr3);

        
    ### Выбираем 15 первых слов с максимальной частотой вложений
        
    $data=array(); $i=0;
        foreach(
    $arr1 as $word=>$count) {
            
    $data[$word]=$count;
            if(
    $i++==16)break;
        }
        
    ### Выбираем 8 первых фраз состоящих из двух слов с максимальной частотой вложений
        
    $i=0;
        foreach(
    $arr2 as $word=>$count) {
            
    $data[$word]=$count;
            if(
    $i++==8)break;
        }
        
    ### Выбираем 4 первых фраз состоящих из трех слов с максимальной частотой вложений
        
    $i=0;
        foreach(
    $arr3 as $word=>$count) {
            
    $data[$word]=$count;
            if(
    $i++==4)break;
        }
        
    arsort($data); $text='';

        
    ### Переводим массив фраз в текст, опять таки с учетом частот вложений
        
    foreach($data as $word=>$count$text.=','.$word$text=substr($text1);
        if(!empty(
    $keywords))$keywords=preg_replace('/,$/i'''$keywords).',';
        
    $meta['keywords']=$keywords.$text;

        
    ### Возвращаем полученный результат
        
    return $meta;
    }
    источник Перейти по ссылке
    Необходимо чтобы при обращении к странице вызывался скрипт, получал данные в переменную $text из этой же страницы. А страница выводилась с уже сгенерированными мета-тегами.
    Возможно ли такое?
    И еще подскажите сильно ли это будет грузить сервер?
     
  2. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
  3. Ewsen

    Ewsen

    Регистр.:
    26 июл 2008
    Сообщения:
    163
    Симпатии:
    59
    А можно по подробнее. А то я не силен в программировании. Как это применить на сайте. Например если скрипт который выше находиться в отдельном файле, как правильно применить этот callback.
    Набросьте кто может пример плз:thenks:
    И подскажите по нагрузке на сервер. Может это вообще плохая затея и сильно будет грузить сервер?
    Может стоит сделать ограничение в скрипте на количество обрабатываемых символов? (На случай если контента на странице слишком много)
     
  4. Mongolor

    Mongolor

    Регистр.:
    5 дек 2007
    Сообщения:
    157
    Симпатии:
    29
    Ну начнем с того, а надо ли оно тебе? т.к. метатеги дескрипшн, а темболее кейвордс уже фактически не используются.
    Ну а по делу:
    Когда ты делаешь ob_start ты посылаешь все содержимое страницы, которое выводиться, в буфер, потом ты можешь засунуть этот буфер в свой скрипт, получить метатеги и вывести этот буфер на страницу.

    Пример кода
    PHP:
    <?php

    function callback($buffer)
    {
      
    // replace all the apples with oranges
      
    return (str_replace("apples""oranges"$buffer));
    }

    ob_start("callback");

    ?>
    <html>
    <body>
    <p>It's like comparing apples to oranges.</p>
    </body>
    </html>
    <?php

    ob_end_flush
    ();

    ?>

    //Результатом выполнения скрипта будет:

    <html>
    <body>
    <p>It's like comparing oranges to oranges.</p>
    </body>
    </html>

    PS: Наверно у нас разная документация.
     
  5. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    PHP:
    function callback($buffer

      
    // replace all the apples with oranges 
      
    return create_meta($buffer).$buffer;
    }
    //.....
    ob_start("callback");//желатьельно вставить между тегами <head>, где обычно вставляеются meta
    //......

    ob_end_flush();//вставить после всего вывода.
     
  6. krenkus

    krenkus Создатель

    Регистр.:
    10 мар 2008
    Сообщения:
    37
    Симпатии:
    4
    Э, слюшай, зачем огород городить :thenks: не нужен тут каллбак...
    здесь же функций, самый обычный функций!
    Есть конечно сложный путь - написать скрипт и вставить его в каждый файл, но все равно это геморно!
    лучше всего сделать так:
    1. в .htaccess вписать строку:

    RewriteRule ^(.*)$ meta.php?route=$1 [L,QSA]

    а в meta.php
    <?php
    include "твой скипт генерации";

    if( !file_exists( __DIR__ . $_GET['route'] ) {
    die("404 - Page not found");
    }

    $text = file_get_contents( __DIR__ . $_GET['route'] );
    $meta = create_meta( $text );

    /*
    вот тут, в зависимости от твоего текста заменить что-то на сформированный данные, например
    */
    $metaHtml = "<meta name=\"keywords\" content=\"{$meta['keywords']}\">";
    $metaHtml .= "<meta name=\"description\" content=\"{$meta['description']}\">";

    $text = str_replace("</head>", $metaHtml . "\n</head>", $text );

    echo $text;

    ?>

    Ну вот примерно так в общих чертах.
     
Статус темы:
Закрыта.