HttpUploadedFile: 2× přesunout
- Honza Kuchař
- Člen | 1662
Ahoj, když zavolám 2× metodu move() tak ta druhá vždy skončí s FALSE. Nešlo by tam dát, že by se nejdříve volala funkce move_uploaded_file, v případě neúspěchu by se potom zavolalo rename(). A bylo by vyřešeno.
Upravená metoda by mohla vypadat nějak takhle:
/**
* Move uploaded file to new location.
* @param string
* @return bool
*/
public function move($dest)
{
if (move_uploaded_file($this->tmpName, $dest)) {
$this->tmpName = $dest;
return TRUE;
} else {
if(rename($this->tmpName, $dest)) {
$this->tmpName = $dest;
return TRUE;
} else {
return FALSE;
}
}
}
- phx
- Člen | 651
Pokud dobre koukam tak fixnuti zpusobilo, ze tam je pouze metoda rename. Bohuzel mi tato metoda vraci warning:
Warning: rename(/tmp/php9U0rDi,/srv/www/exymple.com/src/data/project-file/obr.jpg.10.dat) [function.rename]: Operation not permitted in /srv/www/vks.inet-servis.cz/src/libs/Nette/Web/HttpUploadedFile.php on line 183
ale pri tom se data bezproblemu ulozi.
Prov vlastne zmizel ona metoda move_uploaded_file()?
Reseni od honzakuchar se zda byt lepsi.
- David Grudl
- Nette Core | 8218
phx napsal(a):
Prov vlastne zmizel ona metoda move_uploaded_file()?
Protože jsem nečekal, že rename() bude způsobovat problémy.
A nedělá v safe mode problémy i volání getImageSize() apod?
- Honza Kuchař
- Člen | 1662
No když se ten soubor nachází ještě v někde v tempech na C:, tak se docela dívím. Večer se na to taky mrknu (pod Win). Na serveru mám safe_mode s open_basedir. Osobně si myslím, že getImageSize taky nepojede. V tom příkladu to jede, protože tam nejdříve přesouvám a potom teprve zjišťuji contentType.
Editoval honzakuchar (18. 9. 2009 16:47)
- Honza Kuchař
- Člen | 1662
A nedělá v safe mode problémy i volání getImageSize() apod?
Dělá to to samé.
Warning: getimagesize() [function.getimagesize]: open_basedir restriction in effect. File(C:\PHP\tmp\php25A.tmp) is not within the allowed path(s): (D:/Data/WWW/mujserver.net/projekty/nette/MultipleFileUpload) in D:\Data\WWW\mujserver.net\projekty\nette\MultipleFileUpload\libs\Nette\Web\HttpUploadedFile.php on line 98
Warning: getimagesize(C:\PHP\tmp\php25A.tmp) [function.getimagesize]: failed to open stream: Operation not permitted in D:\Data\WWW\mujserver.net\projekty\nette\MultipleFileUpload\libs\Nette\Web\HttpUploadedFile.php on line 98
Je potřeba soubor nejdříve přesunout (pomocí
move_uploaded_file()
) někam, kde k němu mám přístup a potom
s ním teprve začít pracovat.
//EDIT: pro srovnání chyba při rename():
Warning: rename() [function.rename]: open_basedir restriction in effect. File(C:\PHP\tmp\php25A.tmp) is not within the allowed path(s): (D:/Data/WWW/mujserver.net/projekty/nette/MultipleFileUpload) in D:\Data\WWW\mujserver.net\projekty\nette\MultipleFileUpload\libs\Nette\Web\HttpUploadedFile.php on line 181
Editoval honzakuchar (18. 9. 2009 23:16)