Autor | Zpráva | ||
---|---|---|---|
maarlin Profil |
#1 · Zasláno: 31. 7. 2009, 07:32:29
Zdravím,
lze nějak zjistit typ souboru před jeho samotným uploadem na server? Vím že existuje proměnná $_FILES['file']['type'] Třeba taková Nokia 6230, nebo SWFUpload u jakéhokoliv souboru vrací "application/octet-stream". Potřebuji upload omezit na konkrétní typy souborů - obrázky (tzn. type image/*) a několik dalších. Když pominu ještě méně spolehlivou metodu o příponě souboru, existuje nějaká, která by to trochu spolehlivěji zjistila? Obávám se, že budu muset soubor nejdříve nauploadovat a pak to nějak zjišťovat via getimagesize(); $size = getimagesize($filename); echo "Content-type: ".$size['mime']; Zdá se mi to ale jako zbytečné zatěžování serveru, uploadovat třeba 2MiB soubor a pak ho krátce na to smazat, protože má nevyhovující extension... Stačí nakopnout... díky :) |
||
Alphard Profil |
#2 · Zasláno: 31. 7. 2009, 09:52:42
S jistotou to nelze, dokud je soubor u uživatele na disku, tak se k němu nedá dostat.
Maximálně můžete nastavit <input type="file" accept="image/*"> |
||
lordfrikk Profil |
#3 · Zasláno: 31. 7. 2009, 13:42:05 · Upravil/a: lordfrikk
Existuje detekce MIME-typu, která se bere přímo ze souboru a nezáleží na tom, jak se soubor jmenuje... MIME typ můžeš zjisti např. za pomocí
<?php $file = finfo_open('tajnysoubor.xxx'); $type = finfo_file($file, FILEINFO_MIME); |
||
fuckin Profil |
#4 · Zasláno: 31. 7. 2009, 14:15:41
nejlepsi bude kdyz opendialog s vyberem souboru bude omezen jen na konkretni pripony.
|
||
DoubleThink Profil * |
#5 · Zasláno: 31. 7. 2009, 16:13:19
„lze nějak zjistit typ souboru před jeho samotným uploadem na server? “
Na straně serveru nikoliv - soubor už je součástí samotného multipart požadavku. Můžeš ho maximálně neuložit (nechat chcípnout v dočasné složce) Na straně klienta můžeš javascriptem přečíst název souboru a rozhodnout se podle koncovky. |
||
denCo Profil |
#6 · Zasláno: 31. 7. 2009, 20:46:10 · Upravil/a: denCo
<?php if ( !in_array ( $_FILES['file']['type'], array ( "application/x-zip-compressed", "...", "...", "..." ) ) ) { $chybova_sprava = "Povolene sú iba formáty bla bla bla"; break; } ?> mime typy si najdes na http://www.mimetype.org/ alebo mozes este zistit koncovku suboru, ale to sa da obyst |
||
Jan Tvrdík Profil |
#7 · Zasláno: 31. 7. 2009, 21:48:28
denCo:
Na $_FILES['file']['type'] se nedá spolehnout, protože to posílá prohlížeč (zmíněno i v úvodním příspěvku). |
||
maarlin Profil |
#8 · Zasláno: 1. 8. 2009, 21:08:37
[#2] [#4] Myslel jsem kontrolu na straně serveru...
[#5] ano, máš pravdu, špatně jsem to popsal ale věřím, že to většina ostatních pochopila :) [#6] Jak jsem psal v prvním příspěvku a jak zmínil [#7], $_FILES['file']['type'] není spolehlivá metoda, které bych se rád vyhnul. [#3] Dobrý tip! díky, škoda jen, že to není standartní součástí PHP... PECL balík bohužel zatím na běžných hostinzích (tj. ne vlastních virtuálech) není tak běžný. |
||
watchick Profil |
#9 · Zasláno: 1. 8. 2009, 23:50:13
Já osobně si myslím že to udělat nelze, nebot ať posíláš obyčejná post data, nebo posíláš data souboru, server je musí nejprve přijmout, a poté s nimi teprve pracovat
|
||
Časová prodleva: 3 dny
|
|||
lordfrikk Profil |
#10 · Zasláno: 4. 8. 2009, 12:26:19
„[#3] Dobrý tip! díky, škoda jen, že to není standartní součástí PHP... PECL balík bohužel zatím na běžných hostinzích (tj. ne vlastních virtuálech) není tak běžný.“
As of PHP 5.3, Fileinfo is shipped with the main distribution and enabled by default. The extension is no longer maintained in PECL. |
||
Časová prodleva: 9 dní
|
|||
maarlin Profil |
#11 · Zasláno: 13. 8. 2009, 10:34:18
[#10] Hezká citace, ale kde dnes běžně narazíš na PHP 5.3 ? :) Na to budeme muset ještě chvilku počkat...
|
||
Časová prodleva: 15 let
|
0