Indir zorlamak başlıklarını iter uzak dosyayı kaydedin

2 Cevap php

PHP ile uzak dosyaları indirebilirsiniz ama nasıl başlıklarını dışarı iter linkten indirebilirim? Yani, bazı linklere tıklayın ve bir indirme zorlamak ve dosyayı kaydetmek için iletişim kutusu ile size sunacaktır. Nasıl bir şey download and save bu tür PHP kullanarak yapabilirsiniz?

Ben bu konu hakkında yararlı bir şey bulamadı yana herhangi bir örnek veya öğreticiler bağlantılar harika olurdu.

Herhangi bir yardım için teşekkür ederiz

Updated and [SOLVED]

<?php

set_time_limit(300);

// File to download
$remoteFile = $_GET['url'];

$file = fopen($remoteFile, "r");


if (!$file) {
    echo "<p>Unable to open remote file.\n";
    exit;
}
$line = '';

while (!feof ($file)) {
    $line .= fgets ($file, 4096);
}

//readfile($line);
file_put_contents('here2.mp4',  $line);

fclose($file);

?>

2 Cevap

Sadece durumu yeniden çalıştı. Gubmo Bu indirme yöntemi Content-Type: application/octet-stream ve Content-type: application/force-download başlıklarıyla benim için çalışan, doğru.

Açıklandığı üzere here, HTTP 410 olduğu anlamına gelir URL requested by the client is no longer available from that system. This is not a 'never heard of it' response, but a 'does not live here any more' response. Belki de antileach sistemi bir tür var.

Bu araştırılmalıdır. Çerezleri ihtiyacınız varsa - stream-context-create yardımcı olabilir. Ya da belki de referer kontrol edin. Ama bu sorun başlıklarında değil neredeyse eminim.

Umarım bu yardımcı olur.

UPD Örnek kod hakkında sordum.

// file to download -- application/octet-stream
$remoteFile = 'http://dev/test/remote/send.php';
// file to download -- application/force-download
$remoteFile = 'http://chtyvo.org.ua/authors/Skriabin_Kuzma/Ya_Pobieda_i_Berlin.rtf.zip';
// file to store
$localFile = 'kuzma.zip';

$fin = fopen($remoteFile, "r");
if (!$fin) {
    die("Unable to open remote file");
}

$fout = fopen($localFile, "w");
if (!$fout) {
    die("Unable to open local file");
}

while (!feof($fin)) {
    $line = fgets($fin, 1024);
    fwrite($fout, $line, 1024);
}

fclose($fout);
fclose($fin);

Sizinki ile aynı.

Eğer uzak dosyaları indirmek gibi bunu aynı şekilde yapabiliriz. Bu "force indir" başlığı değerleri yerine sadece onları indirmek için veri satır içi görüntülemek istediğiniz kullanıcı ajanları söyle. Bu verileri görüntüleyebilir değil gibi ama bu komut için hiç fark etmez.