Предупреждение: mysql_connect(): доступ запрещен

У меня есть эта функция php для чтения моего dbinfo из текстового файла на моем компьютере:

function loaddb(){
    $fh = fopen('dta.txt','r');
        $line = fgets($fh);
        $_SESSION['dbname']=$line;

        $line = fgets($fh);
        $_SESSION['dbuser']=$line;

        $line = fgets($fh);
        $_SESSION['dbpass']=$line;

        $line = fgets($fh);
        $_SESSION['server']=$line;                                  
    fclose($fh);
};

и этот код работает. но когда он возвращает мой код в мой сеанс var, я вижу, что он добавил дополнительные разрывы строк в фактической переменной, поэтому результат при подключении

Предупреждение: mysql_connect(): доступ запрещен для пользователя root

'@' localhost '(с использованием пароля: YES) в C:\Users\Jacques\Dropbox\Jacques\Web\Code.php в строке 37 Не удалось connect: доступ запрещен для пользователя root

'@' localhost '(с использованием пароля: YES)

как я могу это исправить. я попытался заменить все возвращаемые символы и пробелы, но он не помогает

это текст в текстовом файле

имя_бд

root

пароль

локальный: 3306

Ответ 1

Если вы уверены, что пробелы на каждом конце строки, вы можете использовать trim()

$_SESSION['dbname']= trim($line);

Когда вы свяжетесь со строкой, которая может иметь несколько пробелов, вы можете решить это с помощью простого регулярного выражения:

$regex = '/(\s)\s+/'; // Select a whitespace and following whitespaces
$str = preg_replace($regex, '$1', $str); // Replace with the first whitespace

Важное оповещение

Сохранение учетных данных вашей базы данных в текстовом файле в вашей папке www - очень плохая практика. Если кто-то обнаруживает имя файла, он может прочитать ваши учетные данные.

PHP-код, однако, анализируется перед отправкой клиенту, поэтому клиент не может получить доступ к учетным данным (если вы их не эхо).

config.php

<?php
define('DB_HOST', 'localhost:3306');
define('DB_NAME', 'dbname');
define('DB_USER', 'root');
define('DB_PASS', 'password');

Затем, когда вам нужны учетные данные вашей базы данных:

require 'config.php';
// connect here

Другой оповещатель

Функции mysql_ устарели от PHP 5.5.0. Вы должны использовать mysqli_ или PDO. Я предпочитаю PDO сам.

Ответ 2

Вы проверили следующее:

$_SESSION['dbname'] = trim($line);

Ответ 3

Используйте trim():

$_SESSION['dbname']= trim($line);

Из документов:

"Эта функция возвращает строку с пробелом, разделенным с начала и конца строки. Без второго параметра trim() разделит эти символы:"

  • "" (ASCII 32 (0x20)), обычное пространство.
  • "\ t" (ASCII 9 (0x09)), вкладка.
  • "\n" (ASCII 10 (0x0A)), новая строка (строка).
  • "\ r" (ASCII 13 (0x0D)), возврат каретки.
  • "\ 0" (ASCII 0 (0x00)), NUL-байт.
  • "\ x0B" (ASCII 11 (0x0B)), вертикальная вкладка.

http://php.net/manual/en/function.trim.php