[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подгрузка страниц и работа с строками
Dima85
Прошу прощенья, сразу не заметил, не в тот раздел форума написал.

Таким образом подгружаю html файлы на страницу.


<?php
$page = preg_replace( '#[^a-zA-Z0-9]#i', '', GET('page'));
$page = substr($page, 0, 25);
if ($page != '') {
$filename = 'pages/'.$page.'.html';
if (file_exists($filename)) {include($filename);} else {echo "<h4>Error 404</h4>";}
}
else {
include('pages/index.html');
}
?>

Знаю что это не совсем безопасно, но сейчас не об этом.
В первой строчке каждого подгружаемого файла есть такая строчка:

<h2 class="title">Название страницы</h2>


Вопрос: Помогите пожалуйста как вывести эту первую строчку точнее текст "Название страницы" в переменную. Которую в дальнейшем хочу использовать в <title></title>



Спустя 14 минут, 41 секунда (27.11.2010 - 19:30) DySprozin написал(а):
;;Знаю что это не совсем безопасно
точнее, _совсем_ не безопасно (; налицо нуль-байтовая уязвимость

;;Помогите пожалуйста как вывести эту первую строчку точнее текст
а раскурить preg_match религия не позволяет?)))

preg_match("#<h2[^>]*>([^<]+)</h2>#isU",join('',file($filename)),$buf);
echo $buf[1];

Спустя 27 минут, 35 секунд (27.11.2010 - 19:57) DySprozin написал(а):
>налицо нуль-байтовая уязвимость
пардон, не обратил внимание на preg_replace rolleyes.gif

Спустя 27 минут, 11 секунд (27.11.2010 - 20:24) Dima85 написал(а):
Хм, интересно решение. Все действительно работает. Даже и не знал о таком.
Я бы через fopen это делал.
Интересно а как сильно нагружает такая команда сервер по отношению с fopen. Что более ресурсоемко?

Что касается безопасности. DySprozin, но уязвимость то всеравно насколько я понимаю остается. Или я не прав? Выход из ситуации создать файлик с названием всех подгружаемых файлов, и в дальнейшем проверять есть ли файл в списке при загрузке.
Подскажите пожалуйста может есть какое-то еще решение, без дополнительных файлов.

Спустя 24 минуты, 36 секунд (27.11.2010 - 20:49) DySprozin написал(а):
;;Интересно а как сильно нагружает такая команда сервер по отношению с fopen.
;;Что более ресурсоемко?
практически одинаково... ведь страничка кода весит явно не больше метра? (;
с другой стороны, через fopen правильней, ибо не стоит по-хорошему нагружать сервер созданием массива из файла, а потом склеивания массива обратно в строку, просто join-метод быстрее в написании и где-то нагляднее (;

;;уязвимость то всеравно насколько я понимаю остается
;;создать файлик с названием всех подгружаемых файлов
мисьё знает толк в извращениях)) смысла ИМХО в этом нет - твой код безопасен (; вот только если ты применил модификатор "i", зачем тебе a-zA-Z? достаточно:

$page = preg_replace( '#[^A-Z0-9]#i', '', GET('page'));

Спустя 1 час, 43 минуты, 29 секунд (27.11.2010 - 22:32) Dima85 написал(а):
Цитата
мисьё знает толк в извращениях)

Спасибо что заценили. :)

Давайте тогда попробуем сделать через fopen, поправьте если я где-то ошибусь.


$page = preg_replace( '#[^a-zA-Z0-9]#i', '', GET('page'));
$page = substr($page, 0, 25);

if ($page != '') {
$filename = 'pages/'.$page.'.html';

if (file_exists($filename)) {
$pageopen = fopen($filename, "r");
Помогите пожалуйста с этим, здесь насколько я понимаю нужно сделать цикл.
Который запишет 1 строчьку в 1 переменную, ну и весь файл в другую. Как это сделать?
fclose($pageopen);
}

}

Спустя 11 минут, 17 секунд (27.11.2010 - 22:44) DySprozin написал(а):
Dima85
$page = preg_replace( '#[^a-zA-Z0-9]#i', '', GET('page'));
$page = substr($page, 0, 25);

if ($page != '') {
$filename = 'pages/'.$page.'.html';

if (file_exists($filename)) {
$pageopen = fopen($filename, "r");
/////зачем дробить сейчас? дробить будем потом, при разделении))
$txt="";
while(!feof($pageopen)) $txt.=fread($pageopen,4096); //считываем по 4 кб
////
fclose($pageopen);
}

}

Спустя 12 часов, 45 минут, 40 секунд (28.11.2010 - 11:29) Dima85 написал(а):
Спасибо. Таким образом мы в переменную $txt записали открываемый файл. Сейчас нам нужно взять первую строчку с файла.

    $pageopen = fopen($filename, "r"); 
/////зачем дробить сейчас? дробить будем потом, при разделении))
$txt="";
while(!feof($pageopen)) $txt.=fread($pageopen,4096); //считываем по 4 кб

$title = split('\n\r',$txt); //дробим нашу меременную
preg_match("#<h2[^>]*>([^<]+)</h2>#isU",$title[0],$buf); //достаем нужный текст с строчки
echo $buf[1];

fclose($pageopen);



Я бы пытался это делать так, или можно это все сделать как-то проще?

Спустя 18 минут, 18 секунд (28.11.2010 - 11:48) DySprozin написал(а):

...
//$title = split('\n\r',$txt); //вот эта строчка не нужна: сразу:
preg_match("#<h2[^>]*>([^<]+)</h2>#isU",$txt,$buf);
echo $buf[1];
...




Спустя 33 минуты, 56 секунд (28.11.2010 - 12:22) Dima85 написал(а):
Ясно. Спасибо Вам.

Спустя 17 минут, 54 секунды (28.11.2010 - 12:39) DySprozin написал(а):
Dima85
пожалуйста wink.gif

Спустя 6 минут, 27 секунд (28.11.2010 - 12:46) Dima85 написал(а):
Возник еще вопрос. В подгружаемых файлах иногда встречается такая строчка:
<?php echo $lang['skype'] ?>

Когда я делал инклюдинг это работало, сейчас же нет. Тоесть не выполняется php код.
По сути это не так уж и важно я могу этот php код убрать. Но все же интересно. А каким образом можно загружая данные в переменную и обрабатывать там найденный php код. На словах это звучит сложно. На деле так же? Необходимы пляски с бубном?

Спустя 2 дня, 47 минут, 40 секунд (30.11.2010 - 13:34) Dima85 написал(а):
Вопрос все еще актуален.

Спустя 33 минуты, 59 секунд (30.11.2010 - 14:08) inpost написал(а):
$page - связывай с БД, оттуда и бери title, desc, meta-keys.
а подключай файл через include.

Спустя 7 дней, 5 часов, 52 минуты, 21 секунда (7.12.2010 - 20:00) Dima85 написал(а):
preg_match("#<h2[^>]*>([^<]+)</h2>#isU",$txt,$buf);
echo $buf[1];


Скрипт подгружает страницу, в которой обрабатывает первую строчку:
<h2 class="move">Название</h2>



Но если туда добавить "<?php echo $taxifirm; ?>"
Пример:
<h2 class="move">Название <?php echo $taxifirm; ?></h2>

то $buf[1] вообще пустой, почему и что делать?

Спустя 12 дней, 2 часа, 45 минут, 46 секунд (19.12.2010 - 22:46) Хакон написал(а):
помогите!
на локальном хосте, сайт норм работает. Залил на хост платный, стал из базы данных только первые строки таблицы выводить. притом id определяется правильно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.