Kullanıcıya PHP pas Dosya Saplı ve bu dosya yüklemeleri

2 Cevap php

Ben başka bir sunucudan dosya indirirken duyuyorum. Doğrusu benim sunucuya kaydederek daha benim kullanıcılara bu dosyayı itmek istiyoruz.

Bu sadece benim sunucusu geçer ve makineye kaydeder böylece diğer bir deyişle, onlara dosya tanıtıcısı geçmektedir. Bunu nasıl yapabilirim? Ben şimdiye kadar bu var:

$handle = fopen($_GET['fileURL'], 'r');
$filename = stream_get_contents($handle);

Nasıl bu belki başlıklarını kullanarak, kullanıcıya zorluyorsun?

Herhangi bir yardım ve yön için teşekkür ederiz.

EDIT

Ben başlıkları var:

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");

Onun bu başlıklar itmek değil sadece. Ben sadece dosya indirirken ama bana vermiyorsun gibi görünüyor yaklaşık 15 saniye sonra boş bir sayfa olsun.

I wish for the script to immediately send the headers to the user as a stream. exit();

2 Cevap

Bu deneyebilirsiniz

$filetype = mime_content_type($filename);
header('Content-type: '.$filetype);
header('Content-Disposition: attachment; filename="'.$filename.'"');

Lütfen EDIT GÜNCELLEME:

Başlıklar zaten hatayı gönderilen gibi bu sesler beri, hataları özürlü var mı?

error_reporting(E_ALL | E_STRICT);

Sen readfile () kullanırken fopen () kullanmak zorunda değilsiniz;

: Sadece bu gibi readfile içindeki dosya adı () içerir

readfile($_GET['fileUrl']);

Bu çok tehlikeli olmasına rağmen güvenlik açısından kullanıcı olarak dosya sunucusu üzerinde herhangi bir dosya belirtebilirsiniz. Sadece birisi indirmek mümkün olmak istiyorum birkaç dosya varsa belki onları bir diziye muhafaza edilmelidir (veya veritabanı, preferebly)

İşte bir dizi örnek:

$files = array('file1.jpg', 'file2.png', 'file3.pdf');
//assume $_GET['file_id'] == 0, 1 or 2

if (file_exists($files[$_GET['file_id']]))
    readfile($files[$_GET['file_id']]);