如何在apache中访问唯一ID?

时间:2014-04-08 06:56:12

标签: php macos apache audit

如何访问每个请求的apache跟踪的unique_id?我想在它调用的任何php脚本中跟踪它,并为每个请求记录它。

我从http.conf文件中删除以下行的评论:

LoadModule unique_id_module libexec/apache2/mod_unique_id.so

我试图在这个简单的PHP脚本中引用ID:

<?php

print("Hello world\n");
print($_SERVER['UNIQUE_ID']);
?>

然而,此脚本仅返回Hello World

这可能吗?如果这有任何不同,我正在运行macos。

$ _SERVER的var_dump如下:

array(29) { ["HTTP_HOST"]=> string(9) "localhost" 
["HTTP_CONNECTION"]=> string(10) "keep-alive" 
["HTTP_CACHE_CONTROL"]=> string(9) "max-age=0" 
["HTTP_ACCEPT"]=> string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" ["HTTP_USER_AGENT"]=> string(120) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36" ["HTTP_ACCEPT_ENCODING"]=> string(17) "gzip,deflate,sdch" 
["HTTP_ACCEPT_LANGUAGE"]=> string(14) "en-US,en;q=0.8" 
["HTTP_COOKIE"]=> string(11) "undefined=0" 
["PATH"]=> string(186) "/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/opt/local/lib/postgresql84/bin:/Applications/XAMPP/xamppfiles/bin" 
["SERVER_SIGNATURE"]=> string(0) "" 
    ["SERVER_SOFTWARE"]=> string(67) "Apache/2.2.24 (Unix) DAV/2 PHP/5.3.26 mod_ssl/2.2.24 OpenSSL/0.9.8y" 
    ["SERVER_NAME"]=> string(9) "localhost" 
    ["SERVER_ADDR"]=> string(3) "::1" 
    ["SERVER_PORT"]=> string(2) "80" 
    ["REMOTE_ADDR"]=> string(3) "::1" 
    ["DOCUMENT_ROOT"]=> string(28) "/Library/WebServer/Documents" 
    ["SERVER_ADMIN"]=> string(15) "you@example.com" 
    ["SCRIPT_FILENAME"]=> string(35) "/Library/WebServer/Documents/id.php" 
    ["REMOTE_PORT"]=> string(5) "49669" 
    ["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" 
    ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" 
    ["REQUEST_METHOD"]=> string(3) "GET" 
    ["QUERY_STRING"]=> string(0) "" 
    ["REQUEST_URI"]=> string(7) "/id.php" 
    ["SCRIPT_NAME"]=> string(7) "/id.php" 
    ["PHP_SELF"]=> string(7) "/id.php" 
    ["REQUEST_TIME"]=> int(1397681759) 
    ["argv"]=> array(0) { } 
    ["argc"]=> int(0) }

我在同一领域遇到的另一个问题可能是眼前的问题:https://apple.stackexchange.com/questions/127801/where-are-the-apache-config-files-stored?noredirect=1#comment149749_127801

6 个答案:

答案 0 :(得分:0)

正如赏金评论中所述,在OS X上存在一些与配置文件有关的问题。 例如,在OS X 10.7上我成功启用了httpd.conf中的mod_unique_id,如果我通过Preference Pane重新启动 - Web Sharing一切都按预期工作,但如果我通过apachectl命令重新启动一些奇怪的问题。

在OS X 10.9中,首选项窗格中没有Web共享,所以我的建议是坚持使用PHP的唯一ID生成器,例如这些函数可能会有所帮助: http://www.php.net/manual/en/function.uniqid.phphttp://www.php.net/manual/en/function.openssl-random-pseudo-bytes.php

答案 1 :(得分:0)

在我的OS X 10.9.2的全新安装中,我在/etc/apache2/httpd.conf中启用了unique_id_module和php5_module,使用sudo apachectl restart重新启动web服务器并且它正常工作。

我在执行apachectl -M | sort时列出了unique_id_module,并在PHP脚本中获得了_SERVER["UNIQUE_ID"]

使用以下脚本:

<?php
echo $_SERVER["UNIQUE_ID"];
?>

我有这样的输出:

U08ZosCoAAMAAC9CATgAAAAA

答案 2 :(得分:0)

使用以下文本创建一个phpinfo.php脚本:

<?php
phpinfo();
?>

之后 - 在浏览器中打开它,看看unique_id_module是否列为“已加载”。

答案 3 :(得分:0)

正如module documentation中所述:

  

环境变量UNIQUE_ID设置为每个请求的标识符

尝试使用getenv('UNIQUE_ID')代替$_SERVER['UNIQUE_ID'],它不是同一个

答案 4 :(得分:0)

我必须执行/usr/sbin/httpd -k stop然后/usr/sbin/httpd -k start才能获取配置。不确定为什么sudo apachectl restart看起来像重新开始,但它不是......

答案 5 :(得分:0)

a2enmod unique_id

在重新启动Apache之后对我有用。将%{UNIQUE_ID} e与自定义LogFormat一起使用时,我得到了一个连字符。