HttpUploadedFile: 2× přesunout

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Honza Kuchař
Člen | 1662
+
0
-

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;
}
		}
	}
David Grudl
Nette Core | 8218
+
0
-

Ok, fixnu.

phx
Člen | 651
+
0
-

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
+
0
-

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?

phx
Člen | 651
+
0
-

Ted otestovani a nic jineho nic nehlasi.

Honza Kuchař
Člen | 1662
+
0
-

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
+
0
-

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)