代码之家  ›  专栏  ›  技术社区  ›  Sonny

用PHP解析.htaccess文件

  •  10
  • Sonny  · 技术社区  · 15 年前

    .htaccess 一些设置。我现在正在编写用于调度的命令行脚本(例如cron)。命令行脚本不会查看 .htaccess访问 因为它们不是由Apache提供的。我想解析 用我的脚本检索一些设置。以下是我特别感兴趣的台词:

    SetEnv APPLICATION_ENV development
    
    php_value date.timezone America/New_York
    

    我注意到 PEAR File_HtAccess .htaccess访问


    解决方案: (信用证到期日) Bamieater

    echo

    $htaccess = file(realpath(dirname(__FILE__)) . '/.htaccess');
    echo '<pre>';
    foreach ($htaccess as $line) {
        if (preg_match('/^\s*SetEnv\s+APPLICATION_ENV\s+(.*?)\s*$/', trim($line), $matches)) {
            defined('APPLICATION_ENV') || define('APPLICATION_ENV', $matches[1]);
            echo APPLICATION_ENV . PHP_EOL;
        } elseif (preg_match('/^\s*php_(?:admin_)?value\s+date\.timezone\s+(.*?)\s*$/', $line, $matches)) {
            date_default_timezone_set($matches[1]);
            echo date_default_timezone_get() . PHP_EOL;
        }
    }
    echo '</pre>';
    
    4 回复  |  直到 8 年前
        1
  •  6
  •   Bamieater    15 年前

    每行读取一个.htaccess文件,并使用正则表达式访问数据。

    $line = "php_value date.timezone America/New_York";
    $pattern = "@^php_value date.timezone (.*)$@";
    
    if(preg_match($pattern,$line,$matches))
    {
        print_r($matches);
    }
    
        2
  •  2
  •   wesman16    9 年前

    function isCLI() {
        return (PHP_SAPI == 'cli');
    }
    
    function loadEnvironmentFromHtaccess($file) {
        $line = file_get_contents($file);
    
        $pattern = '@SetEnv (?P<env>[^ ]*) (?P<value>[^ \n]*)@';
        preg_match_all($pattern, $line, $matches, PREG_SET_ORDER);
        foreach ($matches as $match) {
            $_SERVER[$match['env']] = $match['value'];
        }
    
        $pattern = '@php_value auto_prepend_file (?P<value>[^ \n]*)@';
        if (preg_match($pattern, $line, $matches)) {
            require $matches['value'];
        }
    }
    
    if (isCLI()) {
        loadEnvironmentFromHtaccess(dirname(__FILE__).'/../../.htaccess');
    }
    
        3
  •  1
  •   takeshin    15 年前

    解析 .htaccess

    export APPLICATION_ENV=staging
    

    我将这些设置保存在服务器的全局属性(apache config和.bashrc)中,因此所有应用程序都会自动知道它们的位置,而不会在部署时更改文件。

        4
  •  1
  •   Tivie    10 年前

    我写了一点 .htaccess 解析器,在PHP中,使人能够将文件作为ArrayObject进行操作。

    你可以检查这个项目 here (GitHub) .

    推荐文章