Проблема такая - стоит autoload, и классы из определенных папок подгружаются сами, все работало, но появилась задача сделать ajax запрос с БД, обычно за связь с бд отвечает специальный класс, который я периодический вызываю, но тут что то все пошло не так.
Файл php на который ссылается ajax (его код)
<?php
//include_once (ROOT . '/components/Db.php');
if(isset($_POST['get_option']))
{
$option = $_POST['get_option'];
//$dsn = "mysql:host=localhost;dbname=shop;charset=utf8;";
//$db = new PDO($dsn, 'root', '');
$db = Db::getConnection();
$result = $db->query("select id,name from subcategories where id_parent=".$option);
while ($row = $result->fetch()) {
echo "<option value = ".$row['id'].">".$row['name']."</option>";
}
exit;
}
?>
Db:: getConnection()
- устанавливает соединение с базой
ajax не работал, из консоли я узнал что класс не найден
Uncaught Error: Class 'Db' not found in C:\Server\data\htdocs\controllers\select
.php:11
Решил подключить по старинке через include_once, но там появляется другая ошибка что по такому пути нет класса
include_once(ROOT/components/Db.php): failed to open stream: No such file or directory
in <b>C:\Server\data\htdocs\controllers\select.php
Как я понял он пытается найти класс в файле запроса , кто нибудь сталкивался с такой проблемой ? По работоспособности кода - если закоментить вызов класса и раскоментить 2 строки предшествующие, все работает
Доп.инфо Файл Autoload
function my_autoload($class_name)
{
# Список всех классов в директориях в массив
$array_paths = array(
'/model/',
'/components/'
);
foreach ($array_paths as $path) {
$path = ROOT . $path . $class_name . '.php';
if (is_file($path)) {
include_once $path;
}
}
}
spl_autoload_register('my_autoload');
Подключить его тоже не получается
Решение проблемы (Не понятно на сколько правильное это решение)
Попытался подключить файл вот так
$path = $_SERVER['DOCUMENT_ROOT'];
include_once ($path.'/components/Db.php');
и он подключился, но тоже не понятно как, лог ошибок изменился. В ошибках было написано
<b>Warning</b>: include(ROOT/config/db_params.php): failed to open stream: No such file or directory
in <b>C:\Server\data\htdocs\components\Db.php</b> on line <b>9</b>
Класс Db прикладываю
public static function getConnection()
{
$paramsPath = ROOT . '/config/db_params.php';
$params = include($paramsPath);
$dsn = "mysql:host={$params['host']};dbname={$params['dbname']};charset={$params['charset']};";
$db = new PDO($dsn, $params['user'], $params['password']);
return $db;
}
В ошибке сказано что он не смог загрузить уже файл db_params, заменив в include ROOT
на переменную $path
которая $path = $_SERVER['DOCUMENT_ROOT'];
все заработало.
Непонятно только почему он вдруг перестал работать с ROOT
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как сделать систему для отслеживания посылки? серверный часть могу догадаться как, но вот как сканировать и как собрать нужные данный например...
Добрый день! Пытаюсь спарсить тег <div class="descr">Всего возможных имен: 4</div> с сайта https://numbustercom/ru/number/380977777777, но в ответ получаю
В общем в данный момент на чистом php читаются данные из базы данных и генерируется html страничка с таблицейВ таблице есть BLOB поле с картинкой...