【发布时间】:2012-08-16 19:56:54
【问题描述】:
正确的-o
我对 OOP 还很陌生。
我正在使用 PHP v5+
我有我的 index.php:
<?
include_once('class/includes.php');
$reg = new register;
$action = $_GET['action'];
$page = $_GET['page'];
include('header.php');
if($page):
include($page);
else:
include('home.php');
endif;
include('footer.php');
?>
我设置了我的 htaccess,以便每个页面的 url 是 foo.com/pagename
没关系。
在我的 classes.php 页面 (foo.com/classes) 上,默认包含 viewClasses.php //note classes指的是瑜伽课而不是OOP课
所以基本上我有 2 个级别的包含(index.php 包括 classes.php,其中包括 viewClass.php)
这是我的 viewClass.php
<?
global $reg;
$reg->viewClassList();
echo $reg->classList;
?>
由于某种原因,它没有按照 index.php 中的定义获取 $reg,因此给了我这个错误:
致命错误:在第 3 行的 /home/pandazco/public_html/register/viewClass.php 中的非对象上调用成员函数 viewClassList()
我希望这能很好地解释我的问题...
【问题讨论】:
-
你应该阅读Local File Inclusion。
-
你不需要在那里声明
global $reg。它已经公开为$reg,除非它在函数内部。但是,您有一个更大的问题。这很容易受到巨大的目录遍历攻击!您盲目地包含$page指向的任何内容,这可能会将您系统的密码文件转储到屏幕上。您必须至少过滤$page与../等字符或http://或ftp://等远程协议。 -
有什么更好的方法?只需设置每个变量(即) if($page = pagea): include pagea;万一; if($page = pageb): 包含 pageb;万一; if($page = pagec): 包含 pagec; endif;
-
@MatTaylor 最好通常使用可能值的白名单
if (in_array($page, array('page1','page2','page3'))如果 $page 不在允许的字符串数组中,请不要包含它。 -
为此干杯,目前它将在本地离线托管,但有可能会在更远的地方附加到客户网站,将使用它,干杯:)