2011-10-03 55 views
0

Im'试图从我的脚本中远程解析CSV。我用fopen()打开它,然后用fgetcsv解析数据。我需要检查文件是否真的存在。这是行不通的,总是返回truePHP fopen()通过HTTP,我如何检查存在和它的MIME?

$response->setStatusCode(500); 
    $response->setContent($url); 
    if (($handle = fopen($url, "r")) == FALSE) return $response; 

的问题是,即使在资源不存在,我的ISP将我重定向到它的搜索页面(我本地开发)。

只要可能,检查网址的MIME就行了。任何帮助?

+3

尝试使用'get_headers'创建一个HEAD请求:http://php.net/get_headers。您应该能够从那里的状态代码中查看资源是否可用。 – mellamokb

+0

试试这个 - > if(($ handle = fopen($ url,“r”))!== FALSE)return $ response; – B4NZ41

+0

@mellamokb听起来不错,它会返回302!谢谢..我会将它标记为答案。 – gremo

回答

2

尝试仅制作一个HEAD请求get_headers。您应该能够从那里的状态代码中查看资源是否可用。

+0

该方法非常简单,可以正常检查状态和内容类型。谢谢。 – gremo

0

在本地机器网络配置中设置其他DNS服务器。例如,你可以使用谷歌DNS服务器(http://code.google.com/speed/public-dns)。

+0

我已经使用谷歌DNS服务器(8.8.8.8),但由于一些奇怪的原因,我仍然看到ISP搜索页面。任何线索? – gremo

+1

...和交换机ISP。没有办法退出的一家ISP做了这样的重定向,应该破产。 –

+1

@格雷莫:最有可能的是深度包检测。 –

-1

解决方案:禁用重定向。通常这包括将DNS服务器更改为由您的ISP管理的而不是

解决方法:呼叫stream_get_meta_data()fopen()返回的资源。在http:协议的情况下,返回的数组将具有包含所有HTTP响应标头的wrapper_data项目。请注意,如果涉及重定向,则所有响应将位于同一阵列中,如下例所示。

 
$ php -r '$a = fopen("http://www.google.com/", "r"); print_r(stream_get_meta_data($a));' 
Array 
(
[wrapper_data] => Array 
     (
      [0] => HTTP/1.0 302 Found 
      [1] => Location: http://www.google.co.uk/ 
      [2] => Cache-Control: private 
      [3] => Content-Type: text/html; charset=UTF-8 
      [4] => Set-Cookie: PREF=ID=5e6e2f87c95ce139:FF=0:TM=1317669253:LM=1317669253:S=uaGlatRCh9XB8oAI; expires=Wed, 02-Oct-2013 19:14:13 GMT; path=/; domain=.google.com 
      [5] => Date: Mon, 03 Oct 2011 19:14:13 GMT 
      [6] => Server: gws 
      [7] => Content-Length: 221 
      [8] => X-XSS-Protection: 1; mode=block 
      [9] => HTTP/1.0 200 OK 
      [10] => Date: Mon, 03 Oct 2011 19:14:13 GMT 
      [11] => Expires: -1 
      [12] => Cache-Control: private, max-age=0 
      [13] => Content-Type: text/html; charset=ISO-8859-1 
      [14] => Set-Cookie: PREF=ID=9c5c0212c24c4ca1:FF=0:TM=1317669253:LM=1317669254:S=P7nzy5lBsmvuZm8A; expires=Wed, 02-Oct-2013 19:14:14 GMT; path=/; domain=.google.co.uk 
      [15] => Set-Cookie: NID=51=J8T2rxPOdsbfWlIWhWIdL4uerFqLibBV2LDh81OdqmfvRvq3zXwAJ7tsNEmBby_h2wT4Qv8Wd7QK6CyG-leo9mgR4RbFeNpw83mMGlvCHhU0uiUv6ki2doinv1EBU5XM; expires=Tue, 03-Apr-2012 19:14:14 GMT; path=/; domain=.google.co.uk; HttpOnly 
      [16] => Server: gws 
      [17] => X-XSS-Protection: 1; mode=block 
     ) 
 
    [wrapper_type] => http 
    [stream_type] => tcp_socket/ssl 
    [mode] => r 
    [unread_bytes] => 4096 
    [seekable] => 
    [uri] => http://www.google.com/ 
    [timed_out] => 
    [blocked] => 1 
    [eof] => 
)