Таким образом подгружаю 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 религия не позволяет?)))
preg_match("#<h2[^>]*>([^<]+)</h2>#isU",join('',file($filename)),$buf);
echo $buf[1];
Спустя 27 минут, 35 секунд (27.11.2010 - 19:57) DySprozin написал(а):
>налицо нуль-байтовая уязвимость
пардон, не обратил внимание на preg_replace
пардон, не обратил внимание на preg_replace
Спустя 27 минут, 11 секунд (27.11.2010 - 20:24) Dima85 написал(а):
Хм, интересно решение. Все действительно работает. Даже и не знал о таком.
Я бы через fopen это делал.
Интересно а как сильно нагружает такая команда сервер по отношению с fopen. Что более ресурсоемко?
Что касается безопасности. DySprozin, но уязвимость то всеравно насколько я понимаю остается. Или я не прав? Выход из ситуации создать файлик с названием всех подгружаемых файлов, и в дальнейшем проверять есть ли файл в списке при загрузке.
Подскажите пожалуйста может есть какое-то еще решение, без дополнительных файлов.
Я бы через fopen это делал.
Интересно а как сильно нагружает такая команда сервер по отношению с fopen. Что более ресурсоемко?
Что касается безопасности. DySprozin, но уязвимость то всеравно насколько я понимаю остается. Или я не прав? Выход из ситуации создать файлик с названием всех подгружаемых файлов, и в дальнейшем проверять есть ли файл в списке при загрузке.
Подскажите пожалуйста может есть какое-то еще решение, без дополнительных файлов.
Спустя 24 минуты, 36 секунд (27.11.2010 - 20:49) DySprozin написал(а):
;;Интересно а как сильно нагружает такая команда сервер по отношению с fopen.
;;Что более ресурсоемко?
практически одинаково... ведь страничка кода весит явно не больше метра? (;
с другой стороны, через fopen правильней, ибо не стоит по-хорошему нагружать сервер созданием массива из файла, а потом склеивания массива обратно в строку, просто join-метод быстрее в написании и где-то нагляднее (;
;;уязвимость то всеравно насколько я понимаю остается
;;создать файлик с названием всех подгружаемых файлов
мисьё знает толк в извращениях)) смысла ИМХО в этом нет - твой код безопасен (; вот только если ты применил модификатор "i", зачем тебе a-zA-Z? достаточно:
;;Что более ресурсоемко?
практически одинаково... ведь страничка кода весит явно не больше метра? (;
с другой стороны, через 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
пожалуйста
пожалуйста
Спустя 6 минут, 27 секунд (28.11.2010 - 12:46) Dima85 написал(а):
Возник еще вопрос. В подгружаемых файлах иногда встречается такая строчка:
Когда я делал инклюдинг это работало, сейчас же нет. Тоесть не выполняется php код.
По сути это не так уж и важно я могу этот php код убрать. Но все же интересно. А каким образом можно загружая данные в переменную и обрабатывать там найденный php код. На словах это звучит сложно. На деле так же? Необходимы пляски с бубном?
<?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.
а подключай файл через 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 определяется правильно.
на локальном хосте, сайт норм работает. Залил на хост платный, стал из базы данных только первые строки таблицы выводить. притом id определяется правильно.