You are here

function _acquia_spi_security_review_htaccess_parse in Acquia Connector 6.2

Same name and namespace in other branches
  1. 7.3 acquia_spi/security_review.inc \_acquia_spi_security_review_htaccess_parse()
  2. 7.2 acquia_spi/security_review.inc \_acquia_spi_security_review_htaccess_parse()

Helper function to parse .htaccess data into nested array.

Parameters

$htaccess string: .htaccess file content

Return value

array Array of parsed data. Nested sections converted into two-dimensional array.

1 call to _acquia_spi_security_review_htaccess_parse()
_acquia_spi_security_review_htaccess_analyze in acquia_spi/security_review.inc
Helper function to analyze .htaccess in specified directory.

File

acquia_spi/security_review.inc, line 661
Stand-alone security checks and review system.

Code

function _acquia_spi_security_review_htaccess_parse($htaccess) {
  $result = array();

  // Remove full-line comments
  $htaccess = preg_replace('/^\\s*#.*$/mui', '', $htaccess);
  $htaccess = explode("\n", $htaccess);
  $section = array();
  $section_key = array();
  foreach ($htaccess as $key => $value) {
    $value = trim($value);
    if ($value) {

      // .htaccess section begin
      if (preg_match('/^<([^\\s]+)\\s+(.+)>.*$/ui', $value, $regs)) {
        $section[] = strtolower($regs[1]);
        $section_key[] = strtolower($regs[1]) . '-' . strtolower($regs[2]);
      }
      elseif (count($section) && preg_match('/^<\\/' . preg_quote($section[count($section) - 1], '/') . '>.*$/ui', $value, $regs)) {
        array_pop($section);
        array_pop($section_key);
      }
      else {
        $value = preg_replace(array(
          '/\\s*#.+/ui',
          '/\\s+/ui',
        ), array(
          '',
          ' ',
        ), $value);
        if (count($section)) {
          $result[implode('-', $section_key)][] = $value;
        }
        else {
          $result[] = $value;
        }
      }
    }
  }
  return $result;
}