2016-04-04 27 views
0

İstek üzerine sunucunun harici bir kaynaktan indirmek üzere belirli bir dosyayı geri getireceği bir komut dosyası yaptım. diğer sunucu üzerinde sınırsız bant genişliği nedeniyle kaynak:PHP - Dosyayı harici sunucudan indir, dosya adı "'":' filename.zip 'yazıyor

$ch = curl_init(); 
$url="http://www.example.com/downloads/$fileName"; 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_NOBODY, true); // make it a HEAD request 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$head = curl_exec($ch); 

$mimeType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); 
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); 

header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Type: $mimeType"); 
header("Content-length: $size"); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Disposition:attachment;filename='$fileName'"); 
readfile($url); 

$ dosya ön ucunda istek geliyor. Bir formdan basit bir yazıdır. Hatta nerede hiçbir fikrim yok, ben bir duvara çarptı 'filename.zip'filename.zip

yerine,:

her şey harika çalışıyor, ancak bazı kullanıcılar, tüm dosya adı tırnak çünkü onlar dosyayı açmak olamaz bildirmiştir Bakmaya başlamak için, görünüşe göre bu bazı mac kullanıcıları ile olur. Herhangi bir fikir?

+1

Bunun nedeni, ikinci son satırdaki tırnakları buraya koymanızdır. ': Ben – Sammitch

+0

Bence ihtiyaç var. – multimediaxp

+0

İkimiz de yarı sağız, [çift tırnaklara ihtiyacınız var] (https://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1). Mike'ın cevabına bak. – Sammitch

cevap

3

HTTP standardı, Content-Disposition başlığındaki dosya adı parametresi etrafında çift tırnak işareti koyar. Yani kodunuzda aşağıdaki gibi görünebilir:

header('Cache-Control: public'); 
header('Content-Description: File Transfer'); 
header('Content-Type: ' . $mimeType); 
header('Content-Type:application/octet-stream'); 
header('Content-length: ' . $size); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Disposition:attachment;filename="' . $fileName . '"'); 
readfile($url); 

Not burada sürekli tüm dize tanımları sunmak için tek tırnak kullanmak için tüm PHP dize tanımları değiştiğini.

+0

Merhaba Mike, biraz araştırma yapıyorum, haklısınız, çok teşekkürler, AMA! Sonunda başka bir yazı ekledim: "'.. $ Filename.'"; ' Bu bir şart mı? – multimediaxp

+1

@multimediaxp Gereksinim yok, ancak eklemek için Tamam. Noktalı virgül, parametre ayırıcıdır. –