Реклама на сайте Advertise with us

Запутался в функциях рнр помогите разобраться

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/02/09 в 03:07       Ответить с цитатойцитата 

сломал голову, функция нехочет работать icon_sad.gif

есть простая функция:
Код:

function bot($url)
{
        if(eregi("google", $url)){
      $bot = "google";
   }
   elseif(eregi("yahoo", $url)){
      $bot = "yahoo";
   }
   else {
      $bot = "undef";
   }
    return $bot;
}

$url = "http://google.com/searchblabla";

она вызывается из другой функции, другая функция тоже вызывается функцией, итого получилось несколько 3-4 вложенных функций...

если взять отдельно функцию bot($url), то она работает как надо, все возвращает, при этом когда функции вложенные всегда возвращает результат "undef"
eregi пробовал заменять на preg_match и stristr, никакого эффекта
переменная $url в функцию передается, проверял

где я мог накосячить?

0
 



С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096

Ссылка на сообщениеДобавлено: 10/02/09 в 04:00       Ответить с цитатойцитата 

такого быть не может. сам посмотри по коду - в каком случае в $buf кладется 'undef'? только в одном - когда в строка не содержит ни "google", ни "yahoo". eregi не может то работать, то не работать (к слову здесь грамотнее использовать strpos(), но это другая тема). поэтому проблема может быть только в одном - в $url. сделай так:
Код:
function bot($url)
{
        if(eregi("google", $url)){
      $bot = "google";
   }
   elseif(eregi("yahoo", $url)){
      $bot = "yahoo";
   }
   else {
      $bot = "undef";
   }
echo "bot='$bot'; URL: '$url'";
    return $bot;
}


и смотри чо выводит. 100% дело не в функции.

8
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/02/09 в 04:41       Ответить с цитатойцитата 

ага, уже начал капать в направлении переменной $url icon_smile.gif
грубо говоря вот что получилось:
echo $url; - http://google.com/searchblabla
echo strlen($url); - 2
echo $url[0]; - \
echo $url[1]; - 1
echo $url[0].$url[1]; - http://google.com/searchblabla

тоесть получается переменная содержит два символа "\1", но при выводе на экран выдает то, что надо "http://google.com/searchblabla", как так получается непойму

0
 

ищу работу (php,mysql,js)

С нами с 26.05.07
Сообщения: 576
Рейтинг: 393

Ссылка на сообщениеДобавлено: 10/02/09 в 04:58       Ответить с цитатойцитата 

попробуй использовать конструкцию switch вместо else... elseif

и как передаётся аргумент $url - по значению или по ссылке?
может быть ситуация, что пока $url передается 3-4 раза в функциях, на входе в bot($url) значение $url будет отличатся от входящего, отсюда и "undef"

Каталог для Блогов, Фрих и Галёр, ссылки $0.03
рекламные дрочетексты на микросиджах

3
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/02/09 в 13:15       Ответить с цитатойцитата 

UP
так и не разобрался почему в переменной $url содержится \1, а выводится урл, подскажите ктонить

0
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 10/02/09 в 13:34       Ответить с цитатойцитата 

Да ты ...
Да ты ...
Да ты покажи эти функции icon_smile.gif

Команда print_r($url) выведет всё, что может храниться в переменной $url, которая твоими функциями переделывается в массив.

3
 



С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096

Ссылка на сообщениеДобавлено: 10/02/09 в 13:38       Ответить с цитатойцитата 

ibiz писал:
ага, уже начал капать в направлении переменной $url icon_smile.gif
грубо говоря вот что получилось:
echo $url; - http://google.com/searchblabla
echo strlen($url); - 2
echo $url[0]; - \
echo $url[1]; - 1
echo $url[0].$url[1]; - http://google.com/searchblabla

тоесть получается переменная содержит два символа "\1", но при выводе на экран выдает то, что надо "http://google.com/searchblabla", как так получается непойму


как то странно получается вообще то. даже если url передается по ссылке а не по значению, как может strlen(url) давать 2 не понимаю, все равно должно количество символов возвращать... если до вечера не разберешься, стукни вечером мне в аську, найдем причину. уже аж интересно. ну даже если предположить что все таки с указателями какая-то беда, попробуй в начале функции скопировать url в другую переменную - $tmp = $url; ну и дальше по коду везде изменить. (или в параметрах функции изменить $url на $tmp, а первой строкой $url = $tmp; и потом код менять не придется).

3
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/02/09 в 13:48       Ответить с цитатойцитата 

