Php tüm dosya türlerini indirmeden

2 Cevap php

php indirirken farklı "content-type" kurma bir yolu olup olmadığını ben sadece merak ediyorum? gibi. mp3 VE. pdf vb. yerine sadece tek bir dosya türünü belirtmek zorunda. Benim sorunum ben indirilecek 2 dosya türlerini olması, bir tür pdf ve diğer tip mp3, ama ben ses / mpeg "içerik türü" değiştirirseniz, o zaman için uzantısı görünmüyor. pdf ... i anlamak umut? yardım lütfen!

2 Cevap

Eğer kullanıcı aynı zamanda Content-type HTTP başlığını gönderen bir PHP komut dosyası, gelen gönderilen bazı içerik indirirken demek ise, her dosya türü için farklı bir değer ile bu başlığı ayarlamak değil mi?

Böyle bir şey (pseudo-code):

if (file is a PDF) {
    header('Content-type: application/pdf');
} else if (file is a MP3) {
    header('Content-type: audio/mpeg');
}

Ayrıca henüz hakkında düşünce değil diğer bazı dosyaları varsa ve "varsayılan" bir durum, yararlı olabilir.

Bu fonksiyon, benim için büyük işler:

function Download($path, $speed = null)
{
    if (is_file($path) === true)
    {
    	set_time_limit(0);

    	while (ob_get_level() > 0)
    	{
    		ob_end_clean();
    	}

    	$size = sprintf('%u', filesize($path));
    	$speed = (is_null($speed) === true) ? $size : intval($speed) * 1024;

    	header('Expires: 0');
    	header('Pragma: public');
    	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    	header('Content-Type: application/octet-stream');
    	header('Content-Length: ' . $size);
    	header('Content-Disposition: attachment; filename="' . basename($path) . '"');
    	header('Content-Transfer-Encoding: binary');

    	for ($i = 0; $i <= $size; $i = $i + $speed)
    	{
    		echo file_get_contents($path, false, null, $i, $speed);

    		while (ob_get_level() > 0)
    		{
    			ob_end_clean();
    		}

    		flush();
    		sleep(1);
    	}

    	exit();
    }

    return false;
}

Ayrıca isteğe bağlı dosya teslim edildiği maksimum hızını belirleyebilirsiniz.