Не удается получить доступ к переменной из включенного PHP скрипта
Я пытаюсь получить доступ к переменной $defaultPath из php-скрипта, который я включил.
Однако, когда я пытаюсь повторить переменную, появляется ошибка с указанием неопределенной переменной. Php-скрипт-это в основном навигационная панель (назовем ее так navbar.php) и это включает в себя helper.php именно здесь находится переменная $defaultPath. Более того, navbar.php входит в состав index.php в котором index.php также включает в себя helper.php. Я использовал include_once, чтобы включить helper.php в обоих случаях navbar.php и еще index.php но только index.php может Эхо переменная но не navbar.php
Вот коды:: Navbar.php
<?php include_once __DIR__ . '/../../helpers/helper.php'; echo $defaultPath . "</br>"; ?> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Interactive Digital Experience</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link rel="stylesheet" href="/capstone-project/style.css"/> </head> <body> <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> <div class="container"> <a class="navbar-brand mb-0 h1" href=<?php echo pageUrl("index.php", $defaultPath)?>>ICT Open House</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse justify-content-end" id="navbarNavAltMarkup"> <div class="navbar-nav"> <a class="nav-item nav-link" href="<?php echo pageUrl("index.php", $defaultPath) ?>">Courses<span class="sr-only">(current)</span></a> <a class="nav-item nav-link" href="<?php echo pageUrl("quiz.php", $defaultPath) ?>">Course Quiz</a> <a class="nav-item nav-link" href="<?php echo pageUrl("tour.php", $defaultPath) ?>">Tour Map</a> </div> </div> </div> </nav>
Helper.php
<?php $defaultPath = ($_SERVER['SERVER_NAME'] == 'localhost') ? '/capstone-project/' : '/' ; function subview($file) { $file = __DIR__ . '/../views/sub-views/'. $file; include_once $file; } function cssPath($file, $defaultPath) { $hrefPath = $defaultPath .'assets/css/'. $file; return $hrefPath; } function jsPath($file, $defaultPath) { $hrefPath = $defaultPath . 'assets/js/'. $file; return $hrefPath; } function pageUrl($file, $defaultPath) { $httpProtocol = !isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on' ? 'http' : 'https'; $url = $httpProtocol . '://' . $_SERVER['HTTP_HOST'] . $defaultPath; if ($file !== 'index.php') { $url .= 'views/' . $file; } return $url; } ?>
Index.php
<?php include __DIR__.'/helpers/helper.php'; ?> <!DOCTYPE html> <html lang="en"> <?php subview('header.php') ?> <main class="container"> <header> <h1>Fullscreen Landing Page</h1> </header> <section class="courses"> <div class="row justify-content-center"> <div class="col-xs-6 col-md-4 bg-primary">Course 1</div> <div class="col-xs-6 col-md-4 bg-primary">Course 2</div> <div class="col-xs-6 col-md-4 bg-primary">Course 3</div> <div class="col-xs-6 col-md-4 bg-primary">Course 4</div> <div class="col-xs-6 col-md-4 bg-primary">Course 5</div> </div> </section> </main> <?php subview('footer.php') ?> </html>
Примечание: Я не пытаюсь получить доступ к переменной внутри области действия функции.
Что я уже пробовал:
Я попытался изменить его обратно на include, но ошибка возникает из-за повторяющихся функций.
Я также попробовал Эхо-Инг переменной $defaultPath в index.php и нет никаких неопределенных ошибок, но когда я пытаюсь сделать это в navbar.php это дает мне неопределенную печаль
Richard MacCutchan
Я не специалист по PHP, но вы уверены, что включенный файл нуждается в <?php
и ?>
бирки вокруг него?
Richard Deeming
Вы уверены, что включенный файл действительно найден? Вы можете попробовать использовать require_once
вместо include_once
, так что вы получите ошибку, если файл не может быть найден.