robertroth: Eingebundene swf soll erst bei Klick starten

Beitrag lesen

Liebe Mitdenker, liebe Wissende, liebe Neugierige,

Da lasse ich mal das Provisorium stehen, ein schlichter Link auf die swf Datei.

Warum sollte man den Client auch große Datenmengen laden lassen, die er nachher gar nicht nutzen will?

Ich würde an deiner Stelle aber die Größe der Ressource neben dem Link erwähnen, oder wenn sich die Größe nicht Remote abfragen lässt, zumindest daneben schreiben, dass die Ressource größer sein kann.

Hier eine kleine hilfreiche Funktion dafür:

function head_request($url, $status_only=false, $parsed=true)
{
    ### checks, if an url exists. 
    ### if no scheme is provided, 'http://' will be assumed
    ### if not "$parsed", raw headers shell be returned, 
    ###     otherwise an array shell be produced
    ###
    ### Used own Constants: TIMEOUT_SOCK_OPEN, TIMEOUT_STREAM_READ
    
	defined('TIMEOUT_SOCK_OPEN') or define('TIMEOUT_SOCK_OPEN', 2);
	defined('TIMEOUT_STREAM_READ') or define('TIMEOUT_STREAM_READ', 2);

	
    $url = trim($url);
    $_url_parts = parse_url($url);

    if (!isset($_url_parts['scheme'])) $url = 'http://' . $url;

    $_url_parts = parse_url($url);
    
#    * scheme - e.g. http
#    * host
#    * port
#    * user
#    * pass
#    * path
#    * query - after the question mark ?
#    * fragment - after the hashmark #

    if (!isset($_url_parts['host'])) return false;

    $fp = @fsockopen($_url_parts['host'], 80, $errno, $errstr, TIMEOUT_SOCK_OPEN);

    if (!$fp) return false;

    stream_set_timeout($fp, TIMEOUT_STREAM_READ);
	
   	$path = '/';
	if (isset($_url_parts['path'])) {$path = $_url_parts['path'];}
	
    $out = "HEAD $path HTTP/1.1\r\n";
    $out .= "Host: " . $_url_parts['host'] . "\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    
    $res = '';
    
    while (!feof($fp)) 
    {
        $res .= fgets($fp, 128);
    }
    
    $_info = stream_get_meta_data($fp);
    fclose($fp);

    if ($_info['timed_out']) return false;
    
    $res = str_replace(array('   ', '  '), ' ', $res);  ###*ups* hier nachbessern! ###
    $_lines = explode("\r\n", $res);

#       return $_lines;
    
    foreach ($_lines as $key => $value)
    {
        if (strlen($value) == 0) 
        {
            unset($_lines[$key]);
            continue;
        }
        
        $_help[$key] = explode(': ', $value);

        if (!isset($_help[$key][1]))
        {
            $_out['status'] = explode(' ', trim($_help[$key][0]));
        }
        else
        {
            $_out[strtolower($_help[$key][0])] = explode(' ', trim($_help[$key][1]));
        }   
    }

    if (!isset($_out['status'][1])) return false;
    if ($status_only) return $_out['status'][1];
    if (!$parsed) return $res;
    
    return $_out;   
}

Unter [content-length] solltest Du die Größe der Datei dann finden.

Die Funktion ist außerdem ganz nützlich, den Link automatisch zu entfernen, wenn der Request auf die Ressource nicht mit Status 200 (...) antwortet.

Spirituelle Grüße
Euer Robert
robert.r@online.de

--
Möge der wahre Forumsgeist ewig leben!