Временно изображение

dakata__92

Super Moderator
В момента свалям изображение от някакъв линк в папка с име tmp. Искам да го визуализирам в браузъра след което да го изтрия. Проблема идва, че ако го изтрия тоест ънлинкна на момента то не се визуализира защото не съществува. Как да го визуализирам свалено и след затваряне на страницата изтрито автоматично?
 
И на мен ми трябваше това преди време, но не помня за каква глупост беше.
Значи решението е следното, преди Ънлинкване, взлеми съдържанието на снимката и го сложи в SRC атрибута :arrow:

Ето така:
Код:
<img src='data:image/jpeg;base64,<?php
	 echo base64_encode(file_get_contents("img/logo.png"));
?>'  />
и ще стане :?: :?:
 
teroristd каза:
Просто слагаш един деструктор в класа и в него даваш унсет :) .
Не ги трие от папката....
PHP:
class Images{
	private $images = false;
	
	public function __construct(){
		
	}
	
	public function directoryImages($directory){
		if(is_dir($directory) and is_readable($directory)){
			$_directory = realpath($directory);
			$dh  = opendir($_directory);
			$ignored = array('.', '..');   
			foreach(scandir($_directory) as $file){
				if(in_array($file, $ignored)) continue;
				$this->images[] = $directory . $file;
			}
			return $this->images;
		}else{
			throw new \Exception('['.$directory.'] не е четима или директория!',500);
		}
	}
	
	public function deleteImage($file){
		$_file = realpath($file);
		if(is_file($_file)){
			unlink($_file);
		}
	}
	
	public function saveRemoteImage($fromUrl,$toDir,$withName){
		copy($fromUrl,$toDir.$withName);
	}
	
	public function __destruct(){
		foreach($this->images as $v){
			echo '<br>'.$v;
			$this->deleteImage($v);
		}
	}
}
 
Незнам нещо не правиш правилно. Взимам идеята от фреймуорка на gatakka. В моя случай имам заявка към базата, която ъпдейтва времето на сесията и я викам единствено в деструктора на App(демек класа с който започва и свършва всичко) , и при преминаване на друга страница времето винаги се ъпдейтва. Сега не мога да мисля ясно че ми се спи, но може би трябва да направиш деструктора в стартиращия ти клас.
 
joTunkiq каза:
И на мен ми трябваше това преди време, но не помня за каква глупост беше.
Значи решението е следното, преди Ънлинкване, взлеми съдържанието на снимката и го сложи в SRC атрибута :arrow:

Ето така:
Код:
<img src='data:image/jpeg;base64,<?php
	 echo base64_encode(file_get_contents("img/logo.png"));
?>'  />
и ще стане :?: :?:
Има ли някой по-бърз начин от това! Започва адски много да бави...
 
joTunkiq каза:
И на мен ми трябваше това преди време, но не помня за каква глупост беше.
Значи решението е следното, преди Ънлинкване, взлеми съдържанието на снимката и го сложи в SRC атрибута :arrow:

Ето така:
Код:
<img src='data:image/jpeg;base64,<?php
	 echo base64_encode(file_get_contents("img/logo.png"));
?>'  />
и ще стане :?: :?:
Такаа! Още едно въпросче имам към теб. Та ако го свалям от някакъв линк изображението се кодира но може ли да бъде декодирано и да се разбере от къде го свалям?
Примерно някое изображение от фейсбук свалям.
$file = base64_encode(file_get_contents("https://facebook.com/image'));
посредством функцията base64_decode може ли по някакъв начин да се разбере от къде свалям снимката? Според мен не може но да питам за всеки случай. :)
 
joTunkiq каза:
Не, тъй като това е съдържанието, а не УРЛ-а :) :?:
Благодаря ти колега +1! Терорист оправих се и със твоят варянт с деструктора но той отново трие изображението. Наистина най-простто решение което успях и аз да открия е това на @joTunkiq . :?:
 
Лошо няма, нали това е целта да се намери най-доброто решение на задачата :) .
 
teroristd каза:
Лошо няма, нали това е целта да се намери най-доброто решение на задачата :) .
А още по-хубаво ще е да се покаже защо едното работи, а другото - не. Това ще се опитам да направя сега - с посоките за мислене и как да стигнем до извода.

- Какво се случва, когато имаме такава ситуация (html с img-таг):
(1) браузърът праща http заявка
(2) сървърът генерира html
(3) браузърът вижда, че трябва да се покаже картинка и праща втора заявка
(4) сървърът дава картинката
(5) браузърът я получава и я показва

- Имаме две действия, които трябва да се случат - да се изтрие картинката и да се покаже

- Имаме точно определена последователност - картинката първо се показва, после се изтрива (няма как да покажем изтрита картинка)

Сега вече имаме доста по-добра представа за нещата, които ще се случат - в точка 4. ще имаме първо показване и после изтриване.
Остава единствено кодът. Който е изключително прост (за нивото на хората тук):

PHP:
<?php
//този ред също е важен:
header('Content-type: image/png');
// (виж това за други формати:
// http://www.sitepoint.com/web-foundations/mime-types-complete-list/

readfile('path/to/img.png');
unlink('path/to/img.png');
Като имаш:
<img src="ime-na-gorniq-fail.php" />
Това би трябвало да е по-бързо от решението на jotunkiq, защото readfile директно чете и принтва.
От друга страна, base64() вариантът е по-лесен за използване - ако гониш производителност, пробвай и двата варианта.
 

Back
Горе