Nasıl indirmek ve sıkıştırılmış CSV ayıklamak ve MySQL tabloya CSV dosyasının içeriğini alabilirsiniz

5 Cevap php

Ben tek bir CSV dosyasını içerir ve sonra varolan bir MySQL veritabanı tabloya ayıklanır CSV dosyasının içeriğini yüklemek bir web sunucusundan bir zip dosyasını indirmek için bir PHP komut dosyası yazmak çalışıyorum.

$targetFile = 'data-' . md5(microtime()) . '.zip';
$url = 'http://www.address.com/data.zip';
$out = fopen('/path/to/zip/save/folder/' . $targetFile , 'wb');

$ch = curl_init();
curl_setopt($ch, CURLOPT_FILE, $out);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);

$info = curl_getinfo($ch);

if($info['http_code'] == 200 && $info['content_type'] == 'application/x-zip-compressed') {
  $zh = zip_open('/path/to/zip/save/folder/' . $targetFile);
}
else {
  exit('Download of ZIP file failed.');
}

Yukarıdaki kod benzersiz bir adla sunucusundaki bir dizine dosya indirmek için yönetmek yapar. Ama içeriğini ayıklamak için kuramıyorum.

Ben zip ayıklamak için PHP'nin zip_open komutunu kullanarak denedim ama her zaman yerine bir sap 19 bir hata kodu döndürür. Ben zip_open işleve geçmek yolunu kontrol ettik ve tam bir sistem yolu yani var /path/to/zip/save/folder/data-5384e2306718492958f20e68de95c6fa.zip.

Note:

CSV dosyası dosyası sıkıştırılmamış sıkıştırılmış 2.5 MB ve 30 MB.

5 Cevap

Ben ZIP dosyasını açmak için çalıştı önce sorun nedeniyle eksik fclose çağrısına olduğu görünüyor.

Dosya olarak içeriği kaydetmeden önce yanıt başlıklarını şerit unutmayın. HTTP/1.1 200 OK yanıtı, ya da takip etmek 301/302 yönlendirmeleri vardı Ayrıca, eğer kontrol edebilirsiniz

zip_open () hata numarası 19: "Zip Dosyası Fonksiyon hatası: Henüz bir zip arşivi". Bu script düzgün zip dosyasını indirmek anlamına gelir.

Ben bunu kullanın

    $r = new HTTPRequest($url);
    $r->setOptions($options);
    $r->send();
    $code = $r->getResponseCode();
    if (200 != $code) {
        throw ...;
    }

    file_put_contents($zip, $r->getResponseBody());

    $arc = new ZipArchive;
    if (true !== $arc->open($zip)) {
        throw ...;
    }
    file_put_contents($out, $arc->getFromIndex(0));

Eğer oradan almak gerekir

Harika bir çözüm, ama biz otomatik komut ikinci bir kaçak dosyanın üzerine nasıl yapabilirim??

Çözümleri, aynı zaman ya işi yapmak için çok benzer bir şey almalıdır.