форум vBSupport.ru > vBulletin > Вопрос — Ответ
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Roro
Простоузер
Default Вопрос по синтаксису PHP.
0

Исправляю ошибки в модулях булки.
В частности вылезло следующее:
Code:
PHP Deprecated:  Function eregi_replace() is deprecated in /home/сайт/search.php(2975) : eval()'d code on line 8
Выяснилось что ошибка вот в этой строке:
PHP Code:
$post['pagetext'] = eregi_replace('(http|www)([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)'$vbphrase[nolinkinarchive], $post['pagetext']); 
На сколько я понял найденные мной в инете объяснения, исправляться это должно примерно вот так:
PHP Code:
$post['pagetext'] = preg_replace('(http|www)([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)i'$vbphrase[nolinkinarchive], $post['pagetext']); 
Но я не силен в синтаксисе 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
Обнаружена причина вот тут:
PHP Code:
preg_split(','$vbulletin->options['cybtopstats_excl_groups']) 
Решил так:
PHP Code:
preg_split('#,#'$vbulletin->options['cybtopstats_excl_groups']) 
Верно?

Last edited by Roro : 09-16-2018 at 01:51 AM.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
kerk
k0t
 
kerk's Avatar
Default
0

Quote:
Originally Posted by Roro View Post
правильно ли я поставил i в конце регулярного выражения?
если "по-русски", то это означает игнорировать регистр символов
Quote:
Originally Posted by Roro View Post
проверить её работу даже на простой страничке не сильно понимаю как
существуют сервисы в сети, где можно проверить свою регулярку
а вообще, лучше конечно проверять на своем компе (апач + пхп + mysql)
или на своем же сайте, создав простенький пхп скрипт и подключив глобал.пхп, если нужно использовать глобальные массивы/объекты воблы
 
 
Roro
Простоузер
Default
0

Quote:
Originally Posted by kerk View Post
если "по-русски", то это означает игнорировать регистр символов
Это я понял. Но верно ли я её воткнул в регулярку?
Quote:
Originally Posted by kerk View Post
существуют сервисы в сети, где можно проверить свою регулярку
Можешь ссылку дать. плиз.
Quote:
Originally Posted by kerk View Post
а вообще, лучше конечно проверять на своем компе (апач + пхп + mysql)
или на своем же сайте, создав простенький пхп скрипт и подключив глобал.пхп, если нужно использовать глобальные массивы/объекты воблы
Как технически проверить, я понимаю. Вопрос не в том как проверить, а втом чтобы знать что именно проверять. Если не знаешь чего автор хотел чтобы регулярка делала, то и понять верно ли она после преобразований делает возможности нет. Всё это не я писал. Я просто нашел ошибки в коде который кто-то писал, и на который сейчас пых ругается. Вот и пытаюсь исправить чтобы форум в лог ошибки не лил.

Кстати, проблему с
PHP Code:
preg_split(','$vbulletin->options['cybtopstats_excl_groups']) 
исправил проще. Вот так:
PHP Code:
explode(','$vbulletin->options['cybtopstats_excl_groups']) 
 
 
kerk
k0t
 
kerk's Avatar
Default
0

Quote:
Originally Posted by Roro View Post
Если не знаешь чего автор хотел чтобы регулярка делала
так собственно по регулярке понятно, что "автор хотел" =)
прег_реплейс - заменить найденный по шаблону регулярки текст (часть текста или слово или буквы или что там еще), на какой то свой текст
в данном случае, замена найденного линка на текст фразы
 
 
kerk
k0t
 
kerk's Avatar
Default
0

как бы проверял я...
создать скрипт и подключить глобал (как писал выше)
запросить из БД какой нибудь пост, в котором точно есть ссылки
текст поста прогоняем через регулярку
результат принтим на страницу нашего скрипта
 
 
Roro
Простоузер
Default
0

Quote:
Originally Posted by kerk View Post
так собственно по регулярке понятно, что "автор хотел" =)
прег_реплейс - заменить найденный по шаблону регулярки текст (часть текста или слово или буквы или что там еще), на какой то свой текст
в данном случае, замена найденного линка на текст фразы
Это понятно не по регулярке, ну может тебе и по регулярке, а мне только из логики работы модуля в котором я это нашел.
Ко всему прочему у автора там не прег_реплэйс, а ереги_реплэйс, которая как раз депрекатед и из за котрой весь сыр бор.
Ко всему прочему, у автора там написано вот так (это весь код модуля полностью):
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 кривые и вероятно в БД еще полный бардак. И в настройках вебсерва еще конь толком не валялся. И это все не считая того что уже успел исправить. Да. В таком плачевном виде мне продукт достался. Сижу правлю.

Извини, накипело. Вчера искал ответ в инете на элементарный вопрос по пхп, тоже всвязи с ошибкой в булке, так каких только намеков не начитался. И предложения воспользоваться переводчиком, и предложения подумать головой, и предложения погуглить, и даже прямые намеки на тупость спрашивающего. С десяток веток на разных форумах прочитал. И только пара человек дала конкретные ответы. Простые и конкретные. И да, решение оказалось ЭЛЕМЕНТРАНЫМ. Примитивными до нельзя. Но мне и в голову не приходило посмотреть в указанном направлении пока не ткнули носом. Хотя полагаю для того кто пишет на пхп, направление было ну просто АРХИОЧЕВИДНЫМ.

Roro добавил 16.09.2018 в 09:51
Quote:
Originally Posted by Roro View Post
Выяснилось что ошибка вот в этой строке:
PHP Code:
$post['pagetext'] = eregi_replace('(http|www)([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)'$vbphrase[nolinkinarchive], $post['pagetext']); 
На сколько я понял найденные мной в инете объяснения, исправляться это должно примерно вот так:
PHP Code:
$post['pagetext'] = preg_replace('(http|www)([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)i'$vbphrase[nolinkinarchive], $post['pagetext']); 
Но я не силен в синтаксисе PHP и уж тем более в составлении регулярок. Сомневаюсь что верно написал.
Верно сомневался. Правильно вот так:
PHP Code:
$post['pagetext'] = preg_replace("'(http|www)([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)'i"$vbphrase[nolinkinarchive], $post['pagetext']); 
Помогли вот эти ссылки и намек керка на то что это вообще в инете существует:
Проверка регулярок
Проверка регулярок

Quote:
Originally Posted by Roro View Post
Обнаружена причина вот тут:
PHP Code:
preg_split(','$vbulletin->options['cybtopstats_excl_groups']) 
Решил так:
PHP Code:
preg_split('#,#'$vbulletin->options['cybtopstats_excl_groups']) 
Верно?
Правильнее ИМХО вот так:
PHP Code:
explode(','$vbulletin->options['cybtopstats_excl_groups']) 
Может кому-то пригодится.

Last edited by Roro : 09-16-2018 at 10:54 AM. Reason: Добавлено сообщение
 
 
kerk
k0t
 
kerk's Avatar
Default
0

Quote:
Originally Posted by Roro View Post
почему у него в двух соседних строках две разных функции которые по идее работают одинаково, да еще и с разным синтаксисом
1 - вырезает ссылки
2 - вырезает е-майлы
 
 
Roro
Простоузер
Default
0

Quote:
Originally Posted by kerk View Post
1 - вырезает ссылки
2 - вырезает е-майлы
То что они разное делают я понял по тому что у них разные регулярки. Но почему в одной строке использована eregi_replace('*****'), а во второй preg_replace("!*****!i") для меня загадка. И заметь, обе функции специально использованы с модификатором i.
 
 
kerk
k0t
 
kerk's Avatar
Default
0

Quote:
Originally Posted by Roro View Post
почему в одной строке использована
ereg vs eregi
другой синтаксис
ereg_* - устаревшее
preg_* - использует в качестве регистронезависимого флаг/модификатор i
 
 
Roro
Простоузер
Default
0

Quote:
Originally Posted by kerk View Post
ereg vs eregi
другой синтаксис
ereg_* - устаревшее
preg_* - использует в качестве регистронезависимого флаг/модификатор i
Я так и не смог понять, ты пытаешься мне разяснить чем отличается ereg_* и preg_* ? Уже успел разобраться в чем между ними разница и сам исправил кое что из устаревшего. И гуглом пользуюсь вроде нормально. С гуглом то главное знать что именно искать, а вот этого, к сожалению, гугл не подсказывает чаще всего.

Я другого не могу понять, в обсуждаемом пхп скрипте всего 12 строк. То есть незаметить что использованы разные функции просто невозможно. Строки соседние. Строки почти полностью идентичны, а по конструкции то и вообще идентичны. Вся разница между ними в используемой функции и в используемой регулярке. Зачем в одной строке использовать устаревшую eregi_replace, а во второй использовать preg_replace с модификаторм i??? Фактически же это ОДИНАКОВЫЕ функции. Разве нет? Разве между ними есть какая-нить на столько существенная разница чтобы необходимо было вместо новой preg_replace устаревшую УСТАРЕВАЮЩУЮ eregi_replace?
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 11:38 PM.


Powered by vBulletin® Version Ъ Edition
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.