Особенности require 2

light83

Новичок
Спрошу тоже в этой теме, ситуация похожая.
Встретился с какими-то чудесами require_once.
Конфиг: nginx+apache, все php-запросы уходят в apache.
Скрипт подключает к себе 2 конфиг-файла через require_once.
Если запрос по site.ru/script.php - все ок
Если запрос по username.site.ru/script.php (nginx такой запрос переадресовывает на apache точно также, docroot при этом стоит такой же как в предыдущем случае) то файлы подключаются, но в одном из них не видны переменные. В то же время файл подключен, его функии видны как через function_exists, так и через работу, они работают. А вот переменные и define определенные в подключенном файле, не видны. Как такие чудеса возможны? Причем из второго подключенного файла видны и функции и переменные.
Еще если в 1-ый подключаемый файл вставить if($_GET['test']=='1') echo 'test called'; то при прямом вызове файла работает, при вызове site.ru/script.php?test=1 работает. Но при вызове username.site.ru/script.php?test=1 - нет! В то же время если во второй подключаемый файл написать эту строку, будет работать и через username.site.ru.
Я даже не знаю что предположить. Ошибок никаких в логах нет, да и require_once не позволило бы запустить скрипт если бы файлы не подключились.
 

radioheaded

PHP нуб
Покажите код. Наверняка что-то с областью видимости, но телепативизор сегодня барахлит, к сожалению.
 

fixxxer

К.О.
Партнер клуба
могу предположить, что на субдоменах делается реврайт с потерей query string
 

light83

Новичок
Покажите код. Наверняка что-то с областью видимости, но телепативизор сегодня барахлит, к сожалению.
Там файл на 1200 строк. Но структура проста: вверху $a=1; , дальше идут функции. То есть определение не внутри какой-либо функции или класса. В файле к которому подключено, это самое $a используется напрямую, не в функциях, а классы и вовсе не используются. К тому же $_GET тоже не виден, хотя суперглобальный.
могу предположить, что на субдоменах делается реврайт с потерей query string
Если бы так, то второй подключаемый файл тоже бы не видел строку запроса. Однако он видит.
Видимо придется поставить php как fastcgi, может поможет.
 

radioheaded

PHP нуб
Так упростите, чтобы найти проблему. Возьмите два файла, в каждом по одной переменной и по одной простой функции и отлаживайте. Я, честно говоря, по описанию так и не смог понять, в каком из файлов что не видно и не работает. Привели бы простенький пример, было бы понятнее в разы.
 

light83

Новичок
Вроде разобрался, если изменить имя include-файла с com.inc.php на comtest.inc.php, работает. Но все равно непонятно. com.inc.php точно также подключается, функции работают а переменные не видны. Ну хоть решение нашлось, правда странное.
 
Сверху