我有一个简单的if语句适用于我的本地机器但是当我上传它tom ypaid site我在我的主页上出错了。
错误:
Warning: include(./pages/.php) [function.include]: failed to open stream: No such file or directory in /home/a5410474/public_html/index.php on line 33
Warning: include() [function.include]: Failed opening './pages/.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/a5410474/public_html/index.php on line 33
守则:
<?php
if (isset($_GET['p']) && $_GET['p'] != NULL || $_GET['p'] != '') {
$p = mysql_real_escape_string($_GET['p']);
}elseif ($_GET['p'] == '' || $_GET['p'] == NULL){
$p = 'home';
}
include("./pages/".$p.".php");
?>
答案 0 :(得分:4)
而不是OR,你需要AND在这里,也将后半部分包含在parens中。
if (isset($_GET['p']) && $_GET['p'] != NULL || $_GET['p'] != '') {
// should be
if (isset($_GET['p']) && ($_GET['p'] != NULL && $_GET['p'] != '')) {
你没有else
个案,而且传递给`$ _GET ['p']的值很可能都不符合条件。
最好使用empty()
if (isset($_GET['p']) && !empty($_GET['p']) {
$p = mysql_real_escape_string($_GET['p']);
}
else $p = 'home';
答案 1 :(得分:3)
一种不那么冗长的写作方式:
$p = empty($_GET['p']) ? 'home' : $_GET['p'];
include("./pages/{$p}.php");
其他一些说明:
您不应该对要传递给mysql_real_escape_string
的变量使用include
。该函数用于准备插入SQL查询的数据。
您不应该include
基于通过查询字符串或任何类型的用户输入传递的变量的文件。有人可以使用它来读取服务器上的系统文件,然后控制整个计算机。
答案 2 :(得分:1)
您应该更了解目录遍历,清理用户输入,并确保文件就在那里。 (重新:你的错误):
<?php
if (isset($_GET['p'])) {
$p = preg_replace('/[^a-zA-Z0-9_]/s', '', $_GET['p']);
} else {
$p = 'home';
}
$path = "./pages/" . $p . ".php";
if (file_exists($path) === true) {
include $path;
} else {
include './pages/notfound.php';
}
答案 3 :(得分:-1)
你也可以试试这个:
<?php
$p = 'home';
if (!empty($_GET['p']))
$p = $_GET['p'];
include("./pages/".$p.".php")
?>