Back to FilesystemHelper class

Method remotefsize

public static mixed
remotefsize
(mixed $url)
Remote file size function for streams that don't support it
Parameters
  • string $url Link identifier
Returns
  • mixed
Since
  • 1.7.0
-
  • https://www.php.net/manual/en/function.filesize.php

Method remotefsize - Source code

/**
 * Remote file size function for streams that don't support it
 *
 * @param   string  $url  Link identifier
 *
 * @return  mixed
 *
 * @link    https://www.php.net/manual/en/function.filesize.php
 * @since   1.7.0
 */
public static 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 = '';
        }
        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;
    }
}