我遇到了这个问题:
我得到了文件xxx.php,其中我正在解析一个文件:$ config ['etc'] = parse_ini_file('config / config.txt');
一切都很好,直到我使用require_once("lang.inc.php");
将xxx.php文件包含到我的yyy.php文件中
然后我收到一条消息:警告:parse_ini_file(config / config.txt):无法打开流:没有这样的文件或目录......
当我改变时;
$ config ['etc'] = parse_ini_file('config / config.txt');
到
$ config ['etc'] = parse_ini_file('../ config / config.txt');
然后我的yyy.php运行正常,但是xxx.php没有...而且我卡住了。
请帮帮我们。
答案 0 :(得分:0)
您应该使用从yyy.php
到config.txt
的绝对路径或路径
要获得绝对值,您可以使用$_SERVER['DOCUMENT_ROOT']
或__FILE__
常量
答案 1 :(得分:0)
如果可以从不同目录调用(或请求)PHP脚本,请尝试使用绝对文件路径。例如,在example.com/one.php
下执行的PHP脚本的当前目录将与example.com/folder/two.php
不同。
您的更改
$config['etc'] = parse_ini_file('../config/config.txt');
仍然是相对,除了这次它只是“当前目录中的一个目录> config> config.txt”,而不是之前,你在同一个当前目录中查找
通用修复方法是执行以下操作:
$root = $_SERVER['DOCUMENT_ROOT'];
// ... code ...
$config['etc'] = parse_ini_file($root . '/config/config.txt');
使用DOCUMENT_ROOT
字段可能存在问题,但大多数情况下应该没问题(例如在CLI下未定义DOCUMENT_ROOT
)。此外,检查DOCUMENT_ROOT
是否有尾部斜杠,即使标准没有,一些主机可能包含尾部斜杠。如果是,请在文件路径的开头删除斜杠。
答案 2 :(得分:0)
也许是因为您的文件层次结构看起来像这样?
/
- file/
-- config/
---config.txt
--- yyy.php
- xxx.php
xxx.php和yyy.php不在同一目录中。当您在yyy.php中包含xxx.php时,parse_ini_file
将从yyy.php视角读取文件。这就是你需要更改目录的原因,因为当你包含一个文件时,它的所有目标读数都会改变。
解决方案当然是由其他人编写的(使用绝对路径),或者您可以将文件移动到相同的目录。我只是写这个是为了完整的解释。
修改强>
当然,我只是推测你的文件层次结构。试着想象一下文件层次结构,看看xxx.php和yyy.php是不在同一个目录中。这可能是问题所在。
编辑2: 我已经尝试过你在问题中写的情况,它没有问题。这是我的代码:
的 xxx.php:
强> 的
<?php
$config = parse_ini_file('config/config.txt');
的 yyy.php:
强> 的
<?php
require_once "xxx.php";
文件层次结构:
/
- config/
-- config.txt
- xxx.php
- yyy.php
工作得很好。也许你的yyy.php包含在另一个文件中,并从该文件调用?
答案 3 :(得分:0)
试试这个:
class Database extends PDO{ public $koneksi; function
__construct($file = './../db/config.ini'){
try{
if (!$settings = parse_ini_file(__DIR__.$file, TRUE)) throw new
exception('Unable to open ' . $file . '.');
$driver=$settings['database']['driver'];
$dsn=$settings['database']['dsn'];
$port=$settings['database']['port'];
$dbname=$settings['database']['dbname']; $username=$settings['database']['username'];
$password=$settings['database']['password'];
$this->koneksi = new PDO("mysql:host=" .$dsn . ";dbname=" . $dbname, $username,$password,array(PDO::ATTR_ERRMODE =>
PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES
utf8"));
$this->koneksi->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
$e->getMessage();
}
}