【问题标题】:Access environment variables defined in .htaccess within PHP script called in shell?在shell中调用的PHP脚本中访问.htaccess中定义的环境变量?
【发布时间】:2023-03-31 12:58:01
【问题描述】:

我正在尝试从 shell 中的 PHP 脚本打印在 .htaccess 中定义的环境变量。

我的树是:
/.htaccess(在根文件夹中)
/test/index.php(在“test”文件夹中)

我使用 SetEnv 在 .htaccess 中设置我的变量:

SetEnv HTTP_TEST "testing"

我的 PHP 脚本“/test/index.php”是:

#!/usr/bin/php
<?php
echo $_ENV['HTTP_TEST']; // print empty
echo $_SERVER['HTTP_TEST']; // print empty
echo getenv('HTTP_TEST'); // print empty

但是,如果我从浏览器访问我的 PHP 脚本,则没有问题(当然没有 #!/usr/bin/php...)

感谢您的帮助。

【问题讨论】:

  • 您是从命令行还是从 http 请求运行 index.php 脚本?
  • 无法通过命令行。由于那里根本不涉及 apache,因此您在 .conf/.htaccess 中所做的任何事情都不会产生任何影响。这就像想知道为什么你站在外面时会被雨淋,因为当你在屋里时不会被雨淋。
  • 你在运行 mod_env 吗? stackoverflow.com/a/2008355/773522
  • @MarcB,这正是我问的原因......
  • 您可以运行 cron 脚本并模拟“从浏览器运行”。基本上你可以使用wget 命令来调用一个http 请求。这将解决您的问题。

标签: php .htaccess shell setenv


【解决方案1】:

我构建了一个小的 PHP 脚本来解析 .htaccess 文件以找到 SetEnv

#!/usr/bin/php
<?php

// Read all lines from file
$htaccess = file('/.htaccess');

foreach ($htaccess as $line) {
    // Trim left/right spaces, replace all repeated spaces by 1 space
    $line = preg_replace('/[ \t]+/', ' ', trim($line));

    // It's our variable defined with SetEnv
    if (substr($line, 0, 7) === 'SetEnv ') {
        $tmp = explode(' ', substr($line, 7), 2);
        $ENV[$tmp[0]] = str_replace('"', '', $tmp[1]);
    }
}

print_r($ENV);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2012-04-25
    • 2012-04-26
    • 2011-04-26
    • 2014-08-29
    • 1970-01-01
    相关资源
    最近更新 更多