функции не покажу, ибо там по 1-2к строк...
если делать print_r($url) внутри самой функции, то выводит \1
если сунуть в переменную $tmp и выводить в самой функции, то выводит \1
print ($url) - аналогичный результат

если возвращать результат функции, то выводится нормально strlen = 28

функция вызывается после
$code_url = str_replace('{URL}', '\\1', $code_url);
может в этом косяк

0
 



С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096

Ссылка на сообщениеДобавлено: 10/02/09 в 13:48       Ответить с цитатойцитата 

а если еще добавить echo urlencode($url); в этой функции, чо выводит?

3
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/02/09 в 13:51       Ответить с цитатойцитата 

urlencode($tmp) - %5C1

0
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 10/02/09 в 13:55       Ответить с цитатойцитата 

ibiz писал:
$code_url = str_replace('{URL}', '\\1', $code_url);

str_replace с регулярными не работает

попробуй так:
Цитата:
$code_url = preg_replace('/\{URL\}/', '\\1', $code_url);[/

3
 



С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096

Ссылка на сообщениеДобавлено: 10/02/09 в 13:56       Ответить с цитатойцитата 

давай полный кусок кода начиная от $code_url = str_replace('{URL}', '\\1', $code_url); и плюс саму функцию со всеми отладочными echo которые ты проставил.

3
 



С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096

Ссылка на сообщениеДобавлено: 10/02/09 в 13:57       Ответить с цитатойцитата 

gimcnuk писал:
str_replace с регулярными не работает

попробуй так:


он тут их и не использует.

3
 

ищу работу (php,mysql,js)

С нами с 26.05.07
Сообщения: 576
Рейтинг: 393

Ссылка на сообщениеДобавлено: 10/02/09 в 17:48       Ответить с цитатойцитата 

Попоробуй отследить как меняется $url в функциях, (как писал выше webboxxx $url = $tmp)
$url = $tmp1 в начале,
$url = $tmp2 середине,
$url = $tmp3 в конце.
И повыводить значения $tmp...

Код:
echo $url; - http://google.com/searchblabla
echo strlen($url); - 2

- это как-то подозрительно. что-то преобразовывает $url icon_confused.gif. может при преобразовании строки в массив косяк получается...

Каталог для Блогов, Фрих и Галёр, ссылки $0.03
рекламные дрочетексты на микросиджах

3
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/02/09 в 19:03       Ответить с цитатойцитата 

да походу в ссылках запутался...
вот тут какая может быть ошибка?
$text = preg_replace("#\[url\](.*?)\[/url\]#si", bot('\\1'), $text);

0
 

ищу работу (php,mysql,js)

С нами с 26.05.07
Сообщения: 576
Рейтинг: 393

Ссылка на сообщениеДобавлено: 10/02/09 в 19:41       Ответить с цитатойцитата 

$text = preg_replace('/#\[url\](.*?)\[/url\]#si/', bot('\\1'), $text);

#-?, [/url\] - ? icon_confused.gif
и в квадратных скобках вроде как последовательность символов указывается.
регулярка неправильна - сходу не готов написать как надо, тем более постановки задачи не знаю (что и где заменить надо)

вот тут по уралм и регуляркам, мож пригодится
http://www.pcre.ru/examples/links/text/40/
http://www.phpclub.ru/detail/article/regexp_1

Каталог для Блогов, Фрих и Галёр, ссылки $0.03
рекламные дрочетексты на микросиджах

3
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/02/09 в 19:55       Ответить с цитатойцитата 

Dim82: не в регулярке загвоздка, пускай даже она неправильная icon_smile.gif

вот моя логика действий:
$text = preg_replace("#\[url\](.*?)\[/url\]#si", bot('\\1'), $text);
1)для обработки берем весь текст $text
2)то, что между тегами http://google.com/serch.. выделяем, как искомое
3)передаем в функцию bot($url) то, что нашли в тексте
4)в bot($url) обрабатываем полученный урл и возвращаем
5)результатом функции bot($url) заменяем то, что между тегами http://google.com/serch.., тоесть по идее должно получиться http://google.com/serch.. => google

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/02/09 в 20:12       Ответить с цитатойцитата 

спасибо heckfy smail54.gif
решил с помощью preg_replace_callback smail101.gif

0
 



С нами с 04.04.07
Сообщения: 62
Рейтинг: 37

Ссылка на сообщениеДобавлено: 10/02/09 в 20:13       Ответить с цитатойцитата 

icon_wink.gif

8
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »