VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Но я не силен в синтаксисе PHP и уж тем более в составлении регулярок. Сомневаюсь что верно написал. Особенно сомневаюсь в том правильно ли я поставил i в конце регулярного выражения? По скольку смутно понимаю смысл этой регулярки то проверить её работу даже на простой страничке не сильно понимаю как.
P.S. Это из плагина "Сокрытие ссылок от гостей" модуль "Guests will not see links in search" vBulletin 3.8.11
И в догонку,
появилась ошибка:
Code:
PHP Warning: preg_split(): No ending delimiter ',' found in /home/сайт/misc.php(100) : eval()'d code on line 1
правильно ли я поставил i в конце регулярного выражения?
если "по-русски", то это означает игнорировать регистр символов
Quote:
Originally Posted by Roro
проверить её работу даже на простой страничке не сильно понимаю как
существуют сервисы в сети, где можно проверить свою регулярку
а вообще, лучше конечно проверять на своем компе (апач + пхп + mysql)
или на своем же сайте, создав простенький пхп скрипт и подключив глобал.пхп, если нужно использовать глобальные массивы/объекты воблы
@Roro
Простоузер
Join Date: Dec 2016
Posts: 23
Версия vB: 3.8.x
Reputation:
Novice 5
Репутация в разделе: 0
0
Quote:
Originally Posted by kerk
если "по-русски", то это означает игнорировать регистр символов
Это я понял. Но верно ли я её воткнул в регулярку?
Quote:
Originally Posted by kerk
существуют сервисы в сети, где можно проверить свою регулярку
Можешь ссылку дать. плиз.
Quote:
Originally Posted by kerk
а вообще, лучше конечно проверять на своем компе (апач + пхп + mysql)
или на своем же сайте, создав простенький пхп скрипт и подключив глобал.пхп, если нужно использовать глобальные массивы/объекты воблы
Как технически проверить, я понимаю. Вопрос не в том как проверить, а втом чтобы знать что именно проверять. Если не знаешь чего автор хотел чтобы регулярка делала, то и понять верно ли она после преобразований делает возможности нет. Всё это не я писал. Я просто нашел ошибки в коде который кто-то писал, и на который сейчас пых ругается. Вот и пытаюсь исправить чтобы форум в лог ошибки не лил.
Если не знаешь чего автор хотел чтобы регулярка делала
так собственно по регулярке понятно, что "автор хотел" =)
прег_реплейс - заменить найденный по шаблону регулярки текст (часть текста или слово или буквы или что там еще), на какой то свой текст
в данном случае, замена найденного линка на текст фразы
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,823
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20319
Репутация в разделе: 8468
0
как бы проверял я...
создать скрипт и подключить глобал (как писал выше)
запросить из БД какой нибудь пост, в котором точно есть ссылки
текст поста прогоняем через регулярку
результат принтим на страницу нашего скрипта
@Roro
Простоузер
Join Date: Dec 2016
Posts: 23
Версия vB: 3.8.x
Reputation:
Novice 5
Репутация в разделе: 0
0
Quote:
Originally Posted by kerk
так собственно по регулярке понятно, что "автор хотел" =)
прег_реплейс - заменить найденный по шаблону регулярки текст (часть текста или слово или буквы или что там еще), на какой то свой текст
в данном случае, замена найденного линка на текст фразы
Это понятно не по регулярке, ну может тебе и по регулярке, а мне только из логики работы модуля в котором я это нашел.
Ко всему прочему у автора там не прег_реплэйс, а ереги_реплэйс, которая как раз депрекатед и из за котрой весь сыр бор.
Ко всему прочему, у автора там написано вот так (это весь код модуля полностью):
PHP Code:
if ($vbulletin->options['hlfg_global']) { $groups = explode(',',$vbulletin->options['hlfg_groups']); if ($vbulletin->options['hlfg_search'] AND !$vbulletin->userinfo['userid'] OR $vbulletin->options['hlfg_search'] AND (is_member_of($vbulletin->userinfo, $groups) OR $groups[0] == 0)) { if (!strstr($vbulletin->options['hlfg_users'], $post[username]) AND ($post['userid'] != $vbulletin->userinfo['userid'] OR !$vbulletin->options['hlfg_own'])) { $post['pagetext'] = eregi_replace('(http|www)([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)', $vbphrase[nolinkinarchive], $post['pagetext']); $post['pagetext'] = preg_replace("!\b[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}\b!i", $vbphrase[nolinkinarchive], $post['pagetext']); } } }
Я не знаю какой логикой руководствовался автор для такого написания, почему у него в двух соседних строках две разных функции которые по идее работают одинаково, да еще и с разным синтаксисом. Может для специалиста ответы на эти вопросы АРХИочевидны, для меня они СИЛЬНО не очевидны и я сомневаюсь как правильно поступить.
Для меня например очевидно что две вот эти регулярки процитированные ниже, это небо и земля. Но это баш с которым я сталкиваюсь по 150 раз в день, а не пхп.
Code:
sed "/^$pattern/d" ./filename
sed '/^$pattern/d' ./filename
Возможно тебе мой вопрос кажется на столько элементарным что отвечать на него моветон, но бывает что на самые элементарные вопросы можно уверенно ответить только если у тебя гора опыта за плечами и прочитан вагон литературы.
Я вообще взялся за написание скриптов к булке только для того чтобы изучить продукт и понять как он работает. Я не собираюсь становиться программистом пхп и писать плагины для булки. Для этого есть масса вполне себе достойных людей которые на этом зарабатывают. Например ты. А я админ. У меня задачи другие. Просто по опыту знаю, что чтобы понять работу продукта надо попытаться взглянуть на него глазами программера. И при этом совсем не обязательно глубоко знать язык на котром продукт написан. Я так поступаю с любыми продуктами которые по воле судеб приходится администрировать. Для движков форумов, а булка не первый движок который я админю, самый простой способ вникнуть в работу движка - написать элементарный плагин затрагивающий максимум базового функционала движка. Причем его даже доводить до ума не обязательно.
Сейчас у меня стоит задача. Сделать так чтобы булка не лила в лог ошибки. У меня их вот сколько еще:
Code:
PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0
PHP Deprecated: Function eregi_replace() is deprecated in /home/сайт/search.php(2975) : eval()'d code on line 8
PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/сайт/vbseo/includes/functions_vbseo_hook.php on line 118
PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/сайт/vbseo/includes/functions_vbseo_hook.php on line 38
PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/сайт/vbseo/includes/functions_vbseo_seo.php on line 120
PHP Strict Standards: Declaration of vB_ProfileBlock_vBSEOLikes::block_is_enabled() should be compatible with vB_ProfileBlock::block_is_enabled($id) in /home/сайт/vbseo/includes/functions_vbseo_ui_profile.php on line 0
PHP Strict Standards: Non-static method vB_Bitfield_Builder::fetch_permission_group() should not be called statically in /home/сайт/includes/adminfunctions_forums.php on line 179
PHP Strict Standards: Only variables should be assigned by reference in /home/сайт/madp/prevention.php on line 542
PHP Strict Standards: Only variables should be assigned by reference in /home/сайт/redarmycp/forum.php on line 394
PHP Warning: Illegal string offset 'usergroupid' in /home/сайт/includes/functions.php on line 382
PHP Warning: Illegal string offset 'usergroupid' in /home/сайт/includes/functions.php on line 448
PHP Warning: Illegal string offset 'userid' in /home/сайт/includes/functions.php on line 439
PHP Warning: Illegal string offset 'userid' in /home/сайт/includes/functions.php on line 442
PHP Warning: Illegal string offset 'userid' in /home/сайт/includes/functions.php on line 448
А было раз в 5 больше. И да, я знаю что их можно тупо подавить и не париться.
И всё это не считая того что .htaccess кривые и вероятно в БД еще полный бардак. И в настройках вебсерва еще конь толком не валялся. И это все не считая того что уже успел исправить. Да. В таком плачевном виде мне продукт достался. Сижу правлю.
Извини, накипело. Вчера искал ответ в инете на элементарный вопрос по пхп, тоже всвязи с ошибкой в булке, так каких только намеков не начитался. И предложения воспользоваться переводчиком, и предложения подумать головой, и предложения погуглить, и даже прямые намеки на тупость спрашивающего. С десяток веток на разных форумах прочитал. И только пара человек дала конкретные ответы. Простые и конкретные. И да, решение оказалось ЭЛЕМЕНТРАНЫМ. Примитивными до нельзя. Но мне и в голову не приходило посмотреть в указанном направлении пока не ткнули носом. Хотя полагаю для того кто пишет на пхп, направление было ну просто АРХИОЧЕВИДНЫМ.
Last edited by Roro : 09-16-2018 at 10:54 AM.
Reason: Добавлено сообщение
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,823
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20319
Репутация в разделе: 8468
0
Quote:
Originally Posted by Roro
почему у него в двух соседних строках две разных функции которые по идее работают одинаково, да еще и с разным синтаксисом
1 - вырезает ссылки
2 - вырезает е-майлы
@Roro
Простоузер
Join Date: Dec 2016
Posts: 23
Версия vB: 3.8.x
Reputation:
Novice 5
Репутация в разделе: 0
0
Quote:
Originally Posted by kerk
1 - вырезает ссылки
2 - вырезает е-майлы
То что они разное делают я понял по тому что у них разные регулярки. Но почему в одной строке использована eregi_replace('*****'), а во второй preg_replace("!*****!i") для меня загадка. И заметь, обе функции специально использованы с модификатором i.
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,823
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20319
Репутация в разделе: 8468
0
Quote:
Originally Posted by Roro
почему в одной строке использована
ereg vs eregi
другой синтаксис
ereg_* - устаревшее
preg_* - использует в качестве регистронезависимого флаг/модификатор i
@Roro
Простоузер
Join Date: Dec 2016
Posts: 23
Версия vB: 3.8.x
Reputation:
Novice 5
Репутация в разделе: 0
0
Quote:
Originally Posted by kerk
ereg vs eregi
другой синтаксис
ereg_* - устаревшее
preg_* - использует в качестве регистронезависимого флаг/модификатор i
Я так и не смог понять, ты пытаешься мне разяснить чем отличается ereg_* и preg_* ? Уже успел разобраться в чем между ними разница и сам исправил кое что из устаревшего. И гуглом пользуюсь вроде нормально. С гуглом то главное знать что именно искать, а вот этого, к сожалению, гугл не подсказывает чаще всего.
Я другого не могу понять, в обсуждаемом пхп скрипте всего 12 строк. То есть незаметить что использованы разные функции просто невозможно. Строки соседние. Строки почти полностью идентичны, а по конструкции то и вообще идентичны. Вся разница между ними в используемой функции и в используемой регулярке. Зачем в одной строке использовать устаревшую eregi_replace, а во второй использовать preg_replace с модификаторм i??? Фактически же это ОДИНАКОВЫЕ функции. Разве нет? Разве между ними есть какая-нить на столько существенная разница чтобы необходимо было вместо новой preg_replace устаревшую УСТАРЕВАЮЩУЮ eregi_replace?