Прошу помочь. Служебные фразы не пашут (тема исправлена)

mus

Новичок
Прошу помочь. Служебные фразы не пашут (тема исправлена)

Прошу помочь. Не могу просечь ошибку в коде с использ. функц. и массив.
Господа - прошу помочь
У меня такая вот проблема - я владею купленным сервисом чатов - мне нужно сделать следующее - замену служебных фраз в чате.

Объясню структуру - есть файл, в который занесли значения служебных фраз, причем этот файл используется всеми чатами, един для всех и, следовательно, служебные фразы тоже едины для всех чатов.
Служебный фразы, это типа посетитель такой-то покидает чат на пять минут.
Для решения этой проблемы я создал для всех чатов дополнительный файл БД ( структура БД сервиса файловая) и занес туда дефолтные значения служебок. Идея такова - просто напросто при создании чата будут использоваться служебные фразы, но если же админ захочет исправить их, то он сможет сделать из админпанели. Не суть важно то, что я тут расписал - но все же для дела это может помочь.

Итак, файл БД для одного, хотя бы, чата я создал, далее мы перебираем значения БД и подставляем заместо дефолтных, с помощью массива.
Не знаю, как Вам идея - может быть и верна - но вот код - прошу простить если обижу братию пхп-эшников =)

Итак, для начала структура файла БД.


PHP:
 $komu отходит на минуты две^$komu о-па, уже в чате, приколи...^не могу его достать^
и т.д.


Все это вытянуто в одну строчку.
Далее я просто вбил код в новый файл, просто проверить, будет ли работать и положил этот файл в директорию к тому файлу, где лежат служебные фразы. Вот его код (просто файла, назовем его тестовый)

PHP:
 <?php 
$room = "main"; 
$komu["nik"] = "mus"; 
$data = file("../$room/___kbvhd1fd8r3_cjfge/sfraz.ch"); // открываем файл БД 
        for ($i=0; $i<count($data); $i++) //перебираю 
        { 
             $data[$i] = str_replace("\$komu",$komu[nik],$data[$i]); 
             $str = explode("^",$data[$i]); 
        } 
echo "$str[2]"; 
?>
Объясняю, что к чему и зачем.
значит переменная $room отвечает за определние комнаты чата - тоесть она самоопределяема - по идее - в том файле со служебными фразами (назовем его command.php).
Далее, переменная komu["nik"] = "mus";
это имя пользователя, оно тоже определится само.
Далее цикл с перебором файла БД, структура которого расписана выше, затем мы находим в файле БД слово $komu и заменяем на $komu["nik"] - делаем мы это затем, чтобы админ, при изменении служеьных фраз мог крутить вертеть именем пользователя, пример:
посетитель mus покидает чат навсегда
или
mus, это тот, что посетитель, удаляется из чата на пять минут...
Я думаю, тут тоже все ясно...
Так-с, ну а далее массив str, значениями которого будут фразы, которые мы извлекли из файлы БД....
И просто так вывод сообщения - вуаля - работает...
Вот и бы и дальше работало - ан нет...

Решил я все это дело вставить в нормульный файл, тот, который command.php - смотрим два варианта кода файла - первый - нормальный, второй - мною исправленный (как оказалось - гаженный)

