Как я могу решить require_once() PHP-предупреждения и фатальную ошибку?
Я построил приложение для входа в систему на PHP(без фреймворков) с MySQL в качестве базы данных.
Я получаю предупреждения и ошибки при попытке запуска index.php на локальном хосте (WAMP). Ошибка гласит::
"Предупреждение: require_once(Cl_User.php): не удалось открыть поток: нет такого файла или каталога в C:\wamp\www\login\config.php на линии 18"
"Ошибка: фатальная ошибка: им require_once(): ошибка открытия требуется 'Cl_User.php' (в include_path='.;C:\php\pear') в C:\wamp\www\login\config.php на линии 18"
Что я должен сделать, чтобы удалить ошибки?
Вот коды файлов php:
а. index.php:
ob_start();
session_start();
require_once 'config.php';
// Инициализация Пользовательского Класса
$user_obj = новый Cl_User();
?>
if( !empty($_POST)) {
пробовать {
$data = $user_obj->login( $_POST );
если(использования isset($_SESSION['logged_in']) &&усилителя; $_SESSION['logged_in']){
заголовок('Location: home.php');
}
} catch (исключение $e) {
$error = $e->getMessage();
}
}
если(использования isset($_SESSION['logged_in']) &&усилителя; $_SESSION['logged_in']){
заголовок('Location: home.php');
}
?>
<!DOCTYPE html>
<html lang="en">
<голова>
<meta charset="utf-8">
<meta http-equiv="X-UA-совместимый" контент="IE-Edge">
в <мета имя="область просмотра" содержимого="ширина=устройство-ширина, начально-масштаб=1"и GT;
в <название>в PHP для входа в демонстрационную страницу&ЛТ;/название&ГТ;
</head>
</html>
б. config.php:
require_once 'messages.php';
// объявление конфигурации для конкретного сайта
определите( 'BASE_PATH', 'http://localhost/login/ (http://localhost/login/)');
define( 'DB_HOST', 'localhost');
define( 'DB_USERNAME', 'root');
define( 'DB_PASSWORD', ");
define( 'DB_NAME', 'login');
функция __autoload($class)
{
$parts = explode('_', $class);
$path = implode(DIRECTORY_SEPARATOR, $parts);
им require_once $путь . '.РНР';
}
?>
гр. messages.php:
define('FIELDS_MISSING', 'некоторые поля отсутствуют');
define('PASSWORD_NOT_MATCH', 'Пароли не совпадают');
define('USER_REGISTRATION_FAIL', 'ошибка регистрации пользователя');
define('USER_REGISTRATION_SUCCESS', 'регистрация пользователя прошла успешно, теперь вы можете войти в систему');
определите('LOGIN_FIELDS_MISSING', 'адрес электронной почты и пароль отсутствует.);
define('LOGIN_FAIL', 'несоответствие электронной почты и пароля');
define('PASSWORD_CHANGE_SUCCESS', 'пароль успешно изменен'.);
?>
д. User.php:
класс Cl_User
{
защищенный $_con;
публичная функция __конструкция()
{
$db = новый Cl_DBclass();
$this->_con = $db->con;
}
Регистрация публичной функции(массив $data)
{
if(!empty($data)){
// Обрезать все входящие данные
$trimmed_data = array_map('trim', $data);
$имя = mysqli_real_escape_string( $это-&ГТ;_con, $trimmed_data['имя'] );
$пароль = mysqli_real_escape_string( $это-&ГТ;_con, $trimmed_data['пароль'] );
$пароль = mysqli_real_escape_string( $это-&ГТ;_con, $trimmed_data['confirm_password'] );
// Проверьте наличие адреса электронной почты:
if(filter_var( $trimmed_data['email'], FILTER_VALIDATE_EMAIL)) {
$написать = mysqli_real_escape_string( $это-&ГТ;_con, $trimmed_data['электронной почты']);
} еще {
бросьте новое исключение("пожалуйста, введите действительный адрес электронной почты!");
}
если((!$наименование) || (!$электронной почты) || (!$пароль) || (!$пароль) ) {
выбросить новое исключение( FIELDS_MISSING );
}
if($password !== $cpassword ) {
выбросить новое исключение( PASSWORD_NOT_MATCH );
}
$password = md5( $password );
$запрос = "вставить в пользователи (функция user_id, имя, email, пароль,) значениями (null, '$имя', '$email' мы, '$пароль', ТЕКУЩАЯ_ОТМЕТКА_ВРЕМЕНИ)";
if(mysqli_query( $this->_con, $query )) возвращает true;
} еще {
выбросить новое исключение( USER_REGISTRATION_FAIL );
}
}
вход в публичную функцию(массив $data) {
$_SESSION['logged_in'] = false;
if( !empty($data) ){
$trimmed_data = array_map('trim', $data);
$написать = mysqli_real_escape_string( $это-&ГТ;_con, $trimmed_data['электронной почты'] );
$пароль = mysqli_real_escape_string( $это-&ГТ;_con,$trimmed_data['пароль'] );
если ((! email) || (!пароль) ) {
выбросить новое исключение( LOGIN_FIELDS_MISSING );
}
$password = md5( $password );
$запрос = "выбрать функция user_id, имя, адрес электронной почты, созданный из пользователей, где написать = '$email' и пароль = '$пароль ";
$result = mysqli_query($this->_con, $query);
$data = mysqli_fetch_assoc($result);
$count = mysqli_num_rows($result);
если( $count == 1 ){
$_данные сеанса;
$_SESSION['logged_in'] = true;
вернуть true;
} еще{
выбросить новое исключение( LOGIN_FAIL );
}
} еще{
выбросить новое исключение( LOGIN_FIELDS_MISSING );
}
}
учетная запись публичной функции( массив $data )
{
if( !empty($data) ){
$trimmed_data = array_map('trim', $data);
$пароль = mysqli_real_escape_string( $это-&ГТ;_con, $trimmed_data['пароль'] );
$пароль = $trimmed_data['confirm_password'];
$функция user_id = mysqli_real_escape_string( $это-&ГТ;_con, $trimmed_data['ид_пользователя'] );
if((!$password) || (!$cpassword) ) {
выбросить новое исключение( FIELDS_MISSING );
}
if($password !== $cpassword ) {
выбросить новое исключение( PASSWORD_NOT_MATCH );
}
$password = md5( $password );
$запрос = "обновление пользователей задать пароль = '$пароль' где user_id = $функция user_id ";
if(mysqli_query($this->_con, $query)) возвращает true;
} еще {
выбросить новое исключение( FIELDS_MISSING );
}
}
выход из публичной функции()
{
session_unset();
session_destroy();
заголовок('Location: index.php');
}
публичная функция forgetPassword( массив $data )
{
if( !empty($data) ){
$написать = mysqli_real_escape_string( $это-&ГТ;_con, отделка( $данных['электронной почты'] ) );
если((!$email) ){
выбросить новое исключение( FIELDS_MISSING );
}
$password = $this->randomPassword();
$password1 = md5( $password );
$запрос = "обновление пользователей задать пароль = '$пароль1 где написать = $электронной почты";
если(mysqli_query($это-&ГТ;_con, $запроса)){
$написать;
$subject = "новый запрос пароля";
$txt = "ваш новый пароль ".$password;
$заголовки = "с: admin@abc.com (mailto:admin@abc.com)" . "\р\н" . “КК: admin@abc.com (mailto:admin@abc.com)“;
почта($to,$subject,$txt,$headers);
вернуть true;
}
} еще {
выбросить новое исключение( FIELDS_MISSING );
}
}
частная функция randomPassword() {
$alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFghijklmnopqrstuvwxyz0123456789";
$pass = массив();
$alphaLength = strlen($alphabet) - 1;
для($i = 0; $i < 8; $i++) {
$n = rand(0, $alphaLength);
$pass[] = $alphabet[$n];
}
return implode($pass);
}
}
?>
е. DBclass.php:
класс Cl_DBclass
{
публичный $con;
публичная функция __конструкция()
{
$this->con = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
если( mysqli_connect_error()) echo "не удалось подключиться к MySQL:" . mysqli_connect_error();
}
}
?>
Что я уже пробовал:
Я мало что знаю о PHP(например, функция автозапуска в PHP). Мне нужно решение этой проблемы, потому что я должен сделать приложение дальше, добавив другие полезные функции.
Mohibur Rashid
Это действительно удивительно, что ваш загрузчик ищет Cl_User.php, я только что скопировал часть вашего кода и выполнил, он работает правильно...
добавьте эту строку в функцию __autoload
echo DIRECTORY_SEPARATOR . "<br>";
и посмотрим, что получится. А также распечатать эту часть
Эхо $путь . '.РНР';
и посмотрите, какой результат вы получите. Печать значения-это самый быстрый способ имитировать отладку..
Альтернатива для вашей функции __autoload
функция __autoload($class)
{
require_once str_replace("_", DIRECTORY_SEPARATOR , $class).".php";
}
Asad Chishti
Спасибо за ваш ответ.
Я проверю его и дам вам знать, работает ли это в моей системе.