Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти символ в массиве 
V
    Опции темы
Gold Dragon
  Дата 4.1.2013, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



У меня есть файл с SQL-запросами
я его парсю следующем образом:
- загружаю в массив файл
- перебираю массив и удаляю всё лишнее. вернее продолжаю дальнейшую обработку если это "нормальная" строка
- далее соединяю запросы и помещаю их в новый массив, деля по точке с запятой в конце..

И во тут то проблема

на локалке я определяю что последний символ в значении массива точка с запятой

Проверял регуляркой
Код

if(preg_match_all('#;[\s]*$#', $value)){

и такой
Код

if(preg_match_all('#;$#', rtrim($value))){

Всё работает!

Но на сервере отказывается работать.. не могу понять проблему...

Кто с этим сталкивался?

или как ещё можно проверить?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
patap
Дата 4.1.2013, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 5
Всего: 40



попробуй с модификатором D

Код

if(preg_match_all('#;[\s]*$#D', $value)){



http://php.net/manual/ru/reference.pcre.pa...n.modifiers.php
http://blog.php-security.org/archives/76-H...ch-filters.html


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Gold Dragon
Дата 4.1.2013, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



не получается... Да и почему на локалке и у хостинга различия?

как вариант
Код

if(strrpos($value,';') == (strlen(trim($value))-1)){




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 4.1.2013, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



Цитата(Gold Dragon @  4.1.2013,  14:16 Найти цитируемый пост)
- загружаю в массив файл

с помощью file?
В этом случае последние символы строк содержать символы перевода строк.
так что проверка может быть быть какой-то такой (добавлен модификатор m)
Код

if(preg_match_all('#;\s*$#m', $value)){


можно сравнить версии pcre на локалке и сервере с помощью phpinfo. Искать по слову `pcre` в выводе. У меня на докалке 
Цитата

PCRE Library Version    8.12 2011-01-15

хотя это вряд ли...

Еще бывают случаи, когда символ ; находится в строковом поле. Единственная надежда на то, что запрос создается не вручную, в этом случае символы перевода строк в строковом значении экранируются и не мешают регулярке.

Можно распечатать неудачно распознанные строки с помощью json_encode. Непечатные символы в этом случае выводятся в виде шестнадцатеричных кодов, их видно.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 4.1.2013, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



Цитата(ksnk @  4.1.2013,  16:18 Найти цитируемый пост)
с помощью file?
Да

Цитата(ksnk @  4.1.2013,  16:18 Найти цитируемый пост)
В этом случае последние символы строк содержать символы перевода строк.
так что проверка может быть быть какой-то такой (добавлен модификатор m)
Цитата

В случае, если обрабатываемый текст не содержит символов перевода строки, либо шаблон не содержит метасимволов '^' или '$', данный модификатор не имеет никакого эффекта.


так \s должен по любому все табуляции, пробелы и каретки учитывать.. в массив загоняю file, значит в конце то по любому каретка стоит.. И собственно почему rtrim() не работает то
                        


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 4.1.2013, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



так... файл я загружаю этим
Код

$sql_array = file(_JLPATH_ROOT . '/installation/sql/joostina.sql', FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);

вот пример того, что выдаёт мне json_encode. Последняя именно нужная мне строка
Цитата

"  KEY `published` (`published`)"

") ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;"


PS
какая то тупость... ничего не понимаю...

На всякий случай вот мой код
Код

$sql_array = file(_JLPATH_ROOT . '/installation/sql/joostina.sql', FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);

$sql_tmp = '';
$sql_count = 0;
foreach($sql_array as $value){
     // тут убираю комментарии и тому подобное
    $b = preg_match_all('#(^[\s]*$|^[\s]*--|^[\s]*\/\*!|^[\s]*drop|^[\s]*\#)#i', $value);
    if(!$b){
        $sql_tmp = $sql_tmp . $value;
        if(preg_match_all('#;\s*$#', $value)){
            //if(strrpos($value,';') == (strlen(trim($value)))-1){
            $sql_count++;
            $sql_tmp = str_replace('#__', $DBPrefix, $sql_tmp);
            if($database->query($sql_tmp)){
                $info['content'] .= '<p>SQL-запрос #'.$sql_count.' - <b><span style="color: #090">ОК</span></b></p>';
            }else{
                $error[] = 'Ошибка загрузки SQL-запроса #'.$sql_count.'<br>'
                    . $database->error;
            }
            $sql_tmp = '';
        }
    }
}



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 4.1.2013, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



Цитата(Gold Dragon @  4.1.2013,  17:45 Найти цитируемый пост)
preg_match_all('#(^[\s]*$|^[\s]*--|^[\s]*\/\*!|^[\s]*drop|^[\s]*\#)#i', $value)


preg_match_all нужно 3 параметра.
Не в этом дело?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 4.1.2013, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



1. у меня не выполняется это условие
Код

if(preg_match_all('#;\s*$#', $value)){
первое условие работает без проблем

2. 3-й параметр не обязателен и возвращает массив с найденным

Это сообщение отредактировал(а) Gold Dragon - 4.1.2013, 18:23


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 4.1.2013, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



Цитата(Gold Dragon @  4.1.2013,  18:22 Найти цитируемый пост)
3-й параметр не обязателен и возвращает массив с найденным

Цитата

Warning: preg_match_all() expects at least 3 parameters, 2 given in ...

осталось только убедить в этом мой php 5.3.10  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 4.1.2013, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



да ладно!!!  Вот бл.......
Цитата

5.4.0  Параметр matches стал необязательным. 

на локалке стоит 5.4.8, на серваке 5.3....

Сейчас проверю...


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 4.1.2013, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



Вообще-то влиять не должно. Там же варнинг, а не ошибка. Разве что какая-то самодельная обработка ошибок прикручена.

Можно убрать параметр FILE_IGNORE_NEW_LINES и попытать регулярку 
Код

if(preg_match_all('#;\s*$#m', $value)){

Хотя это уже напоминает шаманство.  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 4.1.2013, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



ksnk, дружище.. а ведь помогло!!! а просто херею... стоит обработка ошибок ALL. НИ на экране ни в логах ничего абсолютно.. Поставил тритий параметр и всё проскочило..

Да вот и я понимаю что не особо должно влиять.. особенно при том что первое условие проглатывает, а второе нет..!!!

Сейчас ещё на одном серваке прогоню... ну и + конечно раздавать пойду smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.