无法打开流:没有这样的文件或带有网页的目录

时间:2017-01-16 10:22:22

标签: php

我正在尝试阅读网页的一小部分内容。起初我认为问题是urlencode所以补充说,但问题仍然存在。

该脚本可以从google.com等简单链接中读取,但是它无法使用我想要的链接。

<?php 
        $link = "http://www.adidas.co.uk/nmd_r1-bape-camouflage-shoes/BA7326.html";
        $newlink = urlencode($link);

        $linkcontents = file_get_contents($newlink);
        $needle = "Sold out";
        if(strpos($linkcontents, $needle) == true){
            echo "String found";
        } else{
            echo "String not found";
        } ?>

3 个答案:

答案 0 :(得分:2)

我改变了我的答案,因为我在下面的代码中做了这个:

$link = "http://www.adidas.co.uk/nmd_r1-bape-camouflage-shoes/BA7326.html";

// create curl resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, $link);

// $output contains the output string
$output = curl_exec($ch);

die(var_dump($output));

它给了我这个回复

  

抱歉,您已被屏蔽

     

您无法访问此网站

     

为什么我被封锁了?

     

本网站使用安全服务来保护自己免受在线攻击   攻击。您刚刚执行的操作触发了安全性   解。有几个动作可以触发此块   包括提交某个单词或短语,SQL命令或   格式错误的数据。

     

我该怎么做才能解决这个问题?

     

如果你是个人连接,就像在家一样,你可以运行一个   在您的设备上进行防病毒扫描,以确保它不会被感染   恶意软件。

     

如果您在办公室或共享网络,则可以询问网络   管理员在网络上运行扫描寻找   配置错误或受感染的设备。

     

HTTP 403 - 禁止“

您似乎无法在Addidas网站上进行任何网页编辑。

答案 1 :(得分:0)

您不需要urlencode

您尝试访问的网站以403 Forbidden回复。

file_get_contents(http://www.adidas.co.uk/nmd_r1-bape-camouflage-shoes/BA7326.html): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

这是因为file_get_contents没有从网站的角度发送正确形成的请求。

您应该使用 curl 或其他请求工具,例如 Guzzle ,并发送一个正确形成的请求,这个请求是您尝试抓取的网站所理解的(例如:Guzzle将默认发送一些标题,以便它可以工作)。

答案 2 :(得分:0)

远程主机可能在没有有效标头信息的情况下过滤掉连接(例如用户代理)。

您可以通过创建stream context来欺骗它(通常最好将cURL用于这些事情):

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n" .
              "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2228.0 Safari/537.36\r\n"
  )
);

$ctx = stream_context_create($opts);

$content = file_get_contents($url,false,$ctx); 

免责声明:虽然这可能有助于返回HTML,但远程主机将这些检查放在适当位置的事实可能表明这样做会违反其使用条款。如果您的IP被列入黑名单,请不要责怪我。