Как узнать размер удаленного файла

Размер файла, размещенного на диске вычисляется средствами php очень просто — используем функцию filesize.
А вот с удаленным файлом, все значительно сложнее. Вроде бы все круто, только одно но — файлы у нас минимум по 300 Мб.

Поэтому решение отыскалось такое — заодно оно пригодится и для проверки файлов не только по http, но и по https, ftp и sftp

    function remotefsize($url) {
        $sch = parse_url($url, PHP_URL_SCHEME);
        if (($sch != "http") && ($sch != "https") && ($sch != "ftp") && ($sch != "ftps")) {
            return false;
        }
        if (($sch == "http") || ($sch == "https")) {
            $headers = get_headers($url, 1);
            if ((!array_key_exists("Content-Length", $headers))) { return false; }
            return $headers["Content-Length"];
        }
        if (($sch == "ftp") || ($sch == "ftps")) {
            $server = parse_url($url, PHP_URL_HOST);
            $port = parse_url($url, PHP_URL_PORT);
            $path = parse_url($url, PHP_URL_PATH);
            $user = parse_url($url, PHP_URL_USER);
            $pass = parse_url($url, PHP_URL_PASS);
            if ((!$server) || (!$path)) { return false; }
            if (!$port) { $port = 21; }
            if (!$user) { $user = "anonymous"; }
            if (!$pass) { $pass = "phpos@"; }
            switch ($sch) {
                case "ftp":
                    $ftpid = ftp_connect($server, $port);
                    break;
                case "ftps":
                    $ftpid = ftp_ssl_connect($server, $port);
                    break;
            }
            if (!$ftpid) { return false; }
            $login = ftp_login($ftpid, $user, $pass);
            if (!$login) { return false; }
            $ftpsize = ftp_size($ftpid, $path);
            ftp_close($ftpid);
            if ($ftpsize == -1) { return false; }
            return $ftpsize;
        }
    }

Как вы можете заметить в функцию передается только урл файла. Если к файлу есть доступ только по фтп, то путь будет следующим ftp://user:password@host:port/path
Дальнейший текст щедро оплачен
Удобный конструктор сайтов позволит создать веб-приложение без специальных знаний и навыков.
[ad name=»Adsense»]

Как узнать размер удаленного файла: 2 комментария

    • оу, а не слишком ли он «на соплях» этот способ? get_headers делает все то, что в данном примере растянуто на 10 строк.

Обсуждение закрыто.