[PHP-users 30874] Re: PHP4.xでリモートファイルのファイルサイズ取得

Paul Takenaka a.p.takenaka @ gmail.com
2006年 12月 4日 (月) 15:02:55 JST


竹中です。

伊東さん、すばやいご回答をありがとうございます。

ご提示のページに掲載されているスクリプトの1つがPHP 4.xで使えることを確認致しました。
これでうまくいきそうです。どうもありがとうございます。

参考までに、実際に動作を確認したコードを下記に書いておきます。

function getHeadersPHP4($url, $format = 0, $user = '', $pass = '',
                        $referer = '')
/* PHP4.xで getHeaders() をエミュレートする
 */
{
    if (!empty($user)) {
        $authentification = base64_encode($user.':'.$pass);
        $authLine = "Authorization: Basic $authentification\r\n";
    }

    if (!empty($referer))
        $refererLine = "Referer: $referer\r\n";

    $urlInfo=parse_url($url);
    $port = isset($urlInfo['port']) ? $urlInfo['port'] : 80;
    $fp = fsockopen($urlInfo['host'], $port, $errno, $errstr, 30);

    if ($fp) {
        $head = "GET ".@$urlInfo['path']."?".@$urlInfo['query'].
                " HTTP/1.0\r\n";

        if (!empty($urlInfo['port'])) {
            $head .= "Host: ".@$urlInfo['host'].":".$urlInfo['port'].
                     "\r\n";
        } else
            $head .= "Host: ".@$urlInfo['host']."\r\n";

        $head .= "Connection: Close\r\n";
        $head .= "Accept: */*\r\n";
        $head .= $refererLine;
        $head .= $authLine;
        $head .= "\r\n";
        fputs($fp, $head);

        while (!feof($fp) or ($eoHeader == TRUE)) {
            if($header=fgets($fp, 1024)) {
                if ($header == "\r\n") {
                    $eoHeader = TRUE;

                    break;
                } else
                    $header = trim($header);

                if($format == 1) {
                    $key = array_shift(explode(':', $header));

                    if($key == $header)
                        $headers[] = $header;
                     else
                        $headers[$key] = substr($header, strlen($key) + 2);

                    unset($key);
                } else
                    $headers[] = $header;
            }
        }

        return $headers;
    } else
        return FALSE;
}


-- 
tak / Akikazu Paul Takenaka
a.p.takenaka @ gmail.com


PHP-users メーリングリストの案内