为什么ini_get('user_agent')不能与php中的file_get_contents()一起使用?

时间:2015-08-08 03:23:11

标签: php user-agent

我有这样的情况。

  1. 抓取工具脚本使用获取URL的内容 file_get_contents()

  2. 它将用户代理设置为“CrawlerBot” 在使用file_get_contents()的行之上 ini_set('user_agent')

  3. 我担心的是当我在URL代码中写ini_get('user_agent')时,它会得到一个空值。但是,当我使用$_SERVER['HTTP_USER_AGENT']时,它会检测到正确的用户代理。这两个文件都托管在同一台服务器上。

    有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

那不是ini_get()所做的。它用于检索服务器配置值(服务器的配置),而不是请求特定的值,例如请求的浏览器/脚本/其他任何内容发送的用户代理。

因此,您可以使用ini_get()找出为服务器发出的请求设置的用户代理值(如果有),就像您实际制作的那样。您无法使用它来查找到您的服务器的请求的用户代理

答案 1 :(得分:0)

以下是设置用户代理并使用file_get_contents检索资源的代码示例。

//Set uri       
$uri = 'http://example.com';

//Init context
$ctx = stream_context_create(
        array(
                'http' => array(
                        'user_agent' => 'MySuperAgent/3.0'
                )
        )
);

//Try to retrieve content
if (($data = file_get_contents($uri, false, $ctx)) === false) {
        die('file_get_contents error');
}

ps:请注意,即使对于https资源,上下文数组也应该在http键下。

ps2:我强烈建议您在上下文中设置超时和最大可接受重定向,以避免应用程序速度变慢。