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 | 8285
 
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)