call_user_func не поддерживает пхп.ini в чате voc++

Статус
В этой теме нельзя размещать новые ответы.

droncs

http://мммкалк.рф ммм личный кабинет МММ
call_user_func не поддерживает пхп.ini в чате voc++

Добрый день. не знаете как переписать скрипт, чтобы ошибка не появлялась Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). ?
скрипт чат voc++, там функция call_user_func не поддерживает пхп.ini

чем можно заменить? файл events.php
droncs.freehostia.com/voc.php
 

ps2007

Новичок
Добрый день. Вы думаете, что для решения Вашего вопроса посетители форума должны найти и скачать voc++, затем его установить чтобы увидеть, где возможно выскакивает ошибка ?

php.ini здесь ни при чем
 

droncs

http://мммкалк.рф ммм личный кабинет МММ
я же написал тут droncs.freehostia.com при вводе ника перенаправляет на droncs.freehostia.com/voc.php
 

Фанат

oncle terrible
Команда форума
там, где функция вызывается, надо убрать знак &
а там, где объявляется - добавить.
если сам не можешь это сделать, то обратись к разработчикам сайта.
а все эти ссылки тут ни о чем.
 

ps2007

Новичок
я же написал тут
извиняюсь, не заметил.

>> чем можно заменить? файл events.php
Заменять его не нужно. Скорее всего скрипт был написан под PHP4, а на хостинге PHP5, поэтому его нужно исправить. Это пока что догадки.
В тексте ошибки указан файл events.php, строка 71.
В этом месте возникла ошибка.
 

droncs

http://мммкалк.рф ммм личный кабинет МММ
Вот код как нужно?
<?php
//Events pseudo-processor
//for Valentine Edition Pro II

if (!defined("_COMMON_")) {echo "stop";exit;}

if (!defined("_EVENTS_")):
define("_EVENTS_", 1);

define("EVENT_ADD_USER", 1);
define("EVENT_REM_USER", 2);
define("EVENT_DO_PUBLIC_MESSAGE", 3);
define("EVENT_DO_PRIVATE_MESSAGE", 4);
define("EVENT_LOGIN", 5);
define("EVENT_LOGOUT", 6);
define("EVENT_TIMEOUT", 7);
define("EVENT_EDT_USER", 8);
define("EVENT_POST_MESSAGE", 9);
define("EVENT_RENDER_USERLIST", 10);
define("EVENT_PREREG_USER", 11);
define("EVENT_POST_COMMENT", 12);
define("EVENT_POST_OFFLINEPM", 13);
define("EVENT_HTML_MESSAGE", 14);
define("EVENTS_ENGINE_VERSION", 1);

if (!isset($eventHandlers)) $eventHandlers = array();

function checkEventLegality($VEvent) {
if($VEvent != EVENT_ADD_USER and
$VEvent != EVENT_REM_USER and
$VEvent != EVENT_DO_PUBLIC_MESSAGE and
$VEvent != EVENT_DO_PRIVATE_MESSAGE and
$VEvent != EVENT_LOGIN and
$VEvent != EVENT_LOGOUT and
$VEvent != EVENT_TIMEOUT and
$VEvent != EVENT_POST_MESSAGE and
$VEvent != EVENT_PREREG_USER and
$VEvent != EVENT_POST_COMMENT and
$VEvent != EVENT_POST_OFFLINEPM and
$VEvent != EVENT_HTML_MESSAGE and
$VEvent != EVENT_RENDER_USERLIST) return false;

return true;
}

function installEventHandler($VEvent, $VHandler) {
global $eventHandlers;

$i = 0;

if(!checkEventLegality($VEvent)) return;

for($i = 0; $i < count($eventHandlers); $i++) {
if($eventHandlers[$i]["event"] == $VEvent and
$eventHandlers[$i]["handler"] == $VHandler) return;
}

$eventHandlers[] = array("event" => $VEvent,
"handler" => $VHandler);
}

function riseEvent($VEvent, $HParam, &$LParam) {
global $eventHandlers;

$i = 0;

if(!checkEventLegality($VEvent)) return;

for($i = 0; $i < count($eventHandlers); $i++) {
if($eventHandlers[$i]["event"] == $VEvent) {
if(function_exists($eventHandlers[$i]["handler"])) @

call_user_func($eventHandlers[$i]["handler"], $HParam, &$LParam);
}
}
}

function initPlugins() {
global $file_path;


if (is_dir($file_path."plugins")) {
if ($dh = opendir($file_path."plugins")) {
while (($file = readdir($dh)) !== false) {
if($file != "." && $file != "..") {
if(is_dir($file_path."plugins/".$file)) {
//Plugin dir found
//trying to load config
if(is_file($file_path."plugins/".$file."/config.php")) {
include($file_path."plugins/".$file."/config.php");
}
if(is_file($file_path."plugins/".$file."/plugin.php") and $VOCPlugin_Enabled

== "YES") {
include($file_path."plugins/".$file."/plugin.php");
if(function_exists($VOCPlugin_Name."_InitPlugin"))

call_user_func($VOCPlugin_Name."_InitPlugin");
}
}
}
}
closedir($dh);
}
}

//end of initPlugins
}

initPlugins();

endif;
?>
 

dimagolov

Новичок
droncs, тебе 2 сообщения назад уже сказали что:
там, где функция вызывается, надо убрать знак &
а там, где объявляется - добавить.
если сам не можешь это сделать, то обратись к разработчикам сайта.
 

Фанат

oncle terrible
Команда форума
никто строчки тут считать не будет
отредактируй, оставь только 71-ю
 

droncs

http://мммкалк.рф ммм личный кабинет МММ
вот 71
if(function_exists($eventHandlers[$i]["handler"])) @ call_user_func($eventHandlers[$i]["handler"], $HParam, &$LParam);
напишите как будет
 

Фанат

oncle terrible
Команда форума
из этой строчки надо убрать символ &
потом найти в остальном коде строчку, которая называется...
блин, а хз, как она называется.
вот вам блин и ответ - почему не использовать переменные переменные.
 

droncs

http://мммкалк.рф ммм личный кабинет МММ
исправил теперь пишет Некорректный ник! не могу войти
 

dimagolov

Новичок
droncs, в общем тебе не обойтись без forensic analyze кода. нужно узнать все возможные значения которые принимает $eventHandlers[$i]["handler"] - это имена ф-ий и для всех таких ф-ий добавить & (передачу по ссылке) во второй параметр.
 

ps2007

Новичок
для того, чтобы узнать имя функции, нужно временно вместо 71-й строки написать это:

if(function_exists($eventHandlers[$i]["handler"])) {
@ call_user_func($eventHandlers[$i]["handler"], $HParam, $LParam);
echo 'handler='.$eventHandlers[$i]["handler"].'<br>';
}

После выявления всех функций, естественно, вернуть 7-ю строку такой как и была


upd:
убрал знак & в вызове функции
 

dimagolov

Новичок
что взять? имена ф-ий? изучать код можно, чтобы определить множество возможных значений. там, где эти элементы ["handler"] определяются в массиве. можно играть в сапера и выводить в лог эти имена во время исполнения а потом смотреть в логе, но так ты никогда не будешь уверен, что ВСЕ ф-ии будут работать правильно.
 

droncs

http://мммкалк.рф ммм личный кабинет МММ
исправил все тоже самое

-~{}~ 29.01.10 17:13:

выводит пустоту
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху