Метод соединения PHP и MySQL

у меня есть .php файл называется db_conn.php который устанавливает соединение с базой данных. Вот код файла.

<?php
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "db_name";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: ");
}
else{
}
?>

Когда мне нужно сделать некоторые операции с базой данных из какого-то другого файла, например из login.php файл, что я делаю, я использую include_once() функция, обеспечивающая местоположение db_conn.php в качестве параметра. Я делаю то же самое для другого файла PHP, который требует доступа к БД. У меня есть несколько сомнений относительно этой практики / метода.

1. Это нормально, так как я использую include_once() функция и вызов сценария подключения БД более одного раза? Будут ли открываться новые соединения каждый раз? Если да, как это должно быть реализовано?

2. Если кто-то пытается включить файл из внешнего домена с помощью include_once("www.mywebsite.com/php/db_conn.php") смогут ли они выполнять запросы БД на моей БД?

0

Решение

  1. Это нормально, так как я использую функцию include_once () и вызываю скрипт подключения к БД более одного раза? Будет ли это открыть новый
    соединения каждый раз? Если да, как это должно быть реализовано?

Да, это нормально. Так как вы используете include_oncePHP автоматически распознает, что файл уже включен, пропустит второй вызов, и вы получите только одно соединение. Я бы порекомендовал изменить это на require_once однако, так как вы хотите, чтобы скрипт немедленно завершился ошибкой, если включенный файл не найден.

  1. Если кто-то попытается включить файл из внешнего домена с помощью include_once («www.mywebsite.com/php/db_conn.php»), он будет
    в состоянии выполнять запросы БД на моей БД?

Как правило, нет. Любой, кто запросит этот URL, просто получит пустую страницу. Однако рекомендуется размещать такие библиотечные файлы вне корневого каталога документов веб-сервера. Например:

/path/to/project
/public
index.php
/lib
db_conn.php

Здесь вы бы указали свой веб-сервер на /path/to/project/public а затем в вашем index.php, вы бы сделали что-то вроде:

require_once '../lib/db_conn.php';

Или, может быть:

ini_set('include_path', '/path/to/project/lib');
require_once 'db_conn.php';

Таким образом, ваш собственный код может ссылаться на файлы PHP в /lib но они не могут быть запрошены напрямую через веб-сервер.

2

Другие решения

1. Это нормально, так как я использую функцию include_once () и вызываю скрипт подключения к БД более одного раза? Будет ли это открыть новый
соединения каждый раз? Если да, как это должно быть реализовано?

Вы должны использовать require_once("db_conn.php");

http://php.net/manual/en/function.require-once.php

Вот различия между include(), include_once(), require() а также require_once()

Разница между require, include, require_once и include_once?

2. Если кто-то попытается включить файл из внешнего домена с помощью include_once («www.mywebsite.com/php/db_conn.php»), он будет
в состоянии выполнять запросы БД на моей БД?

Если этот параметр отключен / не разрешен по умолчанию на большинстве веб-серверов (php.ini), поэтому вы не можете использовать include включить файлы с удаленных адресов для причины безопасности.

Если вы все еще хотите разрешить включение удаленных файлов, директива allow_url_include должен быть установлен в On в php.ini

Но опять же, это плохая практика с точки зрения безопасности; и, таким образом, он вообще отключен (на самом деле я никогда не видел его включенным)

Если вы хотите прочитать содержимое удаленного файла, хотя, Вы можете использовать file_get_contents вместо этого НО это будет возвращено как чистый код HTML-разметки, не будет на стороне сервера код.

Ссылка: включая php файл с другого сервера с php

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector