2011-10-03 53 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] => 
)