Tag: lando development

  • Setting Up User-Specific PHP Configuration in Linux

    Overview

    PHP configuration is typically managed through the php.ini file and additional configuration files. While system-wide settings are stored in /etc/php/[version]/, you may want to add your own user-specific settings without modifying system files.

    This guide demonstrates how to set up user-specific PHP configuration that works alongside the system configuration.

    Default PHP Configuration Locations

    In most Linux distributions, PHP configuration files are located in:

    • Main configuration file: /etc/php/[version]/cli/php.ini (for command-line PHP)
    • Additional configuration directory: /etc/php/[version]/cli/conf.d/ (contains module-specific settings)

    You can check your current PHP configuration paths with:

    php --ini

    Creating User-Specific PHP Configuration

    Step 1: Create a Personal Configuration Directory

    Create a directory in your home folder to store your custom PHP settings:

    mkdir -p ~/php_config

    Step 2: Create Custom Configuration Files

    Create .ini files in your personal directory with your preferred settings. For example, to set your timezone:

    echo 'date.timezone = "America/Phoenix"' > ~/php_config/timezone.ini
    

    Other common settings you might want to customize in ~/php_config/php.ini:

    ; Memory limit
    memory_limit = 256M
    
    ; Maximum execution time
    max_execution_time = 120
    
    ; Error reporting
    error_reporting = E_ALL
    display_errors = On
    

    Step 3: Configure PHP to Use Your Settings

    To make PHP recognize your custom settings alongside the system settings, set the PHP_INI_SCAN_DIR environment variable:

    version=8.4
    export PHP_INI_SCAN_DIR=/etc/php/$version/cli/conf.d:~/php_config/
    

    Replace version=8.4 with your PHP version.

    Step 4: Make the Configuration Permanent

    Add the export command to your shell configuration file (.bashrc, .zshrc, or .profile):

    version=8.4
    echo "export PHP_INI_SCAN_DIR=/etc/php/$version/cli/conf.d:~/php_config" >> ~/.bashrc
    

    Then reload your shell configuration:

    source ~/.bashrc
    

    Verifying Your Configuration

    To verify that your custom settings are being applied:

    php -r "echo 'Current timezone: ' . date_default_timezone_get() . PHP_EOL;"
    

    You can also check all loaded configuration files:

    php --ini
    

    Benefits of User-Specific Configuration

    1. Non-destructive: Doesn’t modify system files
    2. Portable: Your settings follow your user account
    3. Isolated: Doesn’t affect other users
    4. Maintainable: Easier to track your custom settings
    5. Upgradable: System updates won’t overwrite your settings

    Important Notes

    • The main php.ini file is always loaded first
    • Settings in your custom files will override the same settings from the main configuration
    • Some settings can only be set in the main php.ini file and cannot be overridden
    • Web server PHP (Apache, Nginx) uses different configuration files than CLI PHP

    Troubleshooting

    If your settings aren’t being applied:

    1. Ensure the path in PHP_INI_SCAN_DIR is correct
    2. Check that your .ini files have the correct syntax
    3. Verify file permissions (should be readable)
    4. Restart your terminal session

    For web server PHP, you’ll need to restart the web server after changing PHP settings.

    PHP Configuration in Containerized Development Environments

    Containerized development environments like Lando and Local by Flywheel use isolated PHP configurations separate from your host system. The user-specific configuration approach described above won’t automatically apply to these environments.

    Lando Configuration

    Lando provides several ways to customize PHP settings:

    Option 1: Using .lando.yml Configuration

    services:
      appserver:
        config:
          php: path/to/custom/php.ini
    

    Option 2: Inline PHP Settings in .lando.yml

    services:
      appserver:
        config:
          php: |
            date.timezone = "America/Phoenix"
            memory_limit = 256M
            display_errors = 1
            error_reporting = E_ALL
    

    Option 3: Custom php.ini with Volume Mounting

    services:
      appserver:
        volumes:
          - ./php-custom.ini:/usr/local/etc/php/conf.d/custom.ini
    

    Local by Flywheel Configuration

    Local by Flywheel also offers ways to customize PHP:

    Option 1: Using the UI

    1. Open the site’s dashboard in Local
    2. Click on “Site” → “PHP”
    3. Modify PHP settings in the interface
    4. Restart the site for changes to take effect

    Option 2: Custom php.ini File

    You can add a custom php.ini file to your site’s configuration:

    1. Locate your site’s configuration folder (typically in Local’s site directory)
    2. Add a custom php.ini file
    3. Restart the site

    Best Practices for Containerized Environments

    1. Project-specific configuration: Store a standard php-custom.ini in your project repository
    2. Documentation: Include setup instructions in your project README
    3. Version control: Track PHP configuration changes alongside code changes
    4. Consistency: Ensure all team members use the same PHP settings

    This approach ensures consistent behavior across different development environments and makes it easier to onboard new team members.