【问题标题】:.ini file found but contents missing (parse_ini_file() not working).ini 文件找到但内容丢失(parse_ini_file() 不工作)
【发布时间】:2017-04-28 07:57:48
【问题描述】:

我正在尝试创建一个安全的 mysql 连接,并且我创建了一个函数来创建连接和包含登录凭据的 db.ini 文件。

db.ini:

[database]
user = username
pass = password
db = mydb
addr = myhost

我已将 ini 文件放在我的学校项目文件夹中,它位于 public_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;
}

输出是这样的:

FILE EXISTS! 
Failed to connect to MySQL: (2002) Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

所以文件存在,但 php 无法获取其内容。我该如何解决或绕过它?我可以将我的凭据保存为其他格式吗?

【问题讨论】:

  • print_r($config); 是否返回空值?如果是这样,那么该路径可能不正确。
  • sudo service mysql status 命令的输出是什么?
  • @Mojo Allmighty 如果我在本地运行我的脚本,它会打印值,但在服务器上它不会返回任何内容。
  • 我联系了学校服务台,结果发现问题不在于我的代码,而在于服务器设置。出于安全原因,parse_ini_file() 函数被禁用。但我从他们那里得到了另一个功能。

标签: php mysql security credentials ini


【解决方案1】:

问题不在于代码,而在于服务器设置。

parse_ini_file() - 功能被禁用,这可以通过添加error_reporting( 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;
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多