PHP ile eki olarak zorlanan bir dosyayı indirin

2 Cevap php

I am trying to download a file with PHP from an FTP server which i can access from http too. For example: FTP://username:password@someserver.com/file_name_here.gz. The file is forced as an attachment from the server (not as a PDF or TXT would do eg: output). I tried it with 3 different methods:

  1. file_get_contents -> sıfır büyüklükte dosyayı Dönüş
  2. Curl -> zaman aşımına
  3. FTP fonksiyonu -> sıfır büyüklükte dosyayı verir

Ben CURL bunu yapmak için bir yol olduğunu düşünüyorum ama ben dosya indirmek için yönetemez ... İşte benim kod:

$curl = curl_init();
$url ='ftp://'.$network['username'].':'.$network['password'].'@'.$network['metadata_url'].'/'.$path.'/'.$data['title'];
curl_setopt($curl, CURLOPT_URL,$url);
//curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$file = fopen("./feeds/".$data['title'], "w");
curl_setopt($curl, CURLOPT_FILE, $file);
$result = curl_exec ($curl);

Ben CURLOPT_URL de kullanıcı adı ve parola belirleme ve CURL ile belirleyerek, bunları hem çalıştı. Aynı şey yollarından ikisi ile olur ...

Size yardım edebilir miyim?

Edit: dosya dinamik sunucusundan hizmet olduğunu söylemeyi unuttum. Yani, örneğin gerçek dosya: i .check kısmını ommit zaman ben orijinal dosyayı almak filename.gz.check ki. Onlar bunu nedenini bilmiyorum ama ben olduğu gibi bu birlikte çalışmak gerekir.

2 Cevap

(Bir not:.. "Eki olarak zorla" kavramı bir FTP sunucusu bağlamında mantıklı değil FTP sunucuları sadece bit hizmet, onlarla ne karar vermek için FTP istemcisi kalmış bu tersidir o bitleri hizmet değil, aynı zamanda bit (örn., HTTP başlıkları) hakkında meta hizmet HTTP sunucuları,, sizin müşteri talimatını o meta ne tarayıcınızı kullandığınızda (ekran vs indir / kaydetme eylemini zorlamak) yapmak. bir FTP istemcisi olarak, tarayıcı bir FTP GET isteğine yanıtı işlemek için nasıl hakkında bir karar verir ve bu süreç bir HTTP GET isteğine yanıtı işlemek için nasıl bir karar verir nasıl tamamen ayrıdır.)

Eğer sorun, $network beklenmeyen veya beklenmeyen bir değer veri geçen ve $_FTP değişkenleri olduğunuzu olmadığından emin olmak için, ilk olarak kodlanmış değerleri ile kodunuzu denediniz mi? Diğer bir deyişle, bir iyi bilinen adı, şifre, hostname, ve dosya adı yerine, ve emin geçerli çalışma dizinine bir dosya yazmak için haklara sahip yapım, bu test edin:

$curl = curl_init();
$url = "ftp://hostname/filename.gz";
$file = fopen("filename.gz", "w");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FILE, $file);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_exec($curl);
curl_close($curl);
fclose($file);

Herhangi bir olay, ayrıca geri tarayıcınıza gönderilen hata ayıklama bilgilerini almak için aşağıdaki ekleyebilirsiniz:

curl_setopt($curl, CURLOPT_VERBOSE, 1);

Eğer kodu, sen ne ayıklama bilgileri almak anlamına eklerseniz?

CURL tabanlı çözümü için herhangi bir zaman aşımı olmadan deneyin:

curl_setopt($curl, CURLOPT_CONNECTTIMEOUT,0);

Siz de bu programı deneyin ve bize ne söyleyebilir:

<?php

$conn = ftp_connect("ftp.someserver.com") or die("Could not connect");

ftp_login($conn,"username","password");

echo ftp_size($conn,"source.tgz");

echo ftp_get($conn,"target.tgz","source.tgz",FTP_BINARY);

ftp_close($conn);

?>