глобальная переменная, не определяемая в тарабарщине, включает

Резюме: У меня (php beginner) есть проблема, когда global variable не определяется в определенном include gator::display("main_filelist.php", $params) который кажется функцией. Другие включают в то же самое не имеют этой проблемы. //

Я использую File Manager под названием FileGator на моем сайте.

В этом Файловом Менеджере есть файл main.php который является страницей, на которой находятся все пользователи, когда они хотят перемещаться по папкам или загружать / загружать / манипулировать файлами.

Теперь этот файл main.php содержит несколько других php-файлов (для конфигураций, шаблонов, таблиц …). Также в этом файле main.php , в самом начале файла, у меня есть функция, которая определяет глобальную переменную с именем $ getprivileges .

часть main.php :

 <!-- Determine User's permissions on current directory --> <?php $directory = $_SESSION['cwd']; // current directory $user = $_SESSION['simple_auth']['username']; // get username $repository = gatorconf::get('repository'); // get base repertory of the file manager $userdir = $repository.DS.'user'.DS.$user; // user's repertory $getprivileges = scanDirectory($userdir, $directory); function scanDirectory($userdir = '', $directory){ $folders = glob($userdir . '/*' , GLOB_ONLYDIR); foreach($folders as $folder){ if (($folder == $directory && gator::checkPermissions('r')) || (gator::checkPermissions('ru')) || ($userdir == $directory && gator::checkPermissions('r'))) { return true; } $scan_result = scanDirectory($folder, $directory); if($scan_result) { return true; } } return false; } scanDirectory($userdir, $directory); if ((gator::checkPermissions('ru')) || ($userdir == $directory && gator::checkPermissions('r'))) { $getprivileges = true; } ?> ...code ...more code <?php gator::display("main_filelist.php", $params)?> ...code again 

Поскольку моя переменная $getprivileges является глобальной и находится в верхней части файла, она должна учитываться всеми остальными, включенными в эту страницу, и она применяется для каждого из включений, кроме одного.

FileGator не включает в себя его файлы классическим способом, который выглядит так, поскольку включение, которое вызывает у меня проблемы, имеет эту форму: <?php gator::display("main_filelist.php", $params)?>

После некоторого рытья, чтобы узнать смысл этой тарабарщины (обратите внимание, что FileGator больше не предоставляет расширенную поддержку и что в моей проблеме ограничены часто задаваемые вопросы), вот информация, которую я мог бы собрать, чтобы попытаться решить это:

gator::display() выглядит как функция, определенная в файле с именем file-gator.php, которая также является страницей, которая генерирует мой файл main.php (например, если я не зарегистрирован, он может отображать login.php вместо ). Вот что я могу найти о gator::display() в этом file-gator.php :

 <?php> class gator { public static function display($view, $params = null){ require_once gatorconf::get('base_path')."/include/views/".$view; } } <?> 

И вот часть main_filelist.php чтобы вы могли видеть, какие $ params используются для:

 <table class="file-list"> <?php $i = 1;?> <tbody> <?php if(!empty($params['dirs'])) foreach ($params['dirs'] as $file):?> <?php if (($file['name'] == "user") && ($_SESSION['cwd'] == gatorconf::get('repository'))):?> <?php else:?> <tr class="directory <?php if ($file['type'] == "back") echo 'back-button';?>"> <?php if ($getprivileges == true): ?> <?php if ($file['type'] != 'back' && $file['type'] != 'user'):?> <td class="chkboxes"><input type="checkbox" name="<?php echo $i++;?>" value="<?php echo $file['crypt']?>" /></td> <?php elseif ($file['type'] == 'user'):?> <td class="chkboxes"><a class="user" href="?cd=<?php echo $file['link']?>"></a></td> <?php else:?> <td class="chkboxes"><a class="back" href="?cd=<?php echo $file['link']?>"></a></td> <?php endif;?> <?php else:?> <?php if ($file['type'] != 'back' && $file['type'] != 'user'):?> <td class="chkboxes"><a class="folder" href="?cd=<?php echo $file['link']?>"></a></td> <?php elseif ($file['type'] == 'user'):?> <td class="chkboxes"><a class="user" href="?cd=<?php echo $file['link']?>"></a></td> <?php else:?> <td class="chkboxes"><a class="back" href="?cd=<?php echo $file['link']?>"></a></td> <?php endif;?> <?php endif;?> 

Так что файл main_filelist.php, включенный в мой main.php, включен через функцию require_once ( gatorconf::get('base_path') – это всего лишь путь установки файлового менеджера), за исключением этой require_once function видимо, внутри функции public static function display с переменной $param поверх require_once …

Я уверен, что именно по этой причине моя переменная не работает для того, чтобы код был включен этой функцией.

Если я заменил gator gator::display("main_filelist.php", $params) gator::display("main_filelist.php") большая часть кода не будет работать.

Но если я заменил gator::display("main_filelist.php", $params) классическим include include('main_filelist.php') тогда большая часть кода будет выполнена, и я действительно смогу увидеть, что моя переменная $getprivileges Счет.

  • Почему моя переменная $getprivileges не работает с этим типом include? (отладка сообщает мне, что переменная не определена для кода, включенного gator::display("main_filelist.php", $params) )
  • Как я могу заставить свою переменную работать без изменения способа ее включения в $params ? (Я боюсь нарушить код, и есть вероятность, что я должен сделать это для другого файла в будущем, на котором у меня может не быть выбора)

Извините за длину этого сообщения, я стараюсь дать как можно больше информации, и я на самом деле очень много размышляю, повторяя эту ситуацию.

Кроме того, я новичок в php, поэтому не стесняйтесь давать столько деталей, сколько хотите, если у вас есть предложения: s Большое спасибо за вашу помощь!

-apatik

Обновить :

Я добавил этот код в файл main-filelist.php (включенный файл, который не получил бы мою $getprivilege и пока это выглядит нормально! Идти, чтобы проверить все возможности.

 <?php $directory = $_SESSION['cwd']; $user = $_SESSION['simple_auth']['username']; $repository = gatorconf::get('repository'); $userdir = $repository.DS.'user'.DS.$user; $getprivileges = scanDirectory($userdir, $directory); if ((gator::checkPermissions('rw')) || ($userdir == $directory && gator::checkPermissions('r'))) { $getprivileges = true; } ?>