2016-01-12 2 views
2

Я хочу создать простой установщик для своего приложения. Я создал библиотеку под названием «установщик», который будет проверять базу данных «database» => переменная. Если поле базы данных не определено, оно будет перенаправлено на установочную папку. вот мой сценарий:Codeigniter library работает на localhost, но не на веб-сервере

<?php 
class Installer { 
    public function __construct() { 
     //get the CI instance 
     $CI =& get_instance(); 
     $CI->load->database(); 


    //check if databse config set 
     if ($CI->db->database == "") { 
      redirect('install'); 
     } else { 
     if (is_dir('install')) { 
       echo '<i>Plese delete or rename <b>Install</b> folder</i>'; 
       exit; 
      } 
     } 
    } 
} 

Я поставил библиотеку в автозагрузку с базой данных и сеанса библиотеки

$autoload['libraries'] = array('database','session','installer'); 

Он хорошо работает на моем локальном хосте. Но когда я загрузил его на свой веб-сервер в первый раз, я получил 404 ошибку (из-за первой буквы файла контроллера должен быть капитал), то я исправил это. Но когда я получил мой URL http://example.com/demo (мой файл в public_html/демо/ каталога) он показывает ошибку, как

A PHP Error was encountered 

Severity: Notice 

Message: Uninitialized string offset: 0 

Filename: mysqli/mysqli_driver.php 

Line Number: 109 

Backtrace: 

File: /home/xxxxx/public_html/demo/application/controllers/Home.php 
Line: 25 
Function: __construct 

File: /home/xxxxx/public_html/demo/index.php 
Line: 292 
Function: require_once 

A PHP Error was encountered 

Severity: Warning 

Message: mysqli::real_connect(): (HY000/1045): Access denied for user ''@'localhost' (using password: NO) 

Filename: mysqli/mysqli_driver.php 

Line Number: 161 

Backtrace: 

File: /home/xxxxx/public_html/demo/application/controllers/Home.php 
Line: 25 
Function: __construct 

File: /home/xxxx/public_html/demo/index.php 
Line: 292 
Function: require_once 


A PHP Error was encountered 

Severity: Warning 

Message: Cannot modify header information - headers already sent by (output started at /home/xxxxx/public_html/demo/system/core/Exceptions.php:272) 

Filename: core/Common.php 

Line Number: 568 

Backtrace: 

File: /home/xxxxxx/public_html/demo/application/controllers/Home.php 
Line: 25 
Function: __construct 

File: /home/xxxxxx/public_html/demo/index.php 
Line: 292 
Function: require_once 

A Database Error Occurred 

Unable to connect to your database server using the provided settings. 

Filename: controllers/Home.php 

Line Number: 25 

, когда я использую это локальным он хорошо работает. Но когда я использую это на своем сервере, я получил эту ошибку. Мой конфигурационный файл базы данных:

$db['default'] = array(
    'dsn' => '', 
    'hostname' => '', 
    'username' => '', 
    'password' => '', 
    'database' => '', 
    'dbdriver' => 'mysqli', 
    'dbprefix' => '', 
    'pconnect' => FALSE, 
    'db_debug' => (ENVIRONMENT !== 'production'), 
    'cache_on' => FALSE, 
    'cachedir' => '', 
    'char_set' => 'utf8', 
    'dbcollat' => 'utf8_general_ci', 
    'swap_pre' => '', 
    'encrypt' => FALSE, 
    'compress' => FALSE, 
    'stricton' => FALSE, 
    'failover' => array(), 
    'save_queries' => TRUE 
); 

ответ

0

Ошибка "MySQLi :: real_connect(): (HY000/1045): доступ не запрещен для пользователя '' @ 'локальный' (используя пароль: NO)", который вы получаете очки к неправильной информации о доступе к базе данных, поскольку вы установили библиотеку базы данных в конфигурацию autoload и не предоставили хост базы данных, имя пользователя и пароль в файле конфигурации базы данных.

Вы можете попробовать путем удаления «баз данных» из автозагрузки конфигурации и проверок деталей базы данных путем загрузки конфигурации базы данных и проверок его значения в скрипте следующим образом:

$CI->config->load('database', TRUE); 
    $dbConfig = $CI->config->item('database'); 
+0

Я уже упоминал этот сценарий хорошо работает в моем WAMP сервера без ошибок. Но проблема заключается в реальном сервере. –

+0

Я обновил свой ответ, пожалуйста, проверьте его, если он вам поможет. – ranakrunal9

+0

Спасибо за помощь. Но не работает. –

0

установите детали живого сервера здесь, в базе данных .php это не должно быть пустым.

'hostname' => '', 
'username' => '', 
'password' => '', 
'database' => '', 
+0

Если я задаю все детали, то зачем мне нужна библиотека установщика и дополнительный код для установки пользователем данных базы данных в файл конфигурации базы данных? –

0

CodeIgniter имеет конфигурационный файл, который позволяет хранить значения для подключения к базе данных (имя пользователя, пароль, имя базы данных и т.д.). Файл конфигурации находится в приложении/config/database.php. Вы также можете установить значения подключения к базе данных для определенных сред, поместив database.php в соответствующую папку конфигурации среды.

Для этого вам нужно будет сохранить учетные данные базы данных в этом файле.

так:

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'localhost', // The hostname of your database server. Often this is ‘localhost’. 
    'username' => 'root', //user name of the database account 
    'password' => '', // password 
    'database' => 'database_name', // name of the database 
    'dbdriver' => 'mysqli', 
    'dbprefix' => '', 
    'pconnect' => TRUE, 
    'db_debug' => TRUE, 
    'cache_on' => FALSE, 
    'cachedir' => '', 
    'char_set' => 'utf8', 
    'dbcollat' => 'utf8_general_ci', 
    'swap_pre' => '', 
    'encrypt' => FALSE, 
    'compress' => FALSE, 
    'stricton' => FALSE, 
    'failover' => array() 
); 

Пожалуйста, обратитесь к их руководству here. Надеюсь, поможет.

+0

Не хотите хранить, если я установил имя db в файл конфигурации базы данных, тогда моя библиотека никогда не перенаправляется на установочную папку. Первоначально я хочу, чтобы он был пустым, чтобы моя библиотека легко знала, что это новая установка. N.b Я знаю, как установить данные базы данных в файл конфигурации базы данных –

+0

Что вы подразумеваете под «библиотекой никогда не перенаправлять на установочную папку»? – Dray

+0

«Установщик» - это библиотека. и я установил его в autoload –

0

редактировать свои C:\xampp\htdocs\.. application\config\database.php

$active_group = 'default'; 

$query_builder = TRUE; 

$db['default'] = array(

    'dsn' => '', 

    'hostname' => 'localhost', 

    'username' => 'root', 

    'password' => '', 

    'database' => 'your_database_name', 

    'dbdriver' => 'mysqli', 

    'dbprefix' => '', 

    'pconnect' => TRUE, 

    'db_debug' => (ENVIRONMENT !== 'production'), 

    'cache_on' => FALSE, 

    'cachedir' => '', 

    'char_set' => 'utf8', 

    'dbcollat' => 'utf8_general_ci', 

    'swap_pre' => '', 

    'encrypt' => FALSE, 

    'compress' => FALSE, 

    'stricton' => FALSE, 

    'failover' => array(), 

    'save_queries' => TRUE 

); 
+0

Хотя ответы только на код могут решить проблему, некоторые объяснения имеют большой смысл в понимании решения и как решить подобные проблемы в будущем. –

Смежные вопросы