FleyerShaver
Neues Mitglied
Ich bin gerade dabei mich bei PHP mit zip-Dateien zu befassen. Folgenden Code habe ich zum entpacken von Dateien:
Bevor ich eine Datei entpacke möchte ich aber folgendes überprüfen. In der zip-Datei ist nur ein Ordner. Dieser Ordner kann verschiedene Namen haben. Nun möchte ich prüfen, ob in diesem Ordner eine datei mit dem Namen help.php vorhanden ist. Wenn diese vorhanden ist, soll der Ordner entpackt werden, andernfalls soll ein Fehler ausgegeben werden. Wie fange ich am besten an, sowas zu programmieren? EDIT: Was macht dieses sch**ß vbulletin immer mit meinem php-Code. Hier ist der Code ordentlich zu finden: quakenet:#php - nopaste #314959> -- The poster was too lazy to write a description.
PHP:
function unzip($zip_name, $to) { if(substr($to, -1) != '/') { $to .= '/'; } if(false == is_dir($to)) { mkdir($to, 0777); } $zip = fopen($zip_name, 'rb'); $size = filesize($zip_name); fseek($zip, $size - 22); // End of central dir record $data = unpack('Vsig/vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcommentsize', fread($zip, 22)); rewind($zip); for ($i = 0; $i < $data['entries']; $i++) { // Local file header $header = unpack('Vsig/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/ vextra_len', fread($zip, 30)); $header['filename'] = fread($zip, $header['filename_len']); if($header['mdate'] && $header['mtime']) { $hour = ($header['mtime'] & 0xF800) >> 11; $minute = ($header['mtime'] & 0x07E0) >> 5; $seconde = ($header['mtime'] & 0x001F) * 2; $year = (($header['mdate'] & 0xFE00) >> 9) + 1980; $month = ($header['mdate'] & 0x01E0) >> 5; $day = $header['mdate'] & 0x001F; $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year); } else { $header['mtime'] = time(); } if((substr($header['filename'], -1) == '/') || ($header['filename'] == '.') || ($header['filename'] == '..')) { if(false == is_dir($to . $header['filename'])) { mkdir($to . $header['filename']); } continue; } $fp = fopen($to . $header['filename'], 'wb'); while($header['compressed_size']) { if($header['compressed_size'] < 2048) { $read_size = $header['compressed_size']; } else { $read_size = 2048; } $binary_data = pack('a' . $read_size, fread($zip, $read_size)); fwrite($fp, $binary_data, $read_size); $header['compressed_size'] -= $read_size; } fclose($fp); touch($to . $header['filename'], $header['mtime']); } fclose($zip); }