我有点卡住了。
在继续之前,我想分享一些脚本。我在PHP中有一个类文件:
<?php
class db
{
private $dbn;
private $port;
private $uname;
private $pwd;
private $dbname;
function __construct(){
/* $this -> dbn ='localhost';
$this -> port ='3306';
$this -> uname = 'root';
$this -> pwd = '';
$this-> dbname = 'allindiacakes';*/
/* $this -> dbn ='localhost';
$this -> port ='3306';
$this -> uname = 'rombagif_floret';
$this -> pwd = 'Ashoke3';
$this-> dbname = 'rombagif_floret';*/
$this -> dbn ='localhost';
$this -> port ='3306';
$this -> uname = 'root';
$this -> pwd = '';
$this-> dbname = 'rombagif_floret';
}
public function getdbn(){
return $this->dbn;
}
public function getPort(){
return $this->port;
}
public function getUname(){
return $this->uname;
}
public function getPwd(){
return $this->pwd;
}
public function getDbName(){
return $this->dbname;
}
public function getConnection(){
$con ="'" . $this->dbn . "','" . $this->uname . "','" . $this->pwd ."'";
echo $con;
return $con;
}
}
?>
我正在尝试包含该类的URL,然后创建一个这样的对象。
在我做的localhost/crack/index.php
文件中:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
include 'http://localhost/rambagifts/logMeAdmin/functions/include/dbn.php';
$d = new db();
$dbname = $d->getdbn();
echo $dbname;
?>
</body>
</html>
但是当我呼叫http://localhost/crack/
时,我收到以下错误
致命错误:第12行的
C:\xampp\htdocs\crack\index.php
中找不到“db”类
答案 0 :(得分:2)
来自php文档:http://www.php.net/manual/en/function.include.php
如果在PHP中启用了“URL include wrappers”,则可以指定该文件 使用URL包含(通过HTTP或其他支持的包装器 - 请参阅 支持协议列表的协议和包装器)而不是 本地路径名。如果目标服务器将目标文件解释为PHP 代码,变量可以使用URL请求传递给包含的文件 与HTTP GET一起使用的字符串。严格来说,这并不严格 包含文件并让它继承父文件的东西 变量范围;该脚本实际上是在远程服务器上运行的 然后将结果包含在本地脚本中。
注意:PHP 4.3.0之前的Windows版本的PHP不支持访问 通过此功能的远程文件,即使启用了allow_url_fopen。
特别是部分说“脚本实际上是在远程服务器上运行,然后结果被包含在本地脚本中”。您的变量和类对象定义不会被回显(好东西!),因此它们不会包含在您自己的脚本中。
正如其他人所说,由于URL被解析然后包含在内,所以不要包含URL中的文件。您需要根据本地路径或相对路径进行包含,以便包含php代码本身。
如果要包含来自不同域的文件,就像它在同一域路径中一样。您可以为系统上的其他目录创建符号链接(http://en.wikipedia.org/wiki/Symbolic_link)。这将允许您在本地包含该目录中的文件。
有关如何在远程URL上使用include的示例;您可以查看这个问题(php include to external url),其中TS想要包含一个远程(已经解析过的)头文件。
答案 1 :(得分:0)
您的包现在通过服务器运行;摆脱localhost,改为使用文件系统路径。