Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Настройки прав доступа по группам
  • Настройки прав доступа по каждой категории
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
 
 
 
 

 
 
Здесь скоро опять что то будет...
 
 
 
 
 
 
Loading

Вернуться   форум vBSupport.org > vBSupport.org > Гурушник > Кодер

Объявления
  • Изменения в правах
  • Каталог Фрилансеров
  • Добро пожаловать!
  • Premoderation
  • Новичкам!
  • For English speaking users
Ответ
 
Опции темы Опции просмотра
Старый 11.12.2009, 01:57   #1
Эксперт
 
Аватар для SMak044
Помогите разобраться с preg_match()

Вот уже 2 день безуспешно борюсь с preg_match()
Задача тривиальная, но то ли я туплю, то ли не понимаю как сделать.
У меня есть путь к каталогу, он может быть как в виндовс так и юникс виде
То есть
Вариант 1 - "C:\websites\homepages\www\includes\phpmorphy\dicts"
Вариант 2 - "/websites/homepages/www/includes/phpmorphy/dicts"
При этом в конце строки может быть, а может не быть "\" или "/" соответственно.

Хочу проверить наличие по этому пути файла.
Для этого я делаю проверку:
PHP код:
    $phpmorphy_dict_path 'C:\websites\homepages\www\includes\phpmorphy\dicts';

    if (
preg_match('/\//i'$phpmorphy_dict_path)) 
    {
      if (
preg_match('/\/$/i'$phpmorphy_dict_path)) 
      {
        
$slash '';
      } 
      else 
      {
        
$slash '/';
      }
    } 
    else if (
preg_match("/\\/i"$phpmorphy_dict_path))
    {
      if (
preg_match("/\\$/i"$phpmorphy_dict_path)) 
      {
        
$slash '';
      } 
      else 
      {
        
$slash = ;
      }
    } 
Но ничего не выходит постоянно ошибки.
Я пробовал и "\\\" использовать.

В результате мне нужно провести проверку:
PHP код:
    if(file_exists($phpmorphy_dict_path $slash "common_aut.ru_ru.bin")) { код 
В чем трабла?
  Ответить с цитированием
Рекламка
Реклама на форуме

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Тонкие настройки прав доступа
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Старый 11.12.2009, 03:30   #2
MDM
Эксперт
 
Аватар для MDM
Вот такой вариант набросал. Второе условие можно убрать, если слеши гарантированно присутствуют.
PHP код:
if ($i preg_match('#([\\\/]+).*([\\\/]?)$#iU'$path$matches) AND $matches[1] != $matches[2])
    
$slash $matches[1];
else if (
$i == 0// Слешей в строке не обнаружено, но файл отделить нужно.
    
$slash = (strtoupper(substr(PHP_OS03)) == 'WIN' '\\' '/');
else
    
$slash ''
Можно и без preg_match обойтись, движений побольше надо сделать, но выполняться, вероятно, будет быстрее.
  Ответить с цитированием
Старый 11.12.2009, 03:45   #3
SMak044
Эксперт
 
Аватар для SMak044
MDM, Вот спасибо. Никогда бы не додумался... наверно.
Ну раз пошла такая пьянка, то почему выражение $test = '\'; дает ошибку в php. Имеется ввиду, что как бы символ не закрыт кавычкой. Что php по умолчанию воспринимает \ как начало regexp токена?
  Ответить с цитированием
Старый 11.12.2009, 03:51   #4
MDM
Эксперт
 
Аватар для MDM
Цитата:
Сообщение от SMak044 Посмотреть сообщение
Что php по умолчанию воспринимает \ как начало regexp токена?
В этом случае PHP воспринимает кавычку как текст, а не как специальный символ.
google: экранирующий слеш.

Вот так правильно:
PHP код:
$test '\\'
  Ответить с цитированием
Старый 11.12.2009, 05:30   #5
kerk
k0t
 
Аватар для kerk
а если без регекспов?
PHP код:
$path getcwd();
$path str_replace('\\''/'$path);
$pos strrpos($path'/');
if(
$pos < (strlen($path)-1))
{
       
$path str_replace($path$path.'/'$path);
}
print 
$path
  Ответить с цитированием
Старый 11.12.2009, 11:17   #6
MDM
Эксперт
 
Аватар для MDM
kerk, тоже вариант.
У меня была задумка сравнить найденный в пути слеш с substr($path, -1) и подставить его при необходимости.

Кстати...
  Ответить с цитированием
Старый 11.12.2009, 13:19   #7
SMak044
Эксперт
 
Аватар для SMak044
kerk, Ха! отличное решение. В памятки!
  Ответить с цитированием
Старый 11.12.2009, 16:13   #8
kerk
k0t
 
Аватар для kerk
Цитата:
Сообщение от MDM Посмотреть сообщение
Проще ведь вот так
ну можно и так
как видишь, вариантов решения одной задачи множество
и чем дальше, тем проще и быстрей код
  Ответить с цитированием
Старый 11.12.2009, 18:19   #9
kerk
k0t
 
Аватар для kerk
хех =)
немного упростил и загнал в функцию
можно применять многократно
PHP код:
function get_slashpath($path)
{
     
$path str_replace('\\''/'$path);
     
$pos strrpos($path'/');
     if(
$pos < (strlen($path)-1))
     {
           
$path .= '/';
     }
     return 
$path;

может оно и ненадо, т.к. все, что делает эта функция. это добавляет слэш в конец
выполнение
PHP код:
print get_slashpath('/apache/www'); 
и
PHP код:
print get_slashpath('/apache/www/'); 
вернет одинаковое значение
можно и так использовать, если нужен путь (со слэшем в конце) до дир. из которой исполняется скрипт
PHP код:
print get_slashpath(getcwd()); 
  Ответить с цитированием
Старый 11.12.2009, 18:35   #10
SMak044
Эксперт
 
Аватар для SMak044
kerk, Очень полезно, особенно когда надо проверить есть ли конкретные файлы в каталоге.
  Ответить с цитированием
Ответ

Закладки

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



 
 

Текущее время: 16:52 25.05.2012. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot