CodingForums.com

CodingForums.com (http://www.codingforums.com/index.php)
-   Post a PHP snippet (http://www.codingforums.com/forumdisplay.php?f=41)
-   -   Switch between local and live (http://www.codingforums.com/showthread.php?t=284265)

AndrewGSW 12-17-2012 01:34 AM

Switch between local and live
 
I believe that many people will comment and uncomment blocks (or individual lines) of code when switching between local and live running of their pages. This can be a pain. I use the following code and just change a value from true to false when moving to the remote/live site:
PHP Code:

<?php
if (!defined('LOCAL')) {
    
define('LOCAL'true);      // set this to true or false
}
if (!
defined('DB_USER')) {
    if (
LOCAL) {
        
DEFINE('DB_USER''Andrew');
        
DEFINE('DB_PASSWORD''Password1');
        
DEFINE('DB_HOST''localhost');
        
DEFINE('DB_NAME''AndyDB');
        
DEFINE('EMAIL''andy@somemail.com'); 
        
DEFINE('BASE_URL''http://localhost:80/AndysProject/');
    } else {
        
DEFINE('DB_USER''user2');
        
DEFINE('DB_PASSWORD''Password2');
        
DEFINE('DB_HOST''www.some.com');
        
DEFINE('DB_NAME''db2');
        
DEFINE('EMAIL''host@someother.com'); 
        
DEFINE('BASE_URL''http://andyshost.com/');
    }
}
?>

I store this in a config.php file that is included in relevant pages.

idalatob 12-17-2012 10:40 AM

Here's a cool way of doing it too:

//in your php config file
PHP Code:

defined('APPLICATION_ENV')
    || 
define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

if (
APPLICATION_ENV == 'production') {
        
DEFINE('DB_USER''Andrew');
        
DEFINE('DB_PASSWORD''Password1');
        
DEFINE('DB_HOST''localhost');
        
DEFINE('DB_NAME''AndyDB');
        
DEFINE('EMAIL''andy@somemail.com'); 
        
DEFINE('BASE_URL''http://localhost:80/AndysProject/');
} else {
        
DEFINE('DB_USER''user2');
        
DEFINE('DB_PASSWORD''Password2');
        
DEFINE('DB_HOST''www.some.com');
        
DEFINE('DB_NAME''db2');
        
DEFINE('EMAIL''host@someother.com'); 
        
DEFINE('BASE_URL''http://andyshost.com/');


//in your vhosts file

Code:


<VirtualHost 10.0.0.253:80>

    DocumentRoot "/Path/To/Folder"
    ServerName helloworld.local

    # This should be omitted in the production environment
    # Or set to 'production'
    SetEnv APPLICATION_ENV development

    <Directory "/Path/To/Folder">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

This way, you can configure a whole host of different application environments. Useful for multiple developers all with their own way of setting up their DB's, passwords, paths, whatever etc.

idalatob 12-17-2012 10:55 AM

Not that andrew's way isnt awesome! Just chipping in.

AndrewGSW 12-18-2012 12:26 AM

Is APPLICATION_ENV specific to certain frameworks or servers? But I suppose it can be assigned in any comparable settings file.

idalatob 12-18-2012 07:19 AM

Its a bit hitched from the Zend Framework.

Its not specific to any particular framework or server. (I suppose you would have to have apache and use virtualhosting)

Whats really cool about this system, is you can chain settings. EG:

Developer
setting_1 = x
setting_2 = y
setting_3 = z

Developer : Developer_1
setting_3 = a
setting_4 = i

So setting something like, APPLICATION_ENV = Developer_1, you can then chain settings and use inheritance. Like css I suppose. Of course, you have to write the logic for all that.

Its also worth taking a look at how big frameworks etc handle their settings. I really like the zend framework approach, which is why I hacked off its setting system.

tangoforce 12-18-2012 11:21 PM

I see my idea has been copied :rolleyes:
http://www.codingforums.com/showthread.php?t=247091

Use the $_SERVER['HTTP_HOST'] to determine which system your script is running on. That way you don't even need to set anything to true or false, no constants to define etc.

Just upload all your files (including your mysql config file with no changes for once) and it'll just work straight away. It supports various names / domains for each server (handy if you have subdomains) and can be adjusted for mysqli if needed:

PHP Code:

//Require the file
require_once('mysql.php');

//Open connection and select DB
$MySQL run_mysql($_SERVER['HTTP_HOST']);

//Or
run_mysql($_SERVER['HTTP_HOST']);

//Need to debug this mysql connection? - Set the second parameter to true.
run_mysql($_SERVER['HTTP_HOST'], true); 

This is the mysql.php file:
PHP Code:

 <?php
function load_mysql()
   {
   
//Set Mysql connections here:
   //MySQL Server 1 - Localhost
   
$Mysql['Name'] = array('127.0.0.1''localhost''<computer_name>''192.168.0.1');
   
$Mysql['Host'] = 'localhost';
   
$Mysql['User'] = 'root';
   
$Mysql['Pass'] = 'password';
   
$Mysql['DB'] = 'your_database_name';
   
$Connections[] = $Mysql;
   
   
//MySQL Server 2 - The website
   
$Mysql['Name'] = array('www.your-site.com''yoursite.com''sub.your-site.com');
   
$Mysql['Host'] = 'localhost';
   
$Mysql['User'] = 'your-site-mysql-user';
   
$Mysql['Pass'] = 'password2';
   
$Mysql['DB'] = 'db_name';
   
$Connections[] = $Mysql;

   return 
$Connections;
   }

function 
get_mysql($Name)
   {
   
$Connections load_mysql();

   foreach(
$Connections as $Key => $MySql)
      {
      if (
is_array($MySql['Name']))
         {
         if ((
$Search array_search($Name$MySql['Name'])) !== false)
            {
            return 
$MySql;
            }
         }
      else
         {
         if (
strtolower($Name) == strtolower($MySql['Name']))
            {
            return 
$MySql;
            }
         }
      }
      
    die(
"Database connection for $Name not defined / established.");
   }

function 
run_mysql($Name$Debug false)
   {
   
$Connection get_mysql($Name);

   If (
$Connection != NULL)
      {
      If (
$SQL = @mysql_connect($Connection['Host'], $Connection['User'], $Connection['Pass']))
         {
         
//MySQL Connection Success
         
$Output "Connected to $Connection[Host]<br>\n";

         If (
$Connection['DB'] != '')
            {
            
$Output .= "Database $Connection[DB] supplied<br>\n";

            If (@
mysql_select_db($Connection['DB']))
               {
               
//Table Selection Success
               
$Output .= "Selected $Connection[DB]<br>\n";
               }
            else
               {
               
//Table Selection Failure
               
$Output .= "Database not selected: " .mysql_error() ."<br>\n";
               }
            }
         else
            {
            
$Output .= "Database not supplied<br>\n";
            }
         }
      else
         {
         
//MySQL Connection Failure
         
$Output "Not connected to $Connection[Host]: " .mysql_error() ."<br>\n";
         }
      }

   if (
$Debug)
      {
      print 
$Output;
      }
         
   return 
$SQL;
   }
?>


AndrewGSW 12-19-2012 04:10 PM

Quote:

I see my idea has been copied
Cheek :p. It's not quite the same anyway.

tangoforce 01-20-2013 04:36 PM

You're right, it's better - no need to tell it what server your on as it picks the correct SQL credentials automatically :cool:

No need to manually adjust a define statement, no need to change anything really, just upload everything and you're done :) (You can probably tell I like automation lol)

The only thing mine won't do is work with cron (for obvious reasons being that there is no domain supplied by a http header). That should be relatively easy to overcome though - you could change the script to work from a machine name instead in the $_SERVER array.

AndrewGSW 01-20-2013 07:41 PM

Quote:

You're right, it's better
Thank you :p :)

tangoforce 02-10-2013 08:34 PM

lol ;)


All times are GMT +1. The time now is 11:04 PM.

Powered by vBulletin®
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.