нормальный вариант:
PHP:
<? 
function command($tip,$komu_nik) 
{ 
define("nik","nik"); // ниже пропущена часть кода...
.
.
.
 global $room; 
 global $uid; // ниже пропущена часть кода
.
.
if ($arr_right[uid]=="") 
                { 
                         to_chat("Не могу его достать","only1",$hto[nik],$hto); 
                }
НЕнормальный вариант кода:

PHP:
<? 
#здесь ничего не меняется - изменения начинаются ниже
 
$data = file($DOCUMENT_ROOT."/main/___kbvhd1fd8r3_cjfge/sfraz.ch"); // открываем файл БД, ПО ИДЕЕ, ВМЕСТО MAIN ЗДЕСЬ ДОЛЖНО БЫТЬ $room НО Я ПОСТАВИЛ MAIN - ВСЕ РАВНО ТЕСТИЛ НА ЭТОМ ЧАТЕ (не думайте, я и рум ставил - но не пахало) 
        for ($i=0; $i<count($data); $i++) //перебираю 
        { 
             $data[$i] = str_replace("\$komu",$komu[nik],$data[$i]); 
             $str = explode("^",$data[$i]); 
        } 

        if ($arr_right[uid]=="") 
                { 
                         to_chat("$str[2]","only1",$hto[nik],$hto); 
                }
На выходе ничего нет =(
Пустая строка да и только - я вот думаю, может быть я что-то не так делаю, в плане идеи? А может в плане правильности кода?
Помогите :eek:

(Информация для админа - текст стал меньше в 4 раза =))
 

DimbIch

Новичок
ну проверь что выдает $DOCUMENT_ROOT может он ведет не туда куда тебе надо....
for ($i=0; $i<count($data); $i++) //перебираю
{
$data[$i] = str_replace("\$komu",$komu[nik],$data[$i]);
$str = explode("^",$data[$i]);
}
die(print_r($str));
посмотри что выдаст...
пустой массив или нет....
если пустой ищи ошибку в цикле....
если не пустой ищи ошибку ниже...
может не передаеться твоя str в чат...(особенности чата)
 

Frol

Новичок
PHP:
var_dump($data);
1. зачем функция file и цикл если в файле одна строка?
2. есть ли в конце файла перевод строки?
 

mus

Новичок
ну проверь что выдает $DOCUMENT_ROOT может он ведет не туда куда тебе надо....
пути менял трижды - даже абсолютный задавал...
посмотри что выдаст...
пустой массив или нет....
если пустой ищи ошибку в цикле....
если не пустой ищи ошибку ниже...
может не передаеться твоя str в чат...(особенности чата)
хорошая идея - разве что у меня вопрос. Я установил у себя денвер - вроде все работает - а вот с однйо бедой лажа - чат, сам по себе, не пашет - тоесть весь сервис и его функции работают, а чат сам нет, не хочит...=(
На хостинге (агава платная) все пашет, у меня нет.
У друга тоже соурс есть - у него сервер сконфигурирован нормальный (не нормально, а нормальный), н еденвер, у него та же бадья - сообщения в чат не подгружаются...
Да и ладно - прсото вырежу кусок кода и гляну, что там получилось, ну а идея хоть верна?
зачем функция file и цикл если в файле одна строка?
Так, а вот с этим вопрос - если в файле одна строка. разделенная знаком ^ отчего не логично ставить функцию file?

2. есть ли в конце файла перевод строки?
Тоже не совсем ясно - в конце файла БД? Зачем?
 

gromitus

Новичок
PHP:
if ($arr_right[uid]=="")
на
PHP:
if ($arr_right['uid']=="")
ещё замени на всякий случай
 

DimbIch

Новичок
хм..
есть подозрение что там чат глюкавый...
советую ставить какой нибудь дебаггер и искать глюки....
 

mus

Новичок
приведенный мною код выполнен был?
Нет, а куда его вставлять? Я вставлю туда, куда нужно =) Лишь бы работало...
хорошо - сменю, разве что и без этого вроде работает хорошо...
советую ставить какой нибудь дебаггер и искать глюки....
Какой посоветуете? Просто интересно - я знать не знаю что это такое - вроде как по названию видно, что прога ищет ошибки в коде - но раньше с такими прогами не сталкивался...
 

Фанат

oncle terrible
Команда форума
mus
Нет, губы раскатывать не надо.
прог, которые ищут ошибки в коде, еще не изобрели.
и когда изобретут - тебе-то уж они точно не понадобятся, поскольку до них изобретут проги, которые сами пишут проги.
И ты, соответственно, станешь не нужен.

Дебаггер помогает тем, кто хорошо себе представляет, как работает их программа и что она должна делать в каждый отдельный момент времени.
(замечу в скобках, что таким людям и дебаггер не требуется - достаточно пары отладочных echo (а точнее - var_dump))

Если же ты не представляешь, как работает твоя программа, то, повторюсь, дебаггер тебе не поможет.
 

mus

Новичок
Фанат
Этот самый дебугер такой же, как в языке C?
Если да, тоэто я и имел ввиду...
По крайней мере в С этот отладчик проверяет код на наличие ошибок всякого рода и т.д.
А вот что такое var_damp - может кто объяснит как он работает?
 

Фанат

oncle terrible
Команда форума
mus, ты не путаешь отладчик с волшебной палочкой?
Ты вообще-то не похож на человека, написавшего хотя бы строчку на С. А из возраста, когда верят в сказки, давно пора бы уже вырасти.

var_dump не делает ничего волшебного.
А главное - не делает ничего ЗА ТЕБЯ.
Это, как и отладчик - всего лишь инструмент, который может ТЕТЕ помочь найти ошибку, а не найти ее за тебя.
Допустим, ты зннаешь, что переменная должна иметь определенное значение.
выводишь ее - и смотришь. Если не имеет, разбираешься - почему. Все очень просто.
 

mus

Новичок
mus, ты не путаешь отладчик с волшебной палочкой?
Нет - я знаю, приблизительно, как он действует...
А главное - не делает ничего ЗА ТЕБЯ.
Это я уже понял, спасибо!
Допустим, ты зннаешь, что переменная должна иметь определенное значение.
выводишь ее - и смотришь. Если не имеет, разбираешься - почему. Все очень просто.
Так куда он в чате это дело выводить будет? В окно ввода? Спасибо - не надо...
 

Фанат

oncle terrible
Команда форума
Так куда он в чате это дело выводить будет
это ты у нас спрашиваешь?
ты, вообще-то, программист, или кто? Судя по всему - второе.
Ну так тем более тогда - зачем просил помощи, если ты не можешь ей воспользоваться? Если даже не можешь вывести сообщение только себе или, на худой конец, в файл?
 
Сверху