Резюме: У меня (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; } ?>