Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: обработка путей

Сообщения:  [1-4] 

 
 автор: _ _   (04.04.2008 в 21:54)
 
   для: ботродье   (04.04.2008 в 07:20)
 

<?
$BASE 
'/home/site/www/'// DOCUMENT_ROOT
$addr preg_split('#(?<=/)#'$BASE, -11);

$str '../RAZ\\\\../DVA/TRI/.\\FOR/5../6';

function 
xxx($match)
{
 global 
$addr;
 
 switch(
$match[1]) {
    case 
'.':  break;
    case 
'..':
     if (! 
array_pop($addr)) exit('превышены допустимые переходы вверх');
    break;
    default:
 if (isset(
$match[2]))  $addr[] = $match[1] .= '/'
 else 
$addr[] = $match[1];
 }
}
preg_replace_callback('#([^/\x5c]*)([/\x5c]+)?#''xxx'$str);

$addr &= $str implode(''$addr);
print_r($str);

if (!
ereg("^$BASE"$str)) exit('<hr> нет доступа');
?>

   
 
 автор: ботродье   (04.04.2008 в 07:20)
 
   для: ./\.   (03.04.2008 в 23:52)
 

да

   
 
 автор: ./\.   (03.04.2008 в 23:52)
 
   для: ботродье   (03.04.2008 в 18:16)
 

какой интересно правильный путь понимается под "dir0 /../.images/../.dir. ./files/dir2/./../q werty/." ?

/files/qwerty/ ?

   
 
 автор: ботродье   (03.04.2008 в 18:16)
 
 

вобщем есть путь покарявленый типа:

$path = "dir0/..//.images/..//\/.dir../\/files\dir2/.\/\\/..\/qwerty/."; 

в ряльной жизни канешно же такого возникнуть не может)) но все же..
надо его исправить на такой :

$path2 = "dir0/../.images/../.dir../files/dir2/./../qwerty/.";

для этого я воспользовался таким способом:

$path2 = preg_replace("/\\\+/s","/",$path);
$path2 = preg_replace("/\\/+/s","/",$path);

тут сразу вопрос: как это можно сделать поэлегантней?..
дело в том что для обхода структур типа: "\/\/\///\\\//\/\\//\/\/" пришлось разбить на две строки...
а вот как убирать точки ума не приложу..
т.е. их нужно не просто убрать а соблюсти правилинсть пути..

   

Сообщения:  [1-4] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования