Я пытаюсь создать безопасное соединение 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 не может извлечь его содержимое. Как мне это исправить или обойти? Могу ли я сохранить свои учетные данные в другом формате или что-то?
Проблема не в коде, а в настройках сервера.
Функция 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;
}
?>
Других решений пока нет …