PHP fopen()通过HTTP,我如何检查是否存在及其MIME?

时间:2011-10-03 18:59:32

标签: php file csv mime-types fopen

我试图从我的脚本远程解析CSV。我用fopen()打开它,然后使用fgetcsv解析数据。我需要检查文件是否确实存在。这不起作用,总是返回true

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

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

如果可能,只检查网址的MIME就可以了。有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

答案 2 :(得分:-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] =>
)