[php] pobieranie typu mime

0

da się jakos w php sprawdzic typ mime danego pliku?

0

to wymaga instalacji PECL, a ja dzialam na Windows.. jest jakies niepeclowe rozwiazanie?

0

poczytaj komentarze na w/w stronie

0

hmm w komentarzach jest albo o rozwiazaniach unix albo finfo a jedno i drugie odpada bo mam WInde

0

napisalem moj skrypt

<?php

	$zip = new ZipArchive;
	
	$zip->open('test.zip',ZipArchive::CREATE);
	
	$zip->addFile('show.php','show.php');
	
	$zip->close();
	
?> 

ale zadne archiwum nie zostaje utworzone w oczekiwanej lokalizacji pomimo ze mam zaladowana biblioteke php_zip.dll

0

a

mime_content_type()

?
powyższy post chyba nie do tego tematu

0

niestety ta funkcja nie dziala i jest opisane to w komentarzach na php.net

poza tym tu jest jej zamiennik

<?php if (!function_exists('mime_content_type ')) { function mime_content_type($filename) { $finfo = finfo_open(FILEINFO_MIME); $mimetype = finfo_file($finfo, $filename); finfo_close($finfo); return $mimetype; } } ?>

ona korzysta z finfo a jezeli tego nie ma to nie zwraca doslownie NIC, ani false ani bledu ani sukcesu-> NULL
sprawdz sam :)

0

no ta funkcja jest przestarzała, nie przeglądałem wszystkich komentarzy na php.net ale zazwyczaj jest tam rozwiązanie więc tobie bym to polecił
ewentualnie nie wiem co masz do PECLa, ew. możesz poświęcić godzinę (to i tak krócej niż już chyba czekasz na odpowiedź) i zrobić tak jak ja to już parę razy robiłem z funkcjami PECLa - czyli maksymalnie skrócić tamtej kod do tylko tobie potrzebnej części

chociażby przy okazji wyżej wplecionego poza tematem tworzenia ZIP - nie dawno przerobiłem klasę z PECLa do tej czynności i z 260 kB zrobiło się nie całe 4 kB

0

a co do pobierania content-type to osobiście gdy parę razy tego potrzebowałem - po prostu utworzyłem własną zwykłą tablicę (zresztą w FAQu na tej stronie też znajdziesz taką metodę i o ile się nie mylę w źródłach strony którą przeglądasz także)

0

na localhost ok, niestety tam gdzie to będzie stało nie będę juz mogl PECLa zainstalowac, dlatego chwytam sie wszystkiego tylko nie tego na razie. Znalazłem jeszcze taką klase ale ta z kolei generuje zip-y z błędami chociaz jest nawet na stronie Zedna w code. Oto kod ktory powinien wygenerowac zipa ktory mozna pobrac po klikniecu w link. Niestety tak jak wyzej z bledem (otwierane pod Windows)

<?php 

/* 

Zip file creation class 
makes zip files on the fly...

use the functions add_dir() and add_file() to build the zip file;
see example code below 

by Eric Mueller
http://www.themepark.com 

v1.1 9-20-01
  - added comments to example

v1.0 2-5-01

initial version with:
  - class appearance
  - add_file() and file() methods
  - gzcompress() output hacking
by Denis O.Philippov, [email protected], http://www.atlant.ru

*/ 

// official ZIP file format: http://www.pkware.com/appnote.txt 

class zipfile  
{  

    var $datasec = array(); // array to store compressed data 
    var $ctrl_dir = array(); // central directory   
    var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00"; //end of Central directory record 
    var $old_offset = 0; 

    function add_dir($name)   

    // adds "directory" to archive - do this before putting any files in directory! 
    // $name - name of directory... like this: "path/" 
    // ...then you can add files using add_file with names like "path/file.txt" 
    {  
        $name = str_replace("\\", "/", $name);  

        $fr = "x50x4bx03x04"; 
        $fr .= "x0ax00";    // ver needed to extract 
        $fr .= "x00x00";    // gen purpose bit flag 
        $fr .= "x00x00";    // compression method 
        $fr .= "x00x00x00x00"; // last mod time and date 

        $fr .= pack("V",0); // crc32 
        $fr .= pack("V",0); //compressed filesize 
        $fr .= pack("V",0); //uncompressed filesize 
        $fr .= pack("v", strlen($name) ); //length of pathname 
        $fr .= pack("v", 0 ); //extra field length 
        $fr .= $name;  
        // end of "local file header" segment 

        // no "file data" segment for path 

        // "data descriptor" segment (optional but necessary if archive is not served as file) 
        $fr .= pack("V",$crc); //crc32 
        $fr .= pack("V",$c_len); //compressed filesize 
        $fr .= pack("V",$unc_len); //uncompressed filesize 

        // add this entry to array 
        $this -> datasec[] = $fr; 

        $new_offset = strlen(implode("", $this->datasec)); 

        // ext. file attributes mirrors MS-DOS directory attr byte, detailed 
        // at http://support.microsoft.com/support/kb/articles/Q125/0/19.asp 

        // now add to central record 
        $cdrec = "x50x4bx01x02"; 
        $cdrec .="x00x00";    // version made by 
        $cdrec .="x0ax00";    // version needed to extract 
        $cdrec .="x00x00";    // gen purpose bit flag 
        $cdrec .="x00x00";    // compression method 
        $cdrec .="x00x00x00x00"; // last mod time & date 
        $cdrec .= pack("V",0); // crc32 
        $cdrec .= pack("V",0); //compressed filesize 
        $cdrec .= pack("V",0); //uncompressed filesize 
        $cdrec .= pack("v", strlen($name) ); //length of filename 
        $cdrec .= pack("v", 0 ); //extra field length   
        $cdrec .= pack("v", 0 ); //file comment length 
        $cdrec .= pack("v", 0 ); //disk number start 
        $cdrec .= pack("v", 0 ); //internal file attributes 
        $ext = "x00x00x10x00"; 
        $ext = "xffxffxffxff";  
        $cdrec .= pack("V", 16 ); //external file attributes  - 'directory' bit set 

        $cdrec .= pack("V", $this -> old_offset ); //relative offset of local header 
        $this -> old_offset = $new_offset; 

        $cdrec .= $name;  
        // optional extra field, file comment goes here 
        // save to array 
        $this -> ctrl_dir[] = $cdrec;  

         
    } 


    function add_file($data, $name)   

    // adds "file" to archive   
    // $data - file contents 
    // $name - name of file in archive. Add path if your want 

