Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Функция: передать аргумент внутрь включенного файла через require
Форумы портала PHP.SU » » Вопросы новичков » Функция: передать аргумент внутрь включенного файла через require

Страниц (1): [1]
 

1. code_maker - 17 Сентября, 2014 - 13:51:34 - перейти к сообщению
Есть сайт, с автоматизацией вывода некоторой информации из бд. Структура: несколько пхп файлов объединненых индексом, с пересылкой переменных внутри методом GET.

Делаю еще один index.php, старый индекс переименовываю в main.php.

Код в новом индексе:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  <?php
  2.    $idc="somecompany";
  3.  function site_exec()
  4.  {
  5.      require_once '../некий путь/main.php';  
  6.  }
  7.    site_exec($idc);

$idc работает только в пределах данного файла index.php.
Как мне $idc передать внутрь не только main.php, но и других файлов (не всех, какие понадобятся в процессе).
Метод GET я не понимаю как тут использовать, да и POST - все примеры через формы.
Буду благодарен просто за ссылку на то куда копать. Функции в новинку еще.

Может вообще через сессию сделать?
2. Tyoma5891 - 17 Сентября, 2014 - 14:13:11 - перейти к сообщению
запишите $idc в куки вот функция
3. IllusionMH - 17 Сентября, 2014 - 14:23:10 - перейти к сообщению
code_maker, вы вызываете функцию с параметром, а она его вообще ожидает?
4. code_maker - 17 Сентября, 2014 - 14:34:55 - перейти к сообщению
Tyoma5891
решил сделать session_start(), через куки нельзя эту инфу записывать.

IllusionMH
хотел ожидание сделать внутри подключаемого файла. то есть там сделал _REQUEST этого аргумента. Но то ли я что-то не так понимаю в работе функций. то ли просто так нельзя делать.
Делаю через session_start.
Сделал так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $_SESSION['idc'] = "somecompany";
  3.           require_once '../некий путь/main.php';  
  4.  

Теперь переменную видно где угодно, через $_SESSION. Но еще взамен получил очередную ошибку новичков -
session_start(): Cannot send session cache limiter - headers already sent
Проверил файл, нет ли там доп. символов. Кодировку поменял еще раз. Все равно выскакивает. Делаю session_start сразу после <?php, без лишних пробелов.
Если в файле хтмл код, то делаю закрытие ?>, но ошибка есть.
5. Tyoma5891 - 17 Сентября, 2014 - 15:10:02 - перейти к сообщению
code_maker пишет:
Tyoma5891
решил сделать session_start(), через куки нельзя эту инфу записывать.


это почему это? данные переменной сессий будут одинаково доступны, только во время ее работы, так само можно и настроить куки на определеное время жизни...
6. DelphinPRO - 17 Сентября, 2014 - 15:13:02 - перейти к сообщению
>> $_SESSION['idc'] = "somecompany";

В $GLOBALS['idc'] пишите. она тоже глобальная Улыбка Разумеется, если переменная нужна в пределах одного запроса
7. IllusionMH - 17 Сентября, 2014 - 17:59:20 - перейти к сообщению
code_maker, если вы передаете параметры в функцию, не пробовали их описывать в объявлении функции?
8. code_maker - 18 Сентября, 2014 - 08:58:49 - перейти к сообщению
Tyoma5891
я к тому что куки же на стороне пользователя создаются? заказчик против такой реализации, плюс он легко читает код. С одной стороны задачи четкие и понятные, с другой полный контроль над выполнением.

DelphinPRO
ваш вариант не сработал. В main.php есть инклуды, плюс с нее идет переход на обработчик через аякс. много я там нагородил)) по идее в обработчике надо принять переменную и еще на одной странице. Ну и на Main.php. В итоге 3 страницы всего.
я постом хотел сначала. Но примеры нашел только через формы. а у меня нет форм, только индексы имеющие разные значения переменной.

IllusionMH
если я вас правильно понял:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.  
  4. function site_exec()
  5. {
  6. $idc="somecompany";    
  7. require_once '../некий путь/main.php';  
  8. }
  9.   site_exec($idc);

пробовал, не сработало. А если неправильно понял, то буду благодарен за уточнение.


У меня по пути возникла еще такая глупая проблема.
Файл index.php может быть где угодно. Он ссылается на папку с сайтом-шаблоном.
Там есть файл main.php с относительными путями (хидер и футер подгружаю).
при переходе на сайт через индекс, хидер и футер не подгружаются.
Делаю костыль - еще один индекс внутри папки, ссылаюсь через основной индекс на него и внутри костыля делаю абсолютные пути.
Тогда все грузится нормально, а при переходе внутри сайта нас незаметно скидывает на main, который после первого щелчка по меню уже корректно отображается.
Сделать в main абсолютные пути пробовал - крашится.

p.s с ошибкой сессий разобрался - надо было ее открывать в файле к которому инклуды подкючаются.
9. IllusionMH - 18 Сентября, 2014 - 11:39:06 - перейти к сообщению
code_maker, нет.
CODE (htmlphp):
скопировать код в буфер обмена
  1. function site_exec($idc) {

этого достаточно чтобы параметр который передается в функцию был виден внутри файла как $idc
10. code_maker - 18 Сентября, 2014 - 12:59:53 - перейти к сообщению
IllusionMH в пределах текущего файла да. а в main.php мне говорят Undefined variable.
11. Sail - 18 Сентября, 2014 - 13:05:57 - перейти к сообщению
code_maker пишет:
Как мне $idc передать внутрь не только main.php, но и других файлов (не всех, какие понадобятся в процессе).

Если переменная определяется/инициализируется в файле, то она без проблем доступна во всех подключаемых через include или require файлах, если подключение осуществляется после инициализации.
Если надо использовать эту переменную в теле функции, то эту переменную надо либо передавать в функцию как параметр, либо в теле функции объявлять эту переменную глобальной.
Применительно к участку кода из первого сообщения, примерно так:
PHP:
скопировать код в буфер обмена
  1.  $idc="somecompany";
  2.  function site_exec()
  3.  {
  4.      global $idc;
  5.      require_once '../некий путь/main.php';  
  6.  }
  7.    site_exec();

Или, если вникнуть в сообщение IllusionMH:
PHP:
скопировать код в буфер обмена
  1.  $idc="somecompany";
  2.  function site_exec($idc)
  3.  {
  4.      require_once '../некий путь/main.php';  
  5.  }
  6.    site_exec($idc);


И в теле функции, однако, лучше использовать не require_once, а include_once, особенно, если путь формируется "на лету"...
12. IllusionMH - 18 Сентября, 2014 - 13:17:15 - перейти к сообщению
code_maker, да ну?
test.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $internal = 'Works';
  3. function test($external) {
  4.         require('./main.php');
  5. }
  6. test($internal);

main.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. echo($external);
13. code_maker - 18 Сентября, 2014 - 13:43:42 - перейти к сообщению
SailIllusionMH спасибо! у меня наступило просветление по поводу функций!
для тех страниц что подключаются напрямую - работает.
14. esterio - 18 Сентября, 2014 - 18:24:26 - перейти к сообщению
[зануда ON]
Sail пишет:
И в теле функции, однако, лучше использовать не require_once, а include_once, особенно, если путь формируется "на лету"...

Дайте угадаю - потому что require подключаеться до испонения скрипта, а include во время?
должен вас огорчить. когда-то так и было, но сейчас они отличаються только уровнем ошибок, когда файл не найден
[зануда OFF]

 

Powered by ExBB FM 1.0 RC1