我正试图从目录中的文件列表中生成开关。
我有目录树
../pages/
-home.php
-about.php
-service.php
-contact.php
../system/
-error404.php
-index.php
-functions.php我希望在open_page()函数functions.php中生成开关语句,以便将文件从页面包含到index.php中。
我需要在functions.php中生成这个函数:
open_page($page){
switch ($page) {
case '': require_once("pages/home.php"); break;
case 'home': require_once("pages/home.php"); break;
case 'about': require_once("pages/about.php"); break;
case 'service': require_once("pages/service.php"); break;
case 'contact': require_once("pages/contact.php"); break;
default: require_once("system/error404.php"); break;
}
}我的尝试:
//get all pages from dir PAGES
foreach (glob("pages/*.php") as $path) {
$file = explode("/", $path);
$filename = explode(".", $file[1]);
$pages[] = $filename[0];
}
switch ($page) {
case '': require_once("pages/home.php");
break;
foreach ($pages as $page){
case '{$page}': require_once ("pages/"{$page}".php");
}
default: require_once("system/error404.php");
break;
}提前谢谢你。
编辑:
index.php
<?php
include 'functions.php';
?>
<html>
<body>
<div id="menu">
<a href=index.php?page=home>Home</a>
<a href=index.php?page=about>About</a>
<a href=index.php?page=service>Service</a>
<a href=index.php?page=contact>Contact</a>
</div>
<div id="content">
<?php
open_page($_GET['page']);
?>
</div>
</body>
</html>发布于 2013-07-03 14:38:05
这并不是关于如何在开关中执行循环的真正答案,但我相信您可以通过这样做来解决问题:检查文件是否存在。如果是的话,你就装。如果没有,则加载错误页。
function open_page($page = 'home') {
if (empty($page)) {
$page = 'home';
}
$file = "pages/{$page}.php"
if (file_exists($file)) {
require_once($file);
} else {
require_once("system/error404.php");
}
}发布于 2013-07-03 14:37:52
不需要开关。
if($page=='')
$page = 'home';
$filename = "/path/to/{$page}.php";
if (file_exists($filename)) {
require_once($filename);
} else {
require_once("system/error404.php");
}发布于 2013-07-03 14:40:27
对于switch块来说,逻辑是有缺陷的。
相反,你可以做这样的事情:
$page = basename($page);
if(empty($page)) {
$page = "home";
}
if(file_exists("pages/{$page}.php")) {
require_once("pages/{$page}.php");
else {
require_once("pages/error404.php");
}编辑:注意我是如何围绕$page变量使用basename的。这是相当重要的,这样您的$page就不能像../../some-other-file.php那样了。
https://stackoverflow.com/questions/17450781
复制相似问题