    {  
        $name = str_replace("", "/", $name);  
        //$name = str_replace("", "", $name); 

        $fr = "x50x4bx03x04"; 
        $fr .= "x14x00";    // ver needed to extract 
        $fr .= "x00x00";    // gen purpose bit flag 
        $fr .= "x08x00";    // compression method 
        $fr .= "x00x00x00x00"; // last mod time and date 

        $unc_len = strlen($data);  
        $crc = crc32($data);  
        $zdata = gzcompress($data);  
        $zdata = substr( substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug 
        $c_len = strlen($zdata);  
        $fr .= pack("V",$crc); // crc32 
        $fr .= pack("V",$c_len); //compressed filesize 
        $fr .= pack("V",$unc_len); //uncompressed filesize 
        $fr .= pack("v", strlen($name) ); //length of filename 
        $fr .= pack("v", 0 ); //extra field length 
        $fr .= $name;  
        // end of "local file header" segment 
         
        // "file data" segment 
        $fr .= $zdata;  

        // "data descriptor" segment (optional but necessary if archive is not served as file) 
        $fr .= pack("V",$crc); //crc32 
        $fr .= pack("V",$c_len); //compressed filesize 
        $fr .= pack("V",$unc_len); //uncompressed filesize 

        // add this entry to array 
        $this -> datasec[] = $fr; 

        $new_offset = strlen(implode("", $this->datasec)); 

        // now add to central directory record 
        $cdrec = "x50x4bx01x02"; 
        $cdrec .="x00x00";    // version made by 
        $cdrec .="x14x00";    // version needed to extract 
        $cdrec .="x00x00";    // gen purpose bit flag 
        $cdrec .="x08x00";    // compression method 
        $cdrec .="x00x00x00x00"; // last mod time & date 
        $cdrec .= pack("V",$crc); // crc32 
        $cdrec .= pack("V",$c_len); //compressed filesize 
        $cdrec .= pack("V",$unc_len); //uncompressed filesize 
        $cdrec .= pack("v", strlen($name) ); //length of filename 
        $cdrec .= pack("v", 0 ); //extra field length   
        $cdrec .= pack("v", 0 ); //file comment length 
        $cdrec .= pack("v", 0 ); //disk number start 
        $cdrec .= pack("v", 0 ); //internal file attributes 
        $cdrec .= pack("V", 32 ); //external file attributes - 'archive' bit set 

        $cdrec .= pack("V", $this -> old_offset ); //relative offset of local header 
//        echo "old offset is ".$this->old_offset.", new offset is $new_offset<br>"; 
        $this -> old_offset = $new_offset; 

        $cdrec .= $name;  
        // optional extra field, file comment goes here 
        // save to central directory 
        $this -> ctrl_dir[] = $cdrec;  
    } 

    function file() { // dump out file   
        $data = implode("", $this -> datasec);  
        $ctrldir = implode("", $this -> ctrl_dir);  

        return   
            $data.  
            $ctrldir.  
            $this -> eof_ctrl_dir.  
            pack("v", sizeof($this -> ctrl_dir)).     // total # of entries "on this disk" 
            pack("v", sizeof($this -> ctrl_dir)).     // total # of entries overall 
            pack("V", strlen($ctrldir)).             // size of central dir 
            pack("V", strlen($data)).                 // offset to start of central dir 
            "x00x00";                             // .zip file comment length 
    } 
}  



$zipfile = new zipfile();  

// add the subdirectory ... important!
$zipfile -> add_dir("dir/"); 

// add the binary data stored in the string 'filedata'
$filedata = "(read your file into $filedata)";  
$zipfile -> add_file($filedata, "dir/file.txt");  

/*
// the next three lines force an immediate download of the zip file:
header("Content-type: application/octet-stream");  
header("Content-disposition: attachment; filename=test.zip");  
echo $zipfile -> file();  
*/

// OR instead of doing that, you can write out the file to the loca disk like this:
$filename = "output.zip";
$fd = fopen ($filename, "wb");
$out = fwrite ($fd, $zipfile -> file());
fclose ($fd);



?>  



// then offer it to the user to download:
<a href="output.zip">Click here to download the new zip file.</a> 
0

sorka, jebnęło mi się z PEARem a PECL jest przecież dostępny na większości hostingów (a chyba wszystkich którzych używałem), dlaczego miałbyś go unikać na localu

0

tu jest specyfikacja: http://www.pkware.com/documents/casestudies/APPNOTE.TXT
wygląda fajnie, chociaż ja korzystałem z innej która nie jest już dostępna jakoś, mam ją u siebie na dysku ale musiałbyś poczekać miesiąc ;P
w każdym razie nie musisz jej całej czytać bo już masz wszystko praktycznie gotowe więc tylko mała poprawka powinna być (mi problem sprawiało zrobienie zipa w wersji 2.0, z 1.0 nie miałem problemu)
mi się wydaje że ten crc hack jest coś nie potrzebny, spróbuj go na chwile wywalić - ja nic takiego nie robiłem i działało

0

aha, no i nie wiem czy to się tylko tak na forum wkleiło czy co no ale chyba

"\xNN" a nie "xNN" bo to drugie bez sensu

1 użytkowników online, w tym zalogowanych: 0, gości: 1