Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Algorytmy, klasy, funkcje _ [funkcja] Obrazek bez... obrazka

Napisany przez: Shido 25.06.2012, 21:56:54

Jakiś czas temu na potrzeby mailera napisałem poniższą funkcję.
Co robi?
W skrócie, przerabia obrazek na ciąg znaków który można bez problemowo wyświetlić w formie obrazka.
Zastosowanie.
Osobiście skrypt wykorzystuje przy wysyłaniu obrazków w mailach - dzięki temu omijamy blokowanie obrazków z zewnętrznego źródła w klientach poczty. Ogólnie zastosować można w każdym przypadku gdy mamy do czynienia z obrazkami. Po zastosowaniu jakiejś bazy danych, możemy np. stworzyć galerię, nie mając na serwerze ani jednego obrazka - cóż za oszczędność miejsca biggrin.gif
Zabezpieczenia
Brak. Funkcja nie jest zabezpieczona z jednego powodu, obsługiwana jest jedynie przeze mnie, obrazki są z pewnego źródła. Natomiast walidacja czy to na pewno obrazek odbywa się wcześniej. ( Walidację np. po rozszerzeniu można wykonać poprzez zmienną $roz która przechowuje rozszerzenie )
Wykorzystywanie
Skoro to tu dałem, oznacza że wykorzystywać można to dowolnie, jednak proszę o pozostawienie komentarza w kodzie oraz ewentualnie jakieś ciepłe słowo w temacie tongue.gif

  1. function imag($plik)
  2. {
  3. /*
  4.   ====================================================
  5.   || imag(); by Shido ||
  6.   || by wyświetlić np: ||
  7.   || echo('<img src="'.imag("lokalizacja").'" />'); ||
  8.   ====================================================
  9.   */
  10. if(http://www.php.net/preg_match("/http:\/\//i", $plik))
  11. {
  12. $roz = http://www.php.net/explode('.', $plik);
  13. $roz = http://www.php.net/end($roz);
  14. $c = curl_init($plik);
  15. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  16. $data = curl_exec($c);
  17. }
  18. else
  19. {
  20. $fileatt = $plik;
  21. $roz = http://www.php.net/explode('.', $fileatt);
  22. $roz = http://www.php.net/end($roz);
  23. $file = http://www.php.net/fopen($fileatt,'rb');
  24. $data = http://www.php.net/fread($file,http://www.php.net/filesize($fileatt));
  25. http://www.php.net/fclose($file);
  26. }
  27. return ('data:image/'.$roz.';base64,'.http://www.php.net/base64_encode($data).'');
  28. }


PS.
Jeżeli macie jakieś sugestie, z chęcią wysłucham.

Napisany przez: gitbejbe 14.06.2013, 13:13:16

odgrzewam kotleta sprzed roku odpisując na ten post, ale co tam

base64 to tak ch...ciulowe rozwiązanie do tego typu rzeczy, że trudno znaleźć gorsze..

Po 1, kodowanie w ten sposób obrazków do celów wysłania emaili - głupota. Szukałem kiedyś sposoby aby obejść blokowanie obrazków przez klientów pocztowych i też wpadł mi w ręce ten base64. Długość zapisu tego kodowania jest zależna od rozmiaru kodowanej grafiki. ciąg znaków zawsze jest tak zajebiście długi, że serwery pocztowe w większości przypadków odrazu taką wiadomość odsyłają do spamu albo całkowicie blokują. Nie ma rozwiązania na blokowanie obrazków w emailach, bo jakby była to każda reklama którą dostaje od większych firm zawsze miałaby wyświetlone obrazki.

Co do baz danych. nie wyobrażam sobie 10 000 rekordów z obrazkami zapisanymi w base64, nie mówiąc już o 100 000 czy mln. Jest to tak niewydajne rozwiązanie, że poprostu się tego nie używa

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)