2013-11-15 18 views
6

Môi trường phát triển trình ký mã không được thiết lập. Tôi luôn sử dụng mã này trong index.php. nhưng tôi không hiểu tại sao tôi nhận được "sản xuất" như đầu ra trong khi tôi đang làm việc trên localhost.Cài đặt môi trường Codeigniter

switch(dirname(__FILE__)){ 
case "H:\wamp\www\sitedirectory": 
    define('ENVIRONMENT', 'development'); 
break; 
default: 
    define('ENVIRONMENT', 'production'); 
break; 
} 

    echo ENVIRONMENT ; // output is "production" while i am on localhost 
    echo dirname(__FILE__) ; // output is "H:\wamp\www\sitedirectory" 
+0

Điều đó không có ý nghĩa, bạn có chắc là bạn không có lỗi đánh máy ở đâu đó không? – Shomz

+0

vâng tôi chắc chắn không có lỗi đánh máy. – Zohaib

+0

Hoiw có phải là CodeIgniter cụ thể không? –

Trả lời

12

Điều đó thật lạ. Nó đã làm điều tương tự cho tôi. Bạn có thể thử một cái gì đó như thế này?

switch($_SERVER["HTTP_HOST"]){ 
case "localhost": 
    define('ENVIRONMENT', 'development'); 
break; 
default: 
    define('ENVIRONMENT', 'production'); 
break; 
} 

echo ENVIRONMENT ; // output development 
+0

Cảm ơn nó hoạt động. dirname (__ FILE__) phương pháp làm việc cho tôi luôn luôn nhưng tôi không hiểu tại sao điều này là tạo ra vấn đề trong dự án này. Cảm ơn một lần nữa – Zohaib

1

Để tự động đặt MÔI TRƯỜNG dựa trên IP của máy chủ, bên dưới tôi đã sử dụng cụm từ thông dụng để kiểm tra IP cục bộ như 127.0. * Và 10.0. *.

Tại thư mục gốc của bạn dự án tìm đến index.php và thay thế:

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development'); 

với:

$server_ip = getHostByName(getHostName()); 

if (preg_match("/^(127\.0\.|10\.0\.).+/i", $server_ip)) { 
    define("ENVIRONMENT", "development"); 
    define("BASEURL", "http://localhost:8000/"); 
} else { 
    define("ENVIRONMENT", "production"); 
    define("BASEURL", "https://domain.com/"); 
} 

Hãy chắc chắn để thay thế các giá trị từ BASEURL với riêng của bạn và trong application/config/config.php add:

$config['base_url'] = BASEURL; 

Để cải thiện thêm tiếp đến application/config/database.php ngay trước cài đặt cơ sở dữ liệu $db['default'] = array(:

if(ENVIRONMENT !== 'production') { 
    $db = [ 
      'username' => '', 
      'password' => '', 
      'database' => '', 
      'hostname' => '127.0.0.1' 
    ]; 
} else { 
    $db = [ 
      'username' => '', 
      'password' => '', 
      'database' => '', 
      'hostname' => '' 
    ]; 
} 
1

Thêm vào các câu trả lời khác. Bây giờ câu trả lời dưới đây có thể trông giống như một overkill (nếu bạn phải định nghĩa các biến môi trường thì tại sao lại sử dụng HTTP_HOST?) Trong kinh nghiệm của tôi CI không phản ánh bất kỳ thay đổi nào được thực hiện cho các biến môi trường ngay cả sau khi khởi động lại apache. các giá trị được cập nhật khi gửi yêu cầu từ CLI.)

if (php_sapi_name() === 'cli') 
{ 
    // incase the request is made using the cli, the $_SERVER['HTTP_HOST'] will not be set 

    define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development'); 
} 
else 
{ 
    switch ($_SERVER["HTTP_HOST"]) 
    { 
     case "localhost": 
      define('ENVIRONMENT', 'development'); 
      break; 
     default: 
      define('ENVIRONMENT', 'production'); 
      break; 
    } 
} 
Các vấn đề liên quan