Как проверить, не указана ли переменная URL-адреса или нет? Например, если я ../index.php?page=skillsa
неверный URL-адрес на своем веб-сайте: " ../index.php?page=skillsa
". Для этого я получаю сообщение об ошибке:
Предупреждение: include_once (views/skillsa.php): не удалось открыть поток: нет такого файла или каталога в /opt/lampp/htdocs/tut01/index.php в строке 22
Как я могу обрабатывать этот тип ошибок в следующем коде?
<?php
//error reporting
error_reporting(E_ALL);
ini_set("display_errors", 1);
//class for variables
include_once "classes/Page_Data.php";
$pageData = new Page_Data();
//
$pageData->title = "Portfolio site";
$pageData->content = include_once "views/navigation.php";
$pageData->css = "<link href='css/layout.css' rel='stylesheet'/>";
//url variables
$navigationIsClicked = isset($_GET['page']);
if($navigationIsClicked) {
$fileToLoad = $_GET['page'];
} else {
$fileToLoad = "home";
}
$pageData->content .= include_once "views/$fileToLoad.php";
//embedded style
$pageData->embeddedStyle = "
<style>
nav a[href *= '?page=$fileToLoad'] {
background-color: white;
}
</style>";
$page = include_once "templates/page.php";
echo $page;
EDIT: Или я могу просто использовать массив для хранения всех переменных URL?
Обновленный код:
<?php
//error reporting
error_reporting(E_ALL);
ini_set("display_errors", 1);
$page_files=array( 'home', 'skills', 'projects', '404');
//class for variables
include_once "classes/Page_Data.php";
$pageData = new Page_Data();
//
$pageData->title = "Portfolio site";
$pageData->content = include_once "views/navigation.php";
$pageData->css = "<link href='css/layout.css' rel='stylesheet'/>";
//url variables
if(isset($_GET['page'])) {
if (in_array($_GET['page'], $page_files)) {
$fileToLoad = $_GET['page'];
} else {
$fileToLoad = '404';
}
} else {
$fileToLoad = 'home';
}
$pageData->content .= include_once "views/$fileToLoad.php";
//embedded style
$pageData->embeddedStyle = "
<style>
nav a[href *= '?page=$fileToLoad'] {
background-color: white;
}
</style>";
$page = include_once "templates/page.php";
echo $page;
Я не уверен, что это то, что вы хотите, но это то, что я думаю, вы хотите.
//url variables
if(isset($_GET['page'])) {
if (in_array($_GET['page'], $page_files)) {
//basename returns only the filename part of a path ~ might have to check this
// when using just text such as "somepage", it used for things like "../../somepage"
// and returns just "somepage"
$fileToLoad = "views/".basename( $_GET['page'] ) .".php";
//echo $fileToLoad;
if(!file_exists( $fileToLoad ) ){
$fileToLoad = "views/404.php";
}
} else {
$fileToLoad = "views/404.php";
}
} else {
$fileToLoad = "views/home.php";
}
$pageData->content .= include_once $fileToLoad;