Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) - Cannot redeclare url_replace() / 15 сообщений из 15, страница 1 из 1
02.09.2005, 13:29
    #33248266
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
Такая ситуёвина: Есть страничка, в неё инклюдится файл с функциями
заменяющий просто url на ссылку.
в эту же страничку инклудится файл в котором надо эти ссылки заменить.
выскакивает ошибка....
\примерно это так выглядит:
Код: plaintext
1.
2.
3.
4.
require_once("includes/bbcode_function.php");    \\ там эта самая функция на 
которую ругается
require_once("includes/user_comments.php");        \\ внутри этого файла она 
вызывается

сама функция выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
function make_clickable($text)
{

 $ret = ' ' . $text;

 // matches an "xxxx://yyyy" URL at the start of a line, or after a space.
 // xxxx can only be alpha characters.
 // yyyy is anything up to the first space, newline, comma, double quote or 
<
 $ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is",
 "\\ 1 <a href=\"\\2\" target=\"_blank\" class=\"text_link\">\\ 2 </a>", $ret);

 // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
 // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
 // zzzz is optional.. will contain everything up to the first space, 
newline,
 // comma, double quote or <.
 $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is",
"\\1<a href=\"http://\\ 2 \" target=\"_blank\" class=\"text_link\">\\2</a>", 
$ret);

 // matches an email@domain type address at the start of a line, or after a 
space.
 // Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
 $ret = 
preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i",
"\\1<a href=\"mailto:\\ 2 @\\ 3 \" class=\"text_link\">\\2@\\3</a>", $ret);

 // Remove our padding..
 $ret = substr($ret,  1 );

function url_replace($matches){
$part_of_url = substr("$matches[1]",  0 ,  6 );
//если URL начинается с http:// - то в новом окне открываем
if($part_of_url == 'http:/'){
$target = "target=\"_blank\"";
}
//если URL начинается с ftp:// - то в новом окне открываем
if($part_of_url == 'ftp://'){
$target = "target=\"_blank\"";
}
return "<a href=\"" . $matches[1] . "\"" . $target . "class=\"text_link\">" 
.. $matches[ 2 ] . "</a>";
}

$ret = preg_replace_callback(
              "#\(.*?)\](.*?)\[/url\]#",
              "url_replace",
              $ret);

 return($ret);

}
(почти целиком выдернуто из phpBB2)
Вот ошибка целиком:
Код: plaintext
1.
2.
Fatal error: Cannot redeclare url_replace() (previously declared
in 2005_09_02/includes/bbcode_function.php: 31 )
in 2005_09_02/includes/bbcode_function.php on line  31 
31 линия - это - function url_replace($matches){

Везде require_once стоит... Что можетбыть ему не так?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.09.2005, 13:41
    #33248306
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
lissyaraВезде require_once стоит... Что может быть ему не так?Что ему не так - он уже сказал. Проверяйте, почему у вас файл 2005_09_02/includes/bbcode_function.php инклудится дважды. При чём доказать, что это именно так - не составляет особого труда - достаточно в начале файла 2005_09_02/includes/bbcode_function.php сделать какое-нибудь
Код: plaintext
echo 'Вот мы и приинклудили файлик '.__FILE__."<br>\n";
В общем, как всегда - PHP FAQ: Ничего не работает! Что делать??? в зубы и вперёд.
...
Рейтинг: 0 / 0
02.09.2005, 14:04
    #33248376
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
как ни странно - инклудится он один раз. (проверено вышеописанным методом)
А вот
echo "проба";
поставленное перед url_replace - повторяется дважды, после чего вылетает. с
этой ошибкой
Что оно дважды повторяется - это нормально, там по массиву надо в цикле
пробежаться....
Если такое невозможно - вызвать второй раз функцию с вложенной функцией,
можно ли сделать что-то типа unset - как для переменной, но для моей
функции? (немного сумбурно, но надеюсь смысл понятен)


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.09.2005, 14:06
    #33248383
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
А случам includes/user_comments.php не пытается инклюдить bbcode_function.php еще раз?

-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
02.09.2005, 14:10
    #33248392
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
lissyaraЕсли такое невозможно - вызвать второй раз функцию с вложенной функцией,
можно ли сделать что-то типа unset - как для переменной, но для моей
функции? (немного сумбурно, но надеюсь смысл понятен)


Posted via ActualForum NNTP Server 1.3

из мана: PHP does not support function overloading, nor is it possible to undefine or redefine previously-declared functions.
...
Рейтинг: 0 / 0
02.09.2005, 14:14
    #33248414
Duke1999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
Код: plaintext
1.
2.
3.
4.
5.
6.
if (!function_exists('url_replace')) 
{
function url_replace(){
...
}
}    
}
...
Рейтинг: 0 / 0
02.09.2005, 14:19
    #33248440
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
function a () {
 function b() {
  echo 'I am b<br>';
}
echo 'I am a<br>';
}

a();
b();
a();

Чтобы избежать это
if (!function_exists('b')) { ...

Все из мана )))
-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
02.09.2005, 14:29
    #33248483
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
Па-анятна....
Подобная идея и у меня мелькала но сформулировать никак не мог :(


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.09.2005, 15:17
    #33248689
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
lissyaraкак ни странно - инклудится он один раз. (проверено вышеописанным методом)
А вот
echo "проба";
поставленное перед url_replace - повторяется дважды, после чего вылетает.Этого не может быть, потому что этого не может быть. echo проба перед функцией и то, что написал я - это одно и то же. Если, конечно, вы не скрываете каких-то деталей.
И уж если влом искать, где именно происходит второй инклуд - то дабы не мудохаться с каждой функцией достаточно сделать ОДИН раз в начале файла 2005_09_02/includes/bbcode_function.php
Код: plaintext
if (function_exists('url_replace')) return;
не притрагиваясь при этом к остальному коду.
...
Рейтинг: 0 / 0
02.09.2005, 15:22
    #33248705
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
* lissyaraкак ни странно - инклудится он один раз. (проверено вышеописанным методом)
А вот
echo "проба";
поставленное перед url_replace - повторяется дважды, после чего вылетает.Этого не может быть, потому что этого не может быть. echo проба перед функцией и то, что написал я - это одно и то же. Если, конечно, вы не скрываете каких-то деталей.
И уж если влом искать, где именно происходит второй инклуд - то дабы не мудохаться с каждой функцией достаточно сделать ОДИН раз в начале файла 2005_09_02/includes/bbcode_function.php
Код: plaintext
if (function_exists('url_replace')) return;
не притрагиваясь при этом к остальному коду.

А кто тебе сказал что файл инклудится два раза.
Просто, при каждом вызове функции make_clickable создается новая функция url_replace ...
...
Рейтинг: 0 / 0
02.09.2005, 15:25
    #33248719
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
VERSПросто, при каждом вызове функции make_clickable создается новая функция url_replace ...Да, просмотрел.
...
Рейтинг: 0 / 0
02.09.2005, 15:26
    #33248722
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
Так выложить её ЗА ПРЕДЕЛЫ функции, как и полагается, и никаких гвоздей типа function_exists не понадобиться.
...
Рейтинг: 0 / 0
02.09.2005, 16:00
    #33248849
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
это не ко мне - как полагается, а к написателям phpBB2 :)
Просто внутри одной функции сгруппировано по смыслу всё. так удобней.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.09.2005, 18:29
    #33249315
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
lissyara
это не ко мне - как полагается, а к написателям phpBB2 :)
Просто внутри одной функции сгруппировано по смыслу всё. так удобней.Это не удобней. Это кривей. А то, что вы выбрали какую-то дерьмовую поделку - это исключительно ваши проблемы. Однако это не повод от отказа от нормальных решений.
...
Рейтинг: 0 / 0
02.09.2005, 20:18
    #33249448
lissyara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) - Cannot redeclare url_replace()
поделка, несмотря на Ваше к ней явное отвращение, написана лучше чем я смог бы. Потому у меня несколько иная точка зрения на ситацию.

Выложить - это хорошо, тока бы потом не потерялась. А то уползёт куда ньть в сторону, и потом совсем про..ётся :)
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) - Cannot redeclare url_replace() / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]