2012-05-19 15 views
5

Istnieje obraz w formacie ciągu znaków, wyprowadzenie tego ciągu z niektórymi nagłówkami typu MIME wystarczy, aby renderować go na stronie, jak sprawdzić, czy ten ciąg jest obrazem?Sprawdź, czy ciąg znaków jest obrazem

+0

Przez "format string" masz na myśli base64? Jeśli tak, powinieneś zajrzeć do bibliotek magicznych liczb. (Najczęściej spotykane z nich nazywa się po prostu "magią"). – OmnipotentEntity

Odpowiedz

9

"Zasób obrazu zostanie zwrócony po powodzeniu.FALSE jest zwracana, jeśli typ obrazu jest nieobsługiwany, dane nie mają rozpoznanego formatu lub obraz jest uszkodzony i nie można go załadować."

Przykład:

<?php 
$data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' 
     . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' 
     . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' 
     . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; 
$data = base64_decode($data); 

$im = imagecreatefromstring($data); 
if ($im !== false) { 
    header('Content-Type: image/png'); 
    imagepng($im); 
    imagedestroy($im); 
} 
else { 
    echo 'An error occurred.'; 
} 
?> 

http://php.net/manual/en/function.imagecreatefromstring.php

+1

Musisz tłumić błędy używając '@', albo jesteś skazany na to 'imagecreatefromstring()'. – Niranjan

+0

@ngen Jakikolwiek sposób uniknąć zguby i jednocześnie unikać używania @? –

+0

@YuriKolovsky Nie możesz. Ponieważ próbujesz załadować ciąg znaków do funkcji, która oczekuje obrazu. Nie powiedzie się 1) jeśli dane obrazu są uszkodzone. 2) jeśli to nie jest obraz. – Niranjan

Powiązane problemy