Zmazanie uploadnuteho suboru, pri nepouziti move()

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

Zdravim,

momentalne riesim tento problem:
uzivatel uploadne obrazok, ten resiznem na tri rozne velkosti a nasledne ulozim do troch roznych zloziek.

`<?php $thumbs = $photo->getImage();
$detail = $photo->getImage();
$full = $photo->getImage();

$fullpath = WWW_DIR . „/photos/full/“ . $fileName;
$thumbspath = WWW_DIR . „/photos/thumbs/“ . $fileName;
$detailpath = WWW_DIR . „/photos/detail/“ . $fileName;

$full->resize(800, 600);
$full->save($fullpath);

$thumbs->resize(95, 60);
$thumbs->save($thumbspath);

$detail->resize(334, 215);
$detail->save($detailpath);?>`

Moja otazka znie: je potrebne sa suboru v $photos nejak zbavit?
A este jedna otazka: je mozne to spravit nejak efektivnejsie?

Ola
Člen | 385
+
0
-

Asi bych to přepsal takhle:

<?php
$sizes = array(
	'thumb' => array(95, 60),
	'detail' => array(334, 215),
	'full' => array(800, 600),
);
foreach($sizes as $subdir => $size) {
	$photo->getImage()
	      ->resize($size[0], $size[1])
	      ->save(WWW_DIR . "/photos/{$subdir}/{$fileName}");
}
?>

První otázku jsem nepochopil.

Editoval Ola (20. 7. 2010 22:02)

Vyki
Člen | 388
+
0
-

matto napsal(a):
A este jedna otazka: je mozne to spravit nejak efektivnejsie?

Efektivní je udělat to načítání náhledů „líně“ jako je to ukázáno např. zde: https://forum.nette.org/…vani-nahledu.

matto
Člen | 55
+
0
-

Otazka 1: pravdepodobne som sa spytal somarinu. Nakolko presne neviem ako to cele funguje, mal som pocit, ze ten subor ostane niekde v temp, pokial ho funkciou move() nepresuniem.

Ola: Dakujem, tvoje riesenie som hned implementoval, je kus elegantnejsie ako to moje :)

Vyki: Diky! vypada to vynikajuco a myslim, ze pri 8mich obrazkoch, ktore sa vo finalnej verzii budu naraz pridavat cez administraciu to podstatne zrychli spracovanie. Avsak momentalne si to nechavam na buduci refraktoring, nakolko ma palia ine veci. Kazdopadne to tam casom implementjem.

westrem
Člen | 398
+
0
-

matto napsal(a):

Otazka 1: pravdepodobne som sa spytal somarinu. Nakolko presne neviem ako to cele funguje, mal som pocit, ze ten subor ostane niekde v temp, pokial ho funkciou move() nepresuniem.

Nespytal si sa blbost. Pri uploade suborov su tieto vzdy uploadovane do temp adresara (nastavuje sa direktivou upload_tmp_dir, vid PHP manual sekcia File Uploads).

Pocas spracovania skriptu je subor k dispozicii (pokial ho explicitne neodstranis pocas behu). Po ukonceni behu skriptu sa subor maze sam.

westrem
Člen | 398
+
0
-

Ola napsal(a):

Asi bych to přepsal takhle:

<?php
$sizes = array(
	'thumb' => array(95, 60),
	'detail' => array(334, 215),
	'full' => array(800, 600),
);
foreach($sizes as $subdir => $size) {
	$photo->getImage()
	      ->resize($size[0], $size[1])
	      ->save(WWW_DIR . "/photos/{$subdir}/{$fileName}");
}
?>

První otázku jsem nepochopil.

Myslienka dobra, ale schvalne, nahliadnutie do API reference pre 0.9.5 Nette bez prefixu
Resize v Nette\Image funguje tak, ze vytvori blank image a donho kopiruje. V tvojom postupe, ak spravne chapem kompletnej logike a prevedeniu kodu nastava ten jav, ze sa obrazok resizne na najmensi rozmer, a potom sa v dalsich krokoch resizuje na vecsi (z mensieho) atd ..

Preto navrhujem klonovat obrazok vo foreach nasledovne:

<?php
foreach($sizes as $subdir => $size) {
	$workphoto = clone $photo;
	$workphoto->getImage()->resize($size[0], $size[1])
	          ->save(WWW_DIR . "/photos/{$subdir}/{$fileName}");
}
?>

Pripadne prehodit poradie resizovanie od vecsieho k mensiemu.

EDIT: No stacilo sa v API povrtat hlbsie David to urobil spekulantsky a kazde zavolanie getImage() vrati vzdy novy objekt, takze povodne riesnie je OK.

Editoval westrem (21. 7. 2010 1:17)

Ola
Člen | 385
+
0
-

Klonovat není třeba

westrem
Člen | 398
+
0
-

Ola napsal(a):

Klonovat není třeba

:) Sucasny post, to sa mi uz dlho nestalo ..