Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 10 of 10
  1. #1
    Senior Coder
    Join Date
    Apr 2011
    Location
    London, England
    Posts
    2,120
    Thanks
    15
    Thanked 354 Times in 353 Posts

    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.
    Last edited by AndrewGSW; 12-17-2012 at 01:37 AM.
    "I'm here to save your life. But if I'm going to do that, I'll need total uninanonynymity." Me Myself & Irene.
    Validate your HTML and CSS

  • #2
    Regular Coder
    Join Date
    Sep 2007
    Location
    Grahamstown, South Africa
    Posts
    237
    Thanks
    6
    Thanked 17 Times in 17 Posts
    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.

  • #3
    Regular Coder
    Join Date
    Sep 2007
    Location
    Grahamstown, South Africa
    Posts
    237
    Thanks
    6
    Thanked 17 Times in 17 Posts
    Not that andrew's way isnt awesome! Just chipping in.

  • #4
    Senior Coder
    Join Date
    Apr 2011
    Location
    London, England
    Posts
    2,120
    Thanks
    15
    Thanked 354 Times in 353 Posts
    Is APPLICATION_ENV specific to certain frameworks or servers? But I suppose it can be assigned in any comparable settings file.
    Last edited by AndrewGSW; 12-18-2012 at 12:28 AM.
    "I'm here to save your life. But if I'm going to do that, I'll need total uninanonynymity." Me Myself & Irene.
    Validate your HTML and CSS

  • #5
    Regular Coder
    Join Date
    Sep 2007
    Location
    Grahamstown, South Africa
    Posts
    237
    Thanks
    6
    Thanked 17 Times in 17 Posts
    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.

  • #6
    Senior Coder
    Join Date
    Feb 2011
    Location
    Your Monitor
    Posts
    4,363
    Thanks
    61
    Thanked 530 Times in 517 Posts
    I see my idea has been copied
    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;
       }
    ?>
    Last edited by tangoforce; 12-18-2012 at 11:28 PM.
    See my new CodingForums Blog: http://www.codingforums.com/blogs/tangoforce/

    Many useful explanations and tips including: Cannot modify headers - already sent, The IE if (isset($_POST['submit'])) bug explained, unexpected T_CONSTANT_ENCAPSED_STRING, debugging tips and much more!

  • #7
    Senior Coder
    Join Date
    Apr 2011
    Location
    London, England
    Posts
    2,120
    Thanks
    15
    Thanked 354 Times in 353 Posts
    I see my idea has been copied
    Cheek . It's not quite the same anyway.
    "I'm here to save your life. But if I'm going to do that, I'll need total uninanonynymity." Me Myself & Irene.
    Validate your HTML and CSS

  • #8
    Senior Coder
    Join Date
    Feb 2011
    Location
    Your Monitor
    Posts
    4,363
    Thanks
    61
    Thanked 530 Times in 517 Posts
    You're right, it's better - no need to tell it what server your on as it picks the correct SQL credentials automatically

    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.
    See my new CodingForums Blog: http://www.codingforums.com/blogs/tangoforce/

    Many useful explanations and tips including: Cannot modify headers - already sent, The IE if (isset($_POST['submit'])) bug explained, unexpected T_CONSTANT_ENCAPSED_STRING, debugging tips and much more!

  • #9
    Senior Coder
    Join Date
    Apr 2011
    Location
    London, England
    Posts
    2,120
    Thanks
    15
    Thanked 354 Times in 353 Posts
    You're right, it's better
    Thank you
    "I'm here to save your life. But if I'm going to do that, I'll need total uninanonynymity." Me Myself & Irene.
    Validate your HTML and CSS

  • #10
    Senior Coder
    Join Date
    Feb 2011
    Location
    Your Monitor
    Posts
    4,363
    Thanks
    61
    Thanked 530 Times in 517 Posts
    lol
    See my new CodingForums Blog: http://www.codingforums.com/blogs/tangoforce/

    Many useful explanations and tips including: Cannot modify headers - already sent, The IE if (isset($_POST['submit'])) bug explained, unexpected T_CONSTANT_ENCAPSED_STRING, debugging tips and much more!


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •