Php 找到.ini文件但缺少内容(parse_ini_file()不工作)
我正在尝试创建一个安全的mysql连接,并创建了一个函数,用于创建连接和包含登录凭据的db.ini文件 db.ini:Php 找到.ini文件但缺少内容(parse_ini_file()不工作),php,mysql,security,credentials,ini,Php,Mysql,Security,Credentials,Ini,我正在尝试创建一个安全的mysql连接,并创建了一个函数,用于创建连接和包含登录凭据的db.ini文件 db.ini: [database] user = username pass = password db = mydb addr = myhost 我已将ini文件放在我的学校项目文件夹中,它位于公共html之外。我使用以下php代码获取db.ini: function dbConnect(){ if(!isset($mysqli)){ if( file_exist
[database]
user = username
pass = password
db = mydb
addr = myhost
我已将ini文件放在我的学校项目文件夹中,它位于公共html之外。我使用以下php代码获取db.ini:
function dbConnect(){
if(!isset($mysqli)){
if( file_exists("../../../db.ini")){
echo "FILE EXISTS! <br>";
}
else{
echo "the file does not exist!";
}
$config = parse_ini_file("../../../db.ini");
print_r($config);
$mysqli = new mysqli($config['addr'], $config['user'], $config['pass'], $config['$db']);
}
if ($mysqli->connect_error) {
die( "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error);
}
return $mysqli;
}
因此文件存在,但php无法获取其内容。我该如何修复或绕过它?我可以将凭据保存为其他格式吗?问题不在于代码,而在于服务器设置 parse_ini_file()-函数被禁用,这可以通过添加
错误报告(E_ALL)看到代码>
到php脚本的开头
php.net parse_ini_file()注释部分中的未知用户使用此函数解决了此问题:
<?php
function parse_ini_file_quotes_safe($f)
{
$r=$null;
$sec=$null;
$f=@file($f);
for ($i=0;$i<@count($f);$i++)
{
$newsec=0;
$w=@trim($f[$i]);
if ($w)
{
if ((!$r) or ($sec))
{
if ((@substr($w,0,1)=="[") and (@substr($w,-1,1))=="]") {$sec=@substr($w,1,@strlen($w)-2);$newsec=1;}
}
if (!$newsec)
{
$w=@explode("=",$w);$k=@trim($w[0]);unset($w[0]); $v=@trim(@implode("=",$w));
if ((@substr($v,0,1)=="\"") and (@substr($v,-1,1)=="\"")) {$v=@substr($v,1,@strlen($v)-2);}
if ($sec) {$r[$sec][$k]=$v;} else {$r[$k]=$v;}
}
}
}
return $r;
}
?>
问题不在于代码,而在于服务器设置
parse_ini_file()-函数被禁用,这可以通过添加错误报告(E_ALL)看到代码>
到php脚本的开头
php.net parse_ini_file()注释部分中的未知用户使用此函数解决了此问题:
<?php
function parse_ini_file_quotes_safe($f)
{
$r=$null;
$sec=$null;
$f=@file($f);
for ($i=0;$i<@count($f);$i++)
{
$newsec=0;
$w=@trim($f[$i]);
if ($w)
{
if ((!$r) or ($sec))
{
if ((@substr($w,0,1)=="[") and (@substr($w,-1,1))=="]") {$sec=@substr($w,1,@strlen($w)-2);$newsec=1;}
}
if (!$newsec)
{
$w=@explode("=",$w);$k=@trim($w[0]);unset($w[0]); $v=@trim(@implode("=",$w));
if ((@substr($v,0,1)=="\"") and (@substr($v,-1,1)=="\"")) {$v=@substr($v,1,@strlen($v)-2);}
if ($sec) {$r[$sec][$k]=$v;} else {$r[$k]=$v;}
}
}
}
return $r;
}
?>
isprint\r($config)代码>返回空值?如果是这样,那么路径可能不正确。sudo service mysql status
命令的输出是什么?@Mojo allwighty如果我在本地运行脚本,它会打印值,但在服务器上它不会返回任何内容。这可能有助于我联系学校帮助台,结果发现问题不在于我的代码,而在于服务器设置。出于安全原因,已禁用parse_ini_file()函数。但是我从他们那里得到了另一个函数来完成这项工作代码>返回空值?如果是这样,那么路径可能不正确。sudo service mysql status
命令的输出是什么?@Mojo allwighty如果我在本地运行脚本,它会打印值,但在服务器上它不会返回任何内容。这可能有助于我联系学校帮助台,结果发现问题不在于我的代码,而在于服务器设置。出于安全原因,已禁用parse_ini_file()函数。但我从他们那里得到了另一个功能,它完成了这项工作。