Разбор файла .htaccess с помощью PHP - PullRequest
10 голосов
/ 01 сентября 2010

Я использую Zend Framework и .htaccess для некоторых настроек.Я сейчас пишу сценарии командной строки для планирования (например, cron).Скрипты командной строки не смотрят на файл .htaccess, потому что они не обслуживаются Apache.Я хотел бы проанализировать .htaccess с моим скриптом, чтобы получить некоторые настройки.Вот строки, которые меня особенно интересуют:

SetEnv APPLICATION_ENV development

php_value date.timezone America/New_York

Я заметил пакет PEAR File_HtAccess , но, похоже, он касается только частей аутентификации файла .htaccess.


РЕШЕНИЕ: (с учетом Bamieater )

echo операторы для вывода отладки, удалено из рабочего кода.

<code>$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 '
';

Ответы [ 4 ]

6 голосов
/ 01 сентября 2010

Чтение файла .htaccess в каждой строке и использование регулярного выражения для доступа к данным.

Например, что-то вроде этого:

$line = "php_value date.timezone America/New_York";
$pattern = "@^php_value date.timezone (.*)$@";

if(preg_match($pattern,$line,$matches))
{
    print_r($matches);
}
2 голосов
/ 03 февраля 2016

Заимствуя немного из Bamieater, вот более полная функция, которую вы можете перенести в начало вашего файла задания cron, который устанавливает переменные окружения и включает файл php_prepend_file.

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');
}
1 голос
/ 05 декабря 2014

Поздний ответ, но он может заинтересовать вас (или других, кто входит в эту ветку).

Я написал небольшой парсер .htaccess на PHP, который позволяет манипулировать файлом как ArrayObject.

Вы можете проверить проект здесь (GitHub) .

1 голос
/ 02 сентября 2010

Разбор .htaccess, несмотря на то, что это легко сделать, на мой взгляд, не лучшее решение.

Переменная окружения может быть установлена ​​в разных местах, поэтому вам нужно будет проверить все файлы (например, основная конфигурация Apache, другие .htaccesses).

Я бы рекомендовал установить отдельную переменную среды для сценариев оболочки,

export APPLICATION_ENV=staging

Я храню эти настройки в глобальных свойствах сервера (apache config и .bashrc), поэтому все приложения автоматически узнают, где они находятся, без изменения файлов при развертывании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...