Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Проблема с глобальными переменными  (Прочитано 44789 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 14-07-2005 17:49 » 

Вот такая ситуация.
В файле index.php происходит инклудинг одного файла несколько раз, т.е. дело обстоит примерно вот так
Код:

include (sp_csv.php);
<br>
include (sp_csv.php);
<br>
include (sp_csv.php);
<br>
...
Количество раз не имеет значение.
В файле sp_csv.php проверяется глобальная переменная и если ее не существует или она равно 0, то производится ряд действий и глобальная переменная принимает значение 1. Если глоб. переменная равна 1, то делаются другие операции, но глоб. переменная уже не меняется. Но это в теории, на практике же глоб. переменная в этом файле всегда равна 0 или не существует, вот код
Код:
GLOBAL $flag_start_rand;
print "$flag_start_rand=".$flag_start_rand;
if(!isset($_SESSION['flag_start_rand'])| ($_SESSION['flag_start_rand']!=1))
{print "Вызываю start_rand()";
print ("<br>"."product=".$GLOBALS['splist'][0]);
include_once ("start_rand.php");}
else
...
Вот эта переменная $flag_start_rand всегда не существует либо равна нулю. Я что только не делал и так пробовал
$GLOBALS['flag_start_rand'] и объявлял ее в index.php ичего не помогает.
Объясните же мне дураку, почему она не меняется в файле sp_csv.php, точнее почему при следующих вызовах sp_csv.php она снова равна нулю или не существует, вместо того, чтобы быть равной единице.
« Последнее редактирование: 16-12-2007 17:41 от Алексей1153++ » Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 14-07-2005 18:00 » 

объяви во включаемом файле global $flag_start_rand.

http://ru3.php.net/manual/ru/function.include.php
Цитата
When a file is included, the code it contains inherits the variable scope of the line on which the include occurs. Any variables available at that line in the calling file will be available within the called file, from that point forward.

Т.е., практически, поисходит вставка файла в указанное директивой место со всеми вытекающими последствиями. Хоть и похожи директивы на ф-ии, но отличаются от них весьма.
« Последнее редактирование: 14-07-2005 18:05 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 15-07-2005 08:18 » 

Щас мануал почитаю (блин, я эту страницу совсем недавно читал, видать невнимательно). Но по поводу GLOBAL, я же объявил во вкдлючаемом файле переменнную flag_start_rand, во втором участке кода.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 15-07-2005 09:07 » 

Я этот пример понимаю, но это не совсем то, что мне нужно.
Код:
vars.php
<?php

$color 
= &#39;green&#39;;
$fruit = &#39;apple&#39;;

?>


test.php
<?php

echo "A $color $fruit"// A

include &#39;vars.php&#39;;

echo "A $color $fruit"// A green apple

?>


У меня другая ситуация. В подключаемом файле используется (объявляется) глоб. переменнная, которая до этого нигде вообще не была объявлена. И после того, как этот подключаемый файл отработал, эта переменная должна измениться, но почему-то при очередном подключении этого файла, глоб. переменная не сохрангяет значения, которое было ей присвоено при прошлом подключении файла.
 Я где только и что только не писал. Писал и global, GLOBAL, $GLOBALS[] один хрен. В чем я не прав?
« Последнее редактирование: 16-12-2007 17:42 от Алексей1153++ » Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #4 : 15-07-2005 09:28 » 

И после того, как этот подключаемый файл отработал, эта переменная должна измениться, но почему-то при очередном подключении этого файла, глоб. переменная не сохрангяет значения, которое было ей присвоено при прошлом подключении файла.
Всё правильно. Инклуд в чём то смахивает на функцию, о чём сказал RXL. И в твоём случае эта переменная при первом инклуде инициализируется каким то значением, а затем при втором инклуде она инициализируется заново с уже дефолтным значением. Прочитай внимательно и вдумчиво цитату RXL.
Цитата
В подключаемом файле используется (объявляется) глоб. переменнная, которая до этого нигде вообще не была объявлена.
ИМХО стоит объявить эту глобальную переменную не в подключаемом файле, а в файле в который ты подключаеш свою проверку. Тогда эта переменная будет видна всё время выполнения основного скрипта, не зависимо от того сколько раз на протяжении работы скрипта ты подключаеш файл с проверкой
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
PantiL
Гость
« Ответ #5 : 15-07-2005 12:12 » 

Инклуд ни чем не смахвает на функцию, это просто файл, содержимое которого интерпритатор ставит на место строки include "file.php"; Я не пойму в чем проблема возникает, я писал скрипт с довольно сложным ветвлением инклудов и никаких проблем не было. Проинициализируй перменные где-нибудь в начале скрипта, можно даже приинклудить файл с инициализацией и все дорлжно быть нормально.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #6 : 15-07-2005 12:23 » 

Цитата
Инклуд ни чем не смахвает на функцию
Ну так уж и ничем Улыбаюсь
Вот тебе пример :
В функцию ты подаёш параметр, который внутри неё и используеш.
В файл ты инклудиш другой файл, который и используеш внутри основного файла.

Неужто нет никакой похожести ? Ага
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #7 : 15-07-2005 12:29 » 

Кстати, nikedeforest, если в файле sp_csv.php ты делаеш только какие то проверки, то не проще ли реализовать это как функцию(функции) и проинклудить один раз в самом начале скрипта, а по ходу только вызывать нужную функцию ? ИМХО я бы только так и делал вместо того чтобы н раз инклудить один и тот же файл Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 15-07-2005 16:09 » 

index.php
Код:
<?php
if ( !isset($_SESSION[&#39;flag_start_rand&#39;]) | ($_SESSION[&#39;flag_start_rand&#39;] != 1) )
{
    print(
"Вызываю start_rand()");
    print(
"<br>" "product=" $GLOBALS[&#39;splist&#39;][0]);
    
include_once("start_rand.php");
}
?>

start_rand.php
Код:
<?php
global $flag_start_rand 1;
?>
« Последнее редактирование: 16-12-2007 17:43 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 15-07-2005 17:59 » 

А так можно делать, а то у меня кажется ругательства были на
Код:
<?php
global $flag_start_rand 1;
?>

И я делал так
Код:
<?php
global $flag_start_rand;
$flag_start_rand=1
?>

Кстати может именно из-за этого идет  сбрасывание значения переменной?
Код:
<?php
if ( !isset($_SESSION[&#39;flag_start_rand&#39;]) | ($_SESSION[&#39;flag_start_rand&#39;] != 1) )
{
    print(
"Вызываю start_rand()");
    print(
"<br>" "product=" $GLOBALS[&#39;splist&#39;][0]);
    
include_once("start_rand.php");
}
?>

Я делаю точно также, слово в слово Улыбаюсь.
« Последнее редактирование: 16-12-2007 17:45 от Алексей1153++ » Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 15-07-2005 19:17 » 

Твоя правда - в global присвоение недопустимо. По этому, да бы не путаться в правилах, я без всяких global делаю сразу $_GLOBAL['flag_start_rand'] = 1;
« Последнее редактирование: 16-12-2007 17:46 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 16-07-2005 10:23 » 

Цитата
По этому, да бы не путаться в правилах, я без всяких global делаю сразу $_GLOBAL['flag_start_rand'] = 1;
Я тоже так ofc делаю, только пишу $GLOBALS['flag_start_rand']=1 Улыбаюсь.
Ребята, дело труба. Нихрена не получается. Что такого в этом особенного не знаю. Вот что я попробовал делать (думал, что это наверняка).
файл sp_csv.php
Код:
if(!isset($GLOBALS['flag_start_rand']) | ($GLOBALS['flag_start_rand']!=1))
{print "Вызываю start_rand()";
print ("<br>"."product=".$GLOBALS['splist'][0]);
include_once ("start_rand.php");
$GLOBALS['flag_start_rand']=1;
}
Т.е. по сути дела, сейчас с глобальной переменной работает только один файл sp_csv.php, он проверяет переменную, он же ее изменяет в случае если надо, в других файлах нет даже упоминаний о ней. Но один хрен, значение переменной не сохраняется. ПОЧЕМУ?Не понялНе понялНе понялНе понял??
p.s. А не может влиять то, что в подключаемом файле sp_csv.php РНР скрипт идет в перемежку с HTML, т.е. файл имеет такую конструкцию
Код:
<html>
<head>
<?php
.....
?>

</head>
<body>
<?php
...
?>

</body>
</html>

« Последнее редактирование: 16-12-2007 17:46 от Алексей1153++ » Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 18-07-2005 18:37 » 

Народ, вы мне объясните пожайлуста вот какое дело. Если я использую суперглобальный массив $GLOBALS[], то все элементы этогно массива доступны в любой части скрипта? Т.е. я имею ввиду, что мне даже инклудить ненадо файл, в котором объявлялась и использовалась переменная, как с обычными переменными.
Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 18-07-2005 20:48 » 

nikedeforest, в описанной тобой ситуации - да. Вообще, если ты не знаешь все, что предполонгается делать в таком включаемом файле, или просто делаешь задел на будущее, то  стоит сделать этот отдельный файл. Правда, в таком случае проше сделать ф-ию и вынести ее в отдельный файл, который надо будет подгрузить, а из контрольной точки вызвать ф-ию. Если задача тривиальна и встречается в коде лишь раз, то лучше ее включитьк код.
Используй include_once()
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 21-07-2005 09:05 » 

Да вот даже по поводу in clude_once. Я думал, что если идет такой скрипт к примеру

файл ndex.php
Код:
include_once ("config.php");
include ("sp_csv.php");
...
include ("sp_csv.php");
...
include ("sp_csv.php");
..
файл sp_csv.php
Код:
include_once ("config.php");
...

Раньше я предполагал что инклудинг файла config.php произойдет всего один раз, когда мы его подключаем в самом начале файла index.php, а в остальных он подключаться не будет так все остальные подключения делаются на базе index.php, но оказалось, что файл config.php будет подключен здесь ровно  4 раза. Получается, что в данном случае include_once () бесполезен. А вот представьте теперь, что в config.php у меня инициализируется какая-то переменнная, которая потом изменяется в файле index.php и получается, что при каждом вызове config.php у меня происходит сброгс значения переменной, что же мне делать в этом случае, если мне не нужно, чтобы переменная сбрасывалась.
Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 21-07-2005 10:15 » 

Если ты подгружаешь файл через include_once() в программе и во всех подгружаемых файлах, то загружен файл будет только один раз. Ищи где у тебя остались include().

Совет: используй всегда форму include_once() или require_once(), за исключением специальных случаев, когда это требует логика программы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 21-07-2005 12:29 » 

Цитата
Ищи где у тебя остались include().
Да вроде нигде, но покапаюсь еще, потом напишу. Вот еще вопрос:
если у меня в файле index.php использовалась переменная, а затем я к нему подсоединяю другой файл (через include) и в этом присоединяемом файле я пытаюсь использовать переменную из index.php, то у меня ничего не выйдет, т.е. я буду юзать как локальную получается? Я так понимаю в этом случае надо использовать $GLOBALS?
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 21-07-2005 13:19 » 

Уже проверил по поводу дополнительных инклудов, как не крути файл инклудиться больше одного раза
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 21-07-2005 14:38 » 

По поводу $GLOBALS. Есть ли различие в том как я подключаю файл, т.е. различие вот в чем
include ("sp_csv.php");
include ("www.что-нибудь.com/sp_csv.php");
Я подключаю файл sp_csv.php вторым способом и в файле не могу работать с глобальными переменными (там их не видно), а вот другой файл я подключаю первым способом и там глобальные переменные видны. Может дело в способе подключения? Или это не влияет?
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 21-07-2005 15:54 » 

Народ, еще один вопрос. Я подключаю файл, при этом передаю ему параметр вот как я делаю
Код:
include ("www.что-нибудь.com/sp_csv.php?product=special");
Этот способ работает, но так я не могу работать с глобальными переменными. Как мне передать параметр, но при этом используя относительный адрес, т.е. так
Код:
include("sp_csv.php?product=special");
Но так делать нельзя (по крайней мере у меня так не работает, да и в мануале на рнр.нет написано что так нельзя). Но как мне сделать через отнгосительный адрес? Пробовал использовать set_include_path, но не помогло. Надежда только на вас Улыбаюсь.
Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 21-07-2005 20:20 » 

Уже проверил по поводу дополнительных инклудов, как не крути файл инклудиться больше одного раза
Проверяй пока не найдешь. Пойми: чудеса в природе встречаются, но они к программированию отношения не имеют. Ищи...
По поводу $GLOBALS. Есть ли различие в том как я подключаю файл, т.е. различие вот в чем
include ("sp_csv.php");
include ("www.что-нибудь.com/sp_csv.php");
Я подключаю файл sp_csv.php вторым способом и в файле не могу работать с глобальными переменными (там их не видно), а вот другой файл я подключаю первым способом и там глобальные переменные видны. Может дело в способе подключения? Или это не влияет?
Маны и еще раз маны!
Советую перестать извращаться и заняться изучением. Я и сам не мало намучился, пока вник в принципы языка - помогут только маны и эксперименты.
Если зайдешь в тупик - спрашивай, но только ты то же напрягайся.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 21-07-2005 20:29 » 

Я проверил неоднократно. Если адрес относительный, то к глобальным переменным я обращаюсь нормально, если же абсолютный, то ничего не выходит.
Мануал по include читал ни один раз и там пример есть и судя из него, нельзя передавать параметр при относительной адресации.
Я уже чего ни пробовал и писал об этом, но мои знания в этой области слижком малы, я не знаю к чему подобраться, не знаю какую функцию еще можно капать. Reqiure ядумаю не в счет, она вроде почти такая же как include. Ты хоть поттолкни в каком направлении искать.
ps. Ты меня за халявщика не держи, я искал долго, но сейчас я даже не знаю куда копать, и надеюсь на помощь тех кто с этим когда-то столкнулся.
« Последнее редактирование: 21-07-2005 20:34 от nikedeforest » Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 21-07-2005 20:36 » 

nikedeforest, если тебе кажется, что компьютер умнее тебя, то вариантов остается не так много....
Я все же пологаю, что компьютер - тупая железка. Переименуй свой загадочный файл в 'aaaaaaaaa.php' и создай файл 'нормальный.php':
Код:
<?php
print "Все очень плохо...<BR />";
include(&
#39;aaaaaaaaa.php&#39;);
Потом посмотри, как реально бывает.
« Последнее редактирование: 16-12-2007 17:47 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 21-07-2005 20:38 » 

не совсем понял. Если ты в смысле, что я мало пытался, то ты не прав. Я пытался вместо полного адреса типа www.djf.ru/sp_csv.php?product=special подставлять перед sp_csv?product=special dirname(), не помогло. Пробовал ставить точку, тупо сто раз пытался заставить прокатить include (sp_csv.php?product=special), но в замен всегда получаю
Цитата
Warning: main(sp_csv.php?product=special): failed to open stream: No such file or directory
Warning: main(): Failed opening 'sp_csv.php?product=special' for inclusion (include_path='.:/usr/local/lib/php')
« Последнее редактирование: 16-12-2007 17:48 от Алексей1153++ » Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 21-07-2005 20:47 » 

Смысл - в проверке каждой попытки  подгрузить файл.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 21-07-2005 20:53 » 

Я опять не понял что ты имеешь ввиду? Если такой момент, что типа я не узнаю подгружен файл или нет, то ты зря. Я вывожу сообщение о том, что файл подгружен и вывожу глобальные переменные.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 21-07-2005 21:04 » 

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

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #27 : 21-07-2005 21:07 » 

Смысл найти места, где он подгружается.
Коли, как ты утверждаешь, везде используется include_once(), то ищи место, где не так. Например, поставь перед кадым include_once() такое: print("ф-ия такая-то(): гружу файл такой-то<BR />");. В самом файле поставь: print("Типа я ту <BR />");.
Ищи, где эти надписи идут друг за другом, а где нет. Коли есть где нет, то и есть непросмотренный код.
Пользуйся поиском среди файлов по содержимомую
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 21-07-2005 21:09 » 

Нет, ты не понимаешь, я пробовал вообще не подгружать, тогда в этих файлах не видно переменных котоые мне нужны.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #29 : 21-07-2005 21:13 » 

Подгрузка скорее всего просто необходима, а переменные наверное не видны из-за того, что файл sp_csv.php я подключаю через абсолютный адрес, вот из-за чего скорее всего include_once подключает еще раз.
зы: короче мне просто необходимо каким-нибудь образом подключить файл через относительный адрес и чтобы при этом я мог передать значение переменной. Не ужели этого нельзя сделать?
« Последнее редактирование: 21-07-2005 21:17 от nikedeforest » Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 21-07-2005 22:55 » 

Пишу этот пост дабы мсключить взаимонепонимание.
1) мне необходимо подгружать файл используя относительный адрес, т.к. в случае использования абсолютного адреса в подключаемом файле глобальные переменные не видны (если есть по этому пункту разногласия обязательно пишите)
2)я не могу подключать файл через include() и reqiure() используя относительный адрес, т.к. я в адресе еще хочу передать переменную (выглядит примерно так include("sp_csv.php?product=special"); но это не работает, т.к. адрес должен быть абсолютным судя по мануала с php.net). (если есть по этому пункту разногласия обязательно пишите).
3)Всвязи с тем, что я не знаю других способов подключения файлов я в замешательстве. Может есть другие способы подключения, например я попробовал делать так
Код:
<script language="JavaScript"> document.write("<iframe src='sp_csv.php?product=special' name='medbaza' width='150' height='170' frameborder='no' scrolling='no'></iframe>"); </script>

Значение переменной передается, ошибки не выскакиваюм, но в этом случае я не вижу глобальных переменных, т.е. способ опят таки не подходит. Я уже много что попробовал, идеи пока кончились.
« Последнее редактирование: 15-12-2007 20:26 от Алексей1153++ » Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #31 : 22-07-2005 06:01 » 

Прошу прощения за то что вклинюсь немного в вашу дискуссию.
nikedeforest, как говорится, "нахрена козе баян ?"
Что то я тебя не пойму. Запарил ты со своими инклудами. Почему бы не сделать всё по другому ? Например функциями ?
Что вообще делает такого твой sp_csv.php что его необходиме инклудить множество раз (ты через пару месяцев сам в своих же инклудах заблудишся) ?  Изложи нормально задачу, а мы подумаем как это проще всего реализовать.
ЗЫ :
Цитата
Я подключаю файл, при этом передаю ему параметр вот как я делаю
Код:
include ("www.что-нибудь.com/sp_csv.php?product=special");
А вот так делать вообще не рекомендую. А также всякие там fopen("http://www.bla.bla").
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #32 : 22-07-2005 07:36 » 

Цитата
Что вообще делает такого твой sp_csv.php что его необходиме инклудить множество раз (ты через пару месяцев сам в своих же инклудах заблудишся) ?  Изложи нормально задачу, а мы подумаем как это проще всего реализовать.
Множесчтво раз он инклудиться, по той простой причине, что этот файл выводит фотографию и кратакое описание товара, плюсь ссылка "подробнее" (сами понимаете для чего). В файле происходит работа с БД типа csv. Инклудиться множество раз, по той причине, что на главной странице располагаются фотографии товаров (не всех, выборочно). Вот и все, и ничего особенного.
Цитата
Запарил ты со своими инклудами. Почему бы не сделать всё по другому ? Например функциями ?
Да откуда я знал, что это предоставит такие трудности. Сначала вообще был гемор с глобальными переменнными и очень долго я не мог врубиться в чем дело, как врубился, так появился другой гемор. На счет функции  у меня мельтишила идея, но я ее старательно отгонял, пытаясь найти выход через инклуд (интерес такой поганый взник, к тому же, работая над этим сайтом, я пытаюсь повысить свои маленькие знания по РНР).
Попробую через функцию, посмотрим.
Цитата
Я подключаю файл, при этом передаю ему параметр вот как я делаю

Код:
include ("www.что-нибудь.com/sp_csv.php?product=special");
А вот так делать вообще не рекомендую. А также всякие там fopen("http://www.bla.bla").
Почему? Вроде это документированная возможность.
Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #33 : 22-07-2005 08:33 » 

Множесчтво раз он инклудиться, по той простой причине, что этот файл выводит фотографию и кратакое описание товара, плюсь ссылка "подробнее" (сами понимаете для чего). В файле происходит работа с БД типа csv. Инклудиться множество раз, по той причине, что на главной странице располагаются фотографии товаров (не всех, выборочно). Вот и все, и ничего особенного.
Да откуда я знал, что это предоставит такие трудности. Сначала вообще был гемор с глобальными переменнными и очень долго я не мог врубиться в чем дело, как врубился, так появился другой гемор. На счет функции у меня мельтишила идея, но я ее старательно отгонял, пытаясь найти выход через инклуд (интерес такой поганый взник, к тому же, работая над этим сайтом, я пытаюсь повысить свои маленькие знания по РНР).
Попробую через функцию, посмотрим.
Да тут я только функцию и вижу Улыбаюсь
Почему? Вроде это документированная возможность.
Да, документированая, но админы в компании в которой я работаю, такую возможность как fopen(url) запретили. Сказали что это дыра в безопасности и открытая дорога для эксплойтов различных Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #34 : 22-07-2005 08:34 » 

Кстати, насчёт твоих глобальных переменных, а почему бы не хранить эти значения например в сессии ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 22-07-2005 11:37 » 

Цитата
Кстати, насчёт твоих глобальных переменных, а почему бы не хранить эти значения например в сессии ?
если ты емеешь ввиду массив $_SESSION[], то я по началу там и пытался хранить, но столкнулся с тем, что не вижу переменных и перешел на $GLOBALS[], потом и с $GLOBALS я столкнулся с тем же самым, но стал уже копать в эту сторону.
По поводу $_SESSION[] меня еще смутило, что как я понял из мануала если я занес туда значение в скрипте, то сразу же не могу пользоваться этими значениями, пока странмица не будет перезагружена (т.е. по сути F5 надо нажать). Я не знаю правильно я понял или нет, просвяти меня в этом вопросе.
Цитата
Да тут я только функцию и вижу 
Ну раз другого выхода нет и раз уж я так всех здесь задолбал с этими инклудами Ага, то буду делать через функцию, посмотрим, что получиться.
Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #36 : 22-07-2005 15:21 » 

$_SESSION - обычный суперглобальный массив - никаких шаманских штучек не предусмотрено, разве что одна: автоматическое сохранение и востановление при запуске и заершении скрипта. Не забудь в начале скрипта поставить session_start().
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #37 : 22-07-2005 21:00 » 

Как правильно написать следующее
Код:
print $GLOBALS['splist'][$i]."|";
Так не выводится, хотя значение там есть, проверено.
зы:Ребята, подождите часов 20 (для поспать,  поесть и потестировать) и я вам кажется напишу, что я недавно крупно облажался. Но пока все не проверю не напишу Ага.
« Последнее редактирование: 15-12-2007 20:27 от Алексей1153++ » Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #38 : 23-07-2005 10:15 » 

Как правильно написать следующее
Код:
print $GLOBALS['splist'][$i]."|";
Так не выводится, хотя значение там есть, проверено.
Ты уверен что там значение еть ?
Сделай так :
Код:
print_r($GLOBALS);
print "<hr>";
print_r($GLOBALS['splist']); //Особенно интересует что ты здесь на выводе получиш
print "<hr>";
print "\$i variable is : " . $i;
print "<hr>";
print $GLOBALS['splist'][$i]."|";
Тогда и станет понятно тебе (я надеюсь), в чём твоя ошибка.
« Последнее редактирование: 15-12-2007 20:28 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #39 : 23-07-2005 18:10 » 

Когда я пишу так
Код:
for($i=0;$i<count($GLOBALS['splist']);$i++)
{
$temp=$GLOBALS['splist'][$i];
print $temp."|";
}
то выводиться то что и должно выводиться, когда делаю так
Код:
for($i=0;$i<count($GLOBALS['splist']);$i++)
print $GLOBALS['splist'][$i]."|";
то кроме "|" ничего не выводиться.
зы:  По поводу ошибки пока молчу, до тех пор, пока во всем не удостоверюсь, но кажется будет смешно.
Твой способ попробую, о результате напишу
« Последнее редактирование: 15-12-2007 20:29 от Алексей1153++ » Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #40 : 26-07-2005 09:16 » 

По поводу ошибки, проведено исследование и  вынесен (мною Улыбаюсь ) вердикт, что проблема сложившаяся здесь, была следствием совокупности ошибок (а не одной глупой, как я сначала думал). Все эти ошибки вызваны, моей неграмотнотью в РНР, о чем я дико сожалею, но этого и следовало ожидать.
Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #41 : 26-07-2005 11:13 » 

Ну вот и чудненько что разобрался Улыбаюсь А по оводу неграмотности, так это дело наживное. Самая распространённая ошибка - это элементарная НЕВНИМАТЕЛЬНОСТЬ Ага
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #42 : 11-08-2005 14:05 » 

Все таки не избежать этого вопроса. Когда я пишу так
Код:
include("http://www.blabla.ru");
То в итоге, в файле в котором я так сделаль я не могу обратиться нормально к переменным ("нормально"-это в смысле если бы я этот файл подключал бы используя относительный адрес). Я пробовал обратиться к переменным таким образом
Код:
$GLOBALS['<имя переменной>'];
Но и так у меня ничего не вышло. Внимание вопрос : можно ли ввобще обратиться к переменным файла, который подключается с использованием абсолютной адресации. Если можно, то как?
зы: предчувствую вопрос, типа : "А зачем через абсолютную?". Я бы и не загонялся, но это требование суппорта хостинга, для того, чтобы скрипт запускался автоматически по таймеру.
« Последнее редактирование: 15-12-2007 20:30 от Алексей1153++ » Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #43 : 11-08-2005 19:56 » 

Хммм...
совершенно я не понял проблемы. Отвечу на часть которую понял. Другую часть попробуй по другому формулировать.
Все таки не избежать этого вопроса. Когда я пишу так
Код:
include("http://www.blabla.ru");
То в итоге, в файле в котором я так сделаль я не могу обратиться нормально к переменным ("нормально"-это в смысле если бы я этот файл подключал бы используя относительный адрес). Я пробовал обратиться к переменным таким образом
Код:
$GLOBALS['<имя переменной>'];
Но и так у меня ничего не вышло.
А тут ты и не получаеш никакого скрипта. Если я не ошибаюь, то при попытке сделать include("http://www.blabla.ru/bla.php"); ты инклудиш не пхп сорс файла bla.php, а вего лиш хтмл, который тебе отдаёт сервер с http://www.blabla.ru/ . Т.е. перед тем как его тебе отдать, сервер предварительно его парсит и отдаёт тебе уже результат.
« Последнее редактирование: 15-12-2007 20:31 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #44 : 12-08-2005 11:42 » 

Т.е. получается, что таким образом конфигурационные файлы (мои самодельные) не подключаются ввобще?
Тогда даже не знаю как понять совет суппорта: "А Вы измените в инклуде относительный адрес на абсолютный, а то наш кронтаб не знает каккая дирректория является  текущей". Ихние проблемы я понимаю, но что делать со своими? Жаль. Интересно, а прокатит, если использовать функцию (название не помню, что-то типа set_current_...) которая назначает текущий каталог? Хотя там по дефолту стоят вроде как нормальные значения. Ну это я уже буду думать сам, Мороз спасибо, на самую суть моего вопроса ты ответил.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #45 : 12-08-2005 12:02 » 

Название функции вспомнил-set_include_path()
Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #46 : 12-08-2005 12:16 » 

nikedeforest, ты путаешь понятия: абсолютный путь к локальному файлу и URL - это разные вещи.
Абсолютный путь к файлу выглядит так:
а) для винды: диск:\полный_путь\имя_файла
б) для *nix: /полный_путь/имя_файла

URL - "универсальное расположение ресурса" - файлы туда могут попасть только так:
а) винда: file://диск:/путь/имя
б) *nix: file:///путь/имя
Только в твоем случае это не нужно - тебе нужен абсолютный путь к локальному файлу.

На всякий случай: запись типа include("file.php") задает относительный путь, а include("/var/www/html/file.php") - абсолютный.

« Последнее редактирование: 12-08-2005 12:19 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #47 : 12-08-2005 13:06 » 

Бррр, перевариваю.
Но тогда уточню (я это уточнял у суппорта), они имеют ввиду следующее - изменить
include("config.php"); на include("http://www.blabla.ru/config.php"); Я так делал, врезультате чего терял возможность обращение к переменным объявленным в файле config.php.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #48 : 12-08-2005 13:17 » 

Кстати, суппорт щас ответил, что set_include_path() вполне может спасти ситуацию, что есть ГУД Улыбаюсь.
Записан

ещё один вопрос ...
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines