Herkes hey, ben uzak bir kaynaktan gelen bir zip dosyası indirir ve daha sonra bir dizine zip dosyasını ayıklamak için beklenen bir senaryo yazdım. Aşağıdaki betik:
<?php
$url = "http://example.com/some_file.zip";
download($url,'file.zip');
function download($url,$file_name = NULL){
if($file_name == NULL){ $file_name = basename($url);}
$url_stuff = parse_url($url);
$port = isset($url_stuff['port']) ? $url_stuff['port'] : 80;
$fp = fsockopen($url_stuff['host'], $port);
if(!$fp){ return false;}
$query = 'GET ' . $url_stuff['path'] . " HTTP/1.0\n";
$query .= 'Host: ' . $url_stuff['host'];
$query .= "\n\n";
fwrite($fp, $query);
while ($tmp = fread($fp, 8192)) {
$buffer .= $tmp;
}
preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts);
$file_binary = substr($buffer, - $parts[1]);
if($file_name == NULL){
$temp = explode(".",$url);
$file_name = $temp[count($temp)-1];
}
if(!file_exists("packages")){ mkdir("packages", 0755);}
$file_open = fopen("packages/" . $file_name,'w');
if(!$file_open){ return false;}
fwrite($file_open,$file_binary);
$zip = zip_open(realpath("packages")."/".$file_name);
if ($zip) {
while ($zip_entry = zip_read($zip)) {
$fp = fopen("some_dir/".zip_entry_name($zip_entry), "w");
if(zip_entry_open($zip, $zip_entry, "r")) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
fwrite($fp,"$buf");
zip_entry_close($zip_entry);
fclose($fp);
}
}
zip_close($zip);
}
fclose($file_open);
return true;
}
?>
Ben sorunu uzak dosya indirme sorunsuz çalışırken, ben bunu ayıklamak için görünmüyor olabilir. zip_read()
ve zip_close()
bu demektir ki ben buldum, "... tamsayı verilen parametre 1 kaynak olmasını beklediğini" söyleyerek hataları dönmek zip_open()
çıkaramadık oldu ve ben "Zip Dosyası Fonksiyon hatası: Henüz bir zip arşivi" anlamına gelen "19" olarak bulduk bir hata kodu, dönüyor. Ancak, ben indirirken ediyorum dosya, aslında bir zip dosyası olduğunu biliyorum. Herkes bu tuhaf davranışlarını açıklamak ve bir düzeltme sağlayabilir? Bu çok duyacağız!