PHP parse_ini_file问题

Lee*_*Lee 6 php

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

[database]
username = user1
password = pass1
dbname = db1
Run Code Online (Sandbox Code Playgroud)

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

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

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

var_dump的结果总是bool(false).

我究竟做错了什么?

编辑:

我添加了/它现在肯定指向配置文件.但仍有bool的结果(假)

Mar*_*tin 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");
}
Run Code Online (Sandbox Code Playgroud)

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

ini文件结构:

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

(编辑:为了BoltClock编辑的利益,我想保留上面关于ini文件结构的声明,因为这实际上是OP问题的原因,但是我已经重新措辞了。谢谢)

额外的:

错误跟踪对于找出出错的原因至关重要:来自 SO -如何将错误和警告记录到文件中?- 根据 Fred-ii 的明智建议 - 任何人都可以将以下内容添加到其文件顶部以获得一些错误反馈:

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

对于那些知道的人来说,这看起来有些过分,但上面的代码按顺序将:

report all errors
display these errors to the browser
log these errors to the log file
set where the log file lives. 
Run Code Online (Sandbox Code Playgroud)

不需要显示和记录文件,但我将两者都放入,以便人们可以选择他们的方法。生产服务器应始终禁用向浏览器显示错误。

现在,您有一个包含许多错误的日志文件,您需要 (S)FTP 程序在该文件夹中查找它,上述文件夹/tmp/不在您的网站域文件夹中,而是在它旁边的配套文件夹中,因此您需要 (S)FTP 来访问它。登录,找到该文件夹​​,然后归档并下载。用文本编辑器打开它,它会告诉你错误。从服务器上删除该文件,当出现新错误时将生成一个新文件。