Autor | Zpráva | ||
---|---|---|---|
phobos9007 Profil |
Ahoj,
Postupně přecházím ve svých projektech na 5.3.0 a vyzkoušel jsem novou třídu finfo. Zdá se, že funguje, ale mám problém v cestě k checkovanému souboru. Problematika: Chci ke každému soubor v adresáři připsat jeho MIME Způsob: $handle=dir("."); while($file=$handle->read()) { if($file=="." or $file=="..")continue; $finfo=new finfo(FILEINFO_MIME_TYPE); $this->mimeType=$finfo->file($file); echo $this->mimeType; } Vrací: Warning: finfo::file() [finfo.file]: File or path not found 'soubor.pripona' in C:\wamp\www\jupiterusframework\upload.php on line 19 Přičemž, když místo $file zapíšu ručně C:\wamp\www\projects\upload\soubor.pripona vše funguje. Moje otázka tudíž zní, kde třída hledá ty soubory relativně uvedené? Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
fuckin Profil |
#2 · Zasláno: 30. 1. 2010, 14:22:31
$this->mimeType=$finfo->file(dirname(__FILE__).'/../projects/upload/soubor.pripona'); |
||
phobos9007 Profil |
#3 · Zasláno: 30. 1. 2010, 19:22:16 · Upravil/a: phobos9007
fuckin:
Funguje, díky moc, ale co v případě, když si klient dá adresář s frameworkem na svém serveru úplně někam jinam (a odkáže include_path v php.ini jak je zvykem)? S tím souvisí i otázka, proč, když do stejné třídy vkládám parametr $dir a uvedu ".", skript bere adresář, ve kterým se nachází soubor s includovanou třídou, ovšem když ve stejné třídě chci použít $file, skript bere adresář třídy? Majkl578: Dík za edit, odteď budu |
||
fuckin Profil |
#4 · Zasláno: 30. 1. 2010, 21:06:02
phobos9007:
Moc to nechapu. Mozna kdybys to rozkouskoval do nekolika samostatnych vet tak by to bylo citelnejsi. Dirname(__FILE__) ti vrati aktualni adresu skriptu, neni problem v tomto? |
||
phobos9007 Profil |
#5 · Zasláno: 31. 1. 2010, 13:37:46 · Upravil/a: phobos9007
Dobře, zkusím to napsat srozumitelněji. To Dirname(__FILE__) jsem pochopil (a znám to).
Jde o to, že použitím dirname(__FILE__)."/../projects/upload/".$file S tím souvisí fakt, když zadám funkci dir "." $finfo->file dirname(__FILE__)."/../projects/upload/".$file $file |
||
AM_ Profil |
#6 · Zasláno: 31. 1. 2010, 20:31:43
Vůbec bych se nebál toho vykašlat se na PHP include_path, nechat klienta pouze requirovat nějaký loader toho frameworku a na všechny soubory kromě loaderu se odkazovat relativně vůči umístění loaderu, jako to má například Nette.
Myslím, že k tomu jsou hned dva důvody: - klienti to uvítají, protože je často mnohem snazší upravit nějakou konstantu, která určuje, kde framework je, než upravovat nastavení apache - ne všichni klienti bývají pány svých serverů a tuto možnost tedy nemusí mít vůbec - v poslední době vídám v profesionálně napsaných skriptech právě relativní odkazování vůči umístění souboru přes dirname(__FILE__) a docela to chápu, protože magie, jakou PHP hledá odkazované soubory, je dost zvláštní a nešikovná a vývojáři s ní nechtějí mít nic společného. |
||
Mastodont Profil |
#7 · Zasláno: 31. 1. 2010, 20:39:35
phobos9007:
No, já bych dirname(__FILE__) volal v index.php a uložil si to jako ROOT konstantu, kterou bych pak používal všude jinde, samozřejmě za předpokladu, že se nebude šoupat s adresáři (proč taky). |
||
phobos9007 Profil |
#8 · Zasláno: 31. 1. 2010, 21:54:56
Děkuji vám, s tou magií je to pravda, někdy je to docela zvláštní. Asi upustím od include_path a začnu to řešit více uživatelsky.
Rozhodně jsem rád, že to teď pojede dobře ba líp ;) |
||
Časová prodleva: 14 let
|
0