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

Статус
В этой теме нельзя размещать новые ответы.

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($text, 0, $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($text, 1);
    if(!empty($keywords))$keywords=preg_replace('/,$/i', '', $keywords).',';
    $meta['keywords']=$keywords.$text;

    ### Возвращаем полученный результат
    return $meta;
}

Необходимо чтобы при обращении к странице вызывался скрипт, получал данные в переменную $text из этой же страницы. А страница выводилась с уже сгенерированными мета-тегами.
Возможно ли такое?
И еще подскажите сильно ли это будет грузить сервер?
 
А можно по подробнее. А то я не силен в программировании. Как это применить на сайте. Например если скрипт который выше находиться в отдельном файле, как правильно применить этот callback.
Набросьте кто может пример плз:thenks:
И подскажите по нагрузке на сервер. Может это вообще плохая затея и сильно будет грузить сервер?
Может стоит сделать ограничение в скрипте на количество обрабатываемых символов? (На случай если контента на странице слишком много)
 
Ну начнем с того, а надо ли оно тебе? т.к. метатеги дескрипшн, а темболее кейвордс уже фактически не используются.
Ну а по делу:
Когда ты делаешь 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: Наверно у нас разная документация.
 
PHP:
function callback($buffer) 
{ 
  // replace all the apples with oranges 
  return create_meta($buffer).$buffer;
}
//.....
ob_start("callback");//желатьельно вставить между тегами <head>, где обычно вставляеются meta
//......

ob_end_flush();//вставить после всего вывода.
 
используем callback, в котором и правим выводимй текст
Э, слюшай, зачем огород городить :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;

?>

Ну вот примерно так в общих чертах.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху