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

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

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Проверка корректности имени файла.
 
 автор: lokispb   (27.01.2006 в 02:21)   письмо автору
 
 

Здравствуйте!

Возникла необходимость дать пользователю возможность
переименовывать некоторые файлы на сервере.
Нужно проверить допустимость вводимого пользователем имени,
а именно, исключить возможность имени: "../../somedir/some.file", кроме того,
исключить наличие символов \/:*?"<>|
Лучше всего, как мне кажется, использовать регулярное выражение.
Что-то вроде:


<?
//Список недопустимых символов
$regex='[чёрный список символов]';
//Если имя файла плохое - стоп и ругаемся
if (preg_match($regex,$newname)){die('Недопустимое имя файла!');} 
//Заменяем пробелы на подчёркивания
$newname=str_replace(' ','_',trim($newname));
//Переименовываем, сообщаем результат.
if (@rename($path.$oldname$path.$newname)){echo"Файл переименован успешно.";}
else{echo
"Не удалось переименовать.";}
?>


Проблема с [чёрным списком символов]. Ведь большинство этих символов являются
спецсимволами PCRE. При экранировке вручную запутался. Чегой-то голова в третьем
часу ночи не варит...
Также пытался использовать


<?
$regex
=preg_quote ('\/:*?"<>|'"/");
//и
$regex=preg_quote ('\\/:*?"<>|'"/");
?>


Не работает.

Как правильно написать рег. выражение для отлова \/:*?"<>| ?

Спасибо.

   
 
 автор: cheops   (27.01.2006 в 13:32)   письмо автору
 
   для: lokispb   (27.01.2006 в 02:21)
 

А вы зря, кстати, preg_quote() используете, лучше от греха все запрещённые символы удаляйте
<? 
  
//Список недопустимых символов 
  
$regex='#[\\/:\*\?"<>\|]#'
  
//Если имя файла плохое - стоп и ругаемся 
  
if (preg_match($regex,$newname)){die('Недопустимое имя файла!');} 
  
//Заменяем пробелы на подчёркивания 
  
$newname=str_replace(' ','_',trim($newname)); 
  
//Переименовываем, сообщаем результат. 
  
if (@rename($path.$oldname$path.$newname)){echo"Файл переименован успешно.";} 
  else{echo
"Не удалось переименовать.";} 
?>

preg_quote() лучше не использовать, а если использовать, то так
<? 
  $newname 
preg_quote($newname"\\/:*?"|"); 
?>

   
Rambler's Top100
вверх

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