PHP parse_ini_file问题

时间:2015-03-05 13:10:06

标签: php

我有一个如下所示的config.ini文件:

[database]
username = user1
password = pass1
dbname = db1

我想用PHP解析它,但我没有运气。我尝试的代码是:

$inifile = parse_ini_file($_SERVER['DOCUMENT_ROOT'] . "/cfi/config.ini", true);
var_dump($inifile);

PHP是include的一部分,这就是我尝试添加 $ _ SERVER [' DOCUMENT_ROOT'] 以确保找到配置文件的原因。

var_dump的结果总是 bool(false)

我做错了什么?

修改

我添加了/,它现在肯定指向配置文件。但仍有布尔(假)

的结果

3 个答案:

答案 0 :(得分:4)

Lee,如果您尝试访问的文档位于root/cfi/config.ini文件夹中,这看起来非常类似于$_SERVER['Document_Root'];变量的范围 - 这看起来像是:

/home/accountname/websitefolder/

您的ini文件声音就像它位于文件夹

中一样

/home/accountname/root/cfi/

这意味着你无法达到它。如果地址正确,您可以调试:

if(file_exists($_SERVER['DOCUMENT_ROOT'] . "/cfi/config.ini")){
print fileperms($_SERVER['DOCUMENT_ROOT'] . "/cfi/config.ini");
}
else {
die("does not exist at this location");
}

如果文件位于正确的位置,fileperms函数将反馈文件的访问权限,这可能阻止PHP读取它。

ini文件结构:

另外, 您需要确认您的ini文件是正确的结构,ini文件需要是一个有效的ini结构,如php.ini文件,请参阅http://php.net/manual/en/function.parse-ini-file.php

(编辑:为了BoltClock编辑的好处,我想保留关于ini文件结构的上述声明,因为这实际上是OP问题的原因,但我已经重写了它谢谢)

其他:

错误跟踪对于找出问题出错的原因至关重要: 从这篇关于SO的帖子 - How to log errors and warnings into a file? - 以及Fred-ii的明智建议 - 任何人都可以在文件的顶部添加以下内容以获得一些错误反馈:

error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");

对于那些知道的人来说,这看起来过分了,但上面的代码依次为:

report all errors
display these errors to the browser
log these errors to the log file
set where the log file lives. 

显示日志记录文件并不是必需的,但我将两者都放在一起,以便人们可以选择他们的方法。使用生产服务器禁用始终时,向浏览器显示错误。

现在,你有一个包含很多错误的日志文件,你需要你的(S)FTP程序查看它的文件夹,上面提到的文件夹/tmp/不在你的网站域名文件夹中,但是在旁边的配套文件夹中,因此您需要(S)FTP才能访问它。登录,找到文件夹,然后下载文件。用文本编辑器打开它会给你错误。从服务器中删除该文件,并在发生新错误时生成新文件。

答案 1 :(得分:1)

我不确定它是否会导致您的整体问题,但我认为DOCUMENT_ROOT不包含尾随斜杠,因此您需要在之前添加一个" cfi&# 34。

您可以查看:

echo $_SERVER['DOCUMENT_ROOT'] . "cfi/config.ini";

答案 2 :(得分:0)

我的代码也遇到了同样的问题。在尝试了一些失败之后,我发现密码中的特殊字符('^')是导致错误的原因。通过将值放在双引号(“”)中来解决此问题。

例如:

[database]
username = "user1"
password = "pass1"
dbname = "db1"

希望这可以帮助像我这样的人。