[Á¦¸ñ] ÇѹøÀÇ Ä¿³Ø¼ÇÀ¸·Î À̹ÌÁö ¸ðµÎ Àü¼ÛÇÏ´Â ¹æ¹ý
(BASE64·Î ÀÎÄÚµùÇÑ À̹ÌÁö data¸¦ Á÷Á¢ HTML ¹®¼¿¡ Ãß°¡ÇÏ´Â ¹æ¹ý)
- ÀÛ¼ºÀÚ : san2(at)linuxchannel.net
- ÀÛ¼ºÀÏ : 2002.05.07
- ¼ö ÁØ : ÃÊÁß±Þ
- ³» ¿ë : HTML/PHP
http://www.linuxchannel.net/docs/img-src-base64.txt
ÀÌ ¹®¼´Â À̹ÌÁö¸¦ Àü¼ÛÇÏ´Â °úÁ¤¿¡¼ ¿©·¯¹øÀÇ Ä¿³Ø¼Ç
¾øÀÌ ÇѹøÀ¸·Î ¸ðµÎ Àü¼ÛÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇÕ´Ï´Ù.
*ÁÖÀÇ)
¼·ÎÀÇ Àå´ÜÁ¡À» Á¤È®È÷ ½ÀµæÇÔÀ» ¿äÇÕ´Ï´Ù.
reference : http://www.faqs.org/rfcs/rfc2397.html
1. ¹è°æ ¹× °³¿ä
2. "data" URL scheme
3. IMG ÅÂ±× ÇüÅÂ
4. À̹ÌÁö ÆÄÀÏÀ» ¸ðµÎ BASE64·Î ÀÎÄÚµù Çϱâ
4-1. Ä¿¸Çµå¶óÀο¡¼ ÀÛ¾÷Çϱâ(ÆÄÀ̽ã base64.py)
4-2. PHP·Î ÀÎÄÚµùÇØ º¸±â
5. ÀÎÄÚµùµÈ data¸¦ HTML¿¡ Ãß°¡Çϱâ
5-1. ´Ü¼ø HTML¸¸À» »ç¿ëÇÒ °æ¿ì
5-2. PHP¸¦ »ç¿ëÇÒ °æ¿ì
6. º¥Ä¡¸¶Å©(¼Óµµ´ë°á)
7. °á·Ð
8. Èıâ
---------------------------------------------------
*¹®¸Æ»ó °£È¤ °æ¾î¸¦ »ý·«Çß½À´Ï´Ù. ¾çÇØÇØ ÁÖ½Ã±æ ¹Ù¶ø´Ï´Ù.
1. ¹è°æ ¹× °³¿ä
Ŭ¶óÀ̾ðÆ®(ÀÌÇÏ 'À¥ºê¶ó¿ìÀú')°¡ ƯÁ¤ HTML¹®¼(new document)¸¦
¿äû½Ã ¸ÇóÀ½ ÇѹøÀÇ Ä¿³Ø¼ÇÀÌ ÀÌ·ç¾îÁö°í, ±× ´ÙÀ½ HTML¹®¼¾È¿¡
űװ¡ ¸¸¾à 10°³ ÀÖ´Ù¸é, ÀÌ´Â Ãß°¡ÀûÀ¸·Î 10¹øÀÇ
ÀçÄ¿³Ø¼ÇÀÌ ÀÌ·ç¾îÁú ¼ö ÀÖ´Ù´Â Á¡¿¡¼ ÃÊÁ¡À» ¸ÂÃß¾î º¾´Ï´Ù.
ÀϹÝÀûÀ¸·Î ¼Óµµ¸¦ ³ôÀ̱â À§Çؼ ¼¹ö¿¡¼´Â KeepAlive ±â´ÉÀ»
»ç¿ëÇÏÁö¸¸ »ó´çÈ÷ ¹Ù»Û ¼¹öÀÏ °æ¿ì´Â keepAlive¸¦ off Çϴ°ÍÀÌ
´õ È¿°úÀûÀÔ´Ï´Ù(¸®¼Ò½º ¹®Á¦).
ÀÌ¿Í°°ÀÌ À̹ÌÁö¸¦ ¸ðµÎ Àü¼Û¹Þ±â À§Çؼ À¥ºê¶ó¿ìÀú´Â Ãß°¡ÀûÀÎ
Ä¿³Ø¼ÇÀ» ½ÃµµÇϴµ¥, HTTP »óÅÂÄڵ尡 302ÀÏ °æ¿ì´Â À¥ºê¶ó¿ìÀú´Â
¼¹ö¿¡¼ À̹ÌÁö¸¦ Àü¼Û¹ÞÁö ¾Ê°í µð½ºÅ© ij½¬³ª ¸Þ¸ð¸®Ä³½¬¿¡¼
À̹ÌÁö¸¦ °¡Á®¿Í Ãâ·ÂÇÕ´Ï´Ù. ¹Ý¸é 302 Äڵ尡 ¾Æ´Ò °æ¿ì´Â Á÷Á¢
¼¹ö¿¡¼ À̹ÌÁö¸¦ Àü¼Û¹Þ½À´Ï´Ù.
¹®Á¦´Â ÈÄÀÚ¿Í °°ÀÌ Á÷Á¢ À̹ÌÁö¸¦ Àü¼Û¹Þ´Â °úÁ¤¿¡¼ ¿©·¯¹øÀÇ
Ä¿³Ø¼ÇÀÌ ÀÌ·ç¾îÁö´Âµ¥, ¼¹öÀÇ ºÎÇϳª ³×Æ®¿öÅ© Àå¾Ö µîµîÀÇ
¿øÀÎÀ¸·Î »ó´çÈ÷ Áö¿¬µÇ´Â °æ¿ì¸¦ °æÇèÇßÀ» °Ì´Ï´Ù.
ÀÌ ¹®¼´Â ÀÌ¿Í °°ÀÌ À̹ÌÁö¸¦ Àü¼ÛÇÏ´Â °úÁ¤¿¡¼ ¿©·¯¹øÀÇ Ä¿³Ø¼Ç
¾øÀÌ ÇѹøÀ¸·Î ¸ðµÎ Àü¼ÛÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇÕ´Ï´Ù.
HTTP »óÅÂÄÚµå 302°¡ ¸¹Àº °æ¿ì´Â ¿ÀÈ÷·Á ¿ªÈ¿°úÀûÀÓÀ» ÁÖÀÇÇϽñæ
¹Ù¶ø´Ï´Ù.
2. data" URL scheme
RFC 2397¿¡ ÀÇÇϸé,
data:[][;base64],
'[' ¿Í ']'À¸·Î °¨½ÎÀÎ ºÎºÐÀº ¿É¼ÇÀÔ´Ï´Ù.
"data:"
ÀϺΠ¾îÇø®ÄÉÀ̼ǿ¡¼´Â URLs±æÀÌ Á¦ÇÑÀÌ ÀÖÀ¸¹Ç·Î ÁÖÀÇÇÔ.
(RFC 1866)
dataÀÇ media type(¿É¼Ç).
¸¸¾à ÀÌ ¿É¼ÇÀÌ ¾ø´Ù¸é ±âº»°ªÀ¸·Î text/plain;charset=US-ASCII
À» »ç¿ëÇÔ.
";base64"
BASE64·Î ÀÎÄÚµùµÇ¾î ÀÖ´Ù´Â ÀǹÌ(¿ª½Ã ¿É¼Ç).
ÀÌ ¿É¼ÇÀÌ ¾ø´Ù¸é ASCII, URL Ç¥ÁØ %xx hex ÀÎÄÚµùÀ¸·Î ´ëüµÈ´Ù.
¿¹: data:,A%20brief%20note
test
½ÇÁ¦·Î BASE64·Î ÀÎÄÚµùµÈ data°¡ À§Ä¡Çϰųª URL hex ÀÎÄÚµùµÈ ¹®ÀÚ¿ÀÌ
µé¾î°¨.
±× ¿Ü Âü°í»çÇ×,
dataurl := "data:" [ mediatype ] [ ";base64" ] "," data
mediatype := [ type "/" subtype ] *( ";" parameter )
data := *urlchar
parameter := attribute "=" value
3. IMG ÅÂ±× ÇüÅÂ
¶Ç´Â
¶Ç´Â
´ÙÀ½ÀÇ Å±׸¦ ±Ü¾î¼ Ãâ·ÂÇØ º¸¼¼¿ä..
¹¹°¡ ³ª¿À³ª¿ä?
4. À̹ÌÁö ÆÄÀÏÀ» ¸ðµÎ BASE64·Î ÀÎÄÚµù Çϱâ
À̹ÌÁö ÆÄÀÏÀ» BASE64·Î ÀÎÄÚµùÇÏ¸é ¾à°£ ÆÄÀÏÀÌ Ä¿Áü¿¡
ÁÖÀÇÇϵµ·Ï ÇÕ´Ï´Ù(¾à 30%ÀÌ»ó Ä¿Áü).
4-1. Ä¿¸Çµå¶óÀο¡¼ ÀÛ¾÷Çϱâ(ÆÄÀ̽ã base64.py)
´Ù¸¥ ÅøÀÌ ÀÖ´ÂÁö ¸ð¸£°ÚÁö¸¸ ÇÊÀÚ´Â Ä¿¸Çµå¶óÀο¡¼
´ÙÀ½ÀÇ ÆÄÀ̽㠽ºÅ©¸³Æ®¸¦ ÀÌ¿ëÇÑ´Ù.
/usr/lib/python1.5/base64.py
$ alias base64='/usr/lib/python1.5/base64.py'
BASE64·Î ÀÎÄÚµùÇÏ·Á¸é ?
(¿É¼ÇÀÌ ¾ø°Å³ª -e ¿É¼Ç »ç¿ë)
$ base64 -e foobar.gif > foobar.gif.enc
µðÄÚµùÇÏ·Á¸é?
(-d ¿É¼Ç »ç¿ë)
$ base64 -e foobar.gif.enc > foobar.gif
´ÙÀ½°ú °°Àº °£´ÜÇÑ ½©½ºÅ©¸³Æ®¸¦ ÀÌ¿ëÇؼ ÆÄÀϳ¡¿¡ .enc¸¦
ºÙ¿© ÀÎÄÚµù ÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù.
-- img2base64.sh -------------------------------
#!/bin/sh
#
fpath=$1
BASE64='/usr/lib/python1.5/base64.py'
OIFS=$IFS
IFS='
'
[ ! -d "$fpath" ] && exit 0
[ ! -s "$BASE64" ] && exit 0
for f in `find $fpath -type f 2>/dev/null` ; do
echo $f
$BASE64 -e $f > $f.enc
done
IFS=$OIFS
exit 0
------------------------------------------------
»ç¿ë¹ý :
$ sh img2base64.sh /path/to/images/directory
4-2. PHP·Î ÀÎÄÚµùÇØ º¸±â
PHP¸¦ »ç¿ëÇÒ °æ¿ì base64_encode()ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
¿¹:
------------------------------------------------
\n\n";
?>
------------------------------------------------
5. ÀÎÄÚµùµÈ data¸¦ HTML¿¡ Ãß°¡Çϱâ
°¢°¢ÀÇ À̹ÌÁö ÆÄÀϸ¶´Ù BASE64·Î ÀÎÄÚµùµÈ ÆÄÀÏÀ» »ý¼ºÇß´Ù´Â
°¡Á¤ÀÔ´Ï´Ù.
5-1. ´Ü¼ø HTML¸¸À» »ç¿ëÇÒ °æ¿ì
¾ÕÀÇ IMG ÅÂ±× ¿¹Á¦¿Í °°ÀÌ Á÷Á¢ BASE64·Î ÀÎÄÚµùÇÏ¿© ±× data¸¦
IMG ű׾ȿ¡ ¼Õ¼ö Áý¾î³Ö¾î¾ß ÇÕ´Ï´Ù.
(»ó´çÇÑ Á߳뵿ÀÌ ÇÊ¿äÇÒ µí......^.^)
5-2. PHP¸¦ »ç¿ëÇÒ °æ¿ì
------------------------------------------------
";
}
echo img_src('images/foobar.gif');
echo "\n
\n";
echo img_src('images/foobar2.gif',1);
echo "\n
\n";
echo img_src('images/foobar3.gif",0,'WIDTH=200 HEIGHT=1');
echo "\n
\n";
echo img_src('images/foobar4.gif',0,"ALT='foobar4'");
?>
------------------------------------------------
À§¿Í °°ÀÌ Á÷Á¢ À̹ÌÁö data¸¦ Àü¼ÛÇϸé Àç Ä¿³Ø¼Ç ¾øÀÌ ÇѹøÀÇ
Ä¿³Ø¼Ç¸¸ ÀÌ·ç¾îÁý´Ï´Ù.
ºñ±³Àû ÆÄÀÏÅ©±â°¡ ÀÛ°í ¿©·¯¹øÀÇ Ä¿³Ø¼ÇÀÌ ÀÌ·ç¾îÁø ȨÆäÀÌÁö¶ó¸é
»ó´çÈ÷ À¯¿ëÇÒ °Ì´Ï´Ù.
¿ë·®ÀÌ Å« ÆÄÀÏÀÏ °æ¿ì´Â ¿ÀÈ÷·Á ¿ªÈ¿°ú°¡ ³¯ ¼ö ÀÖ½À´Ï´Ù.
Âü°í·Î,
¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏ¿¡¼ À̹ÌÁö ÆÄÀÏ¿¡ Á¢±Ù ±â·ÏÀÌ ¾ø¾î¾ß
Á¤»óÀÔ´Ï´Ù.
´Ù¸¸, ÁÖÀÇÇÒ Á¡Àº
À¥¼¹ö³ª ´Ù¸¥ ¾îÇø®ÄÉÀ̼ǿ¡¼ BODYÀÇ ±æÀ̸¦ Á¦ÇÑÇϸé
¿¡·¯¸¦ ³¾ ¼ö ÀÖ½À´Ï´Ù.
¶ÇÇÑ ´Ù¸¥ Àå¾Ö(?)µµ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
Á÷Á¢ Å×½ºÆ®ÇØ º¸½Ã°í
ÀåÁ¡°ú ´ÜÁ¡À» ¼·Î ºñ±³ÇØ º¸¼¼¿ä.
6. º¥Ä¡¸¶Å©(¼Óµµ´ë°á)
start_time :
(1)Ŭ¶óÀ̾ðÆ®¿¡¼ ¹®¼ ¿äû -->
(2)À¥¼¹ö ó¸® -->
(3)Ŭ¶óÀ̾ðÆ®¿¡°Ô Àü¼Û -->
(4)À¥ºê¶ó¿ìÀú¿¡¼ ¹®¼ Ãâ·Â
end_time :
¿©±â¿¡¼´Â, ½ÇÁ¦·Î À¥ºê¶ó¿ìÀú°¡ Ãâ·ÂÇϴµ¥±îÁöÀÇ ½Ã°£ ÃøÁ¤Àº
»ó´çÈ÷ ¾î·Á¿ì¹Ç·Î(?) (4)¹ø °úÁ¤Àº Á¦¿ÜÇÏ°í (1)-(3)¹ø±îÁöÀÇ
°úÁ¤À» wget °ú timeÀ¸·Î ½Ã°£À» ÃøÁ¤ÇØ º¾´Ï´Ù.
(wget ÀÌ °¡Á®¿Â °á°ú¸¦ /dev/null·Î º¸³¿)
ÁÖÀÇÇÒ Á¡Àº ÀÏ¹Ý HTML ¹®¼¿¡´Â ½ÇÁ¦·Î ¸µÅ©µÈ À̹ÌÁö ¸ðµÎ¸¦
°¡Á®¿À´Âµ¥ ±îÁö ½Ã°£À» ÃøÁ¤ÇØ¾ß ÇÕ´Ï´Ù.
- Å©°í ÀÛÀº À̹ÌÁö¸¦ ¿©·¯°³ ÁغñÇÕ´Ï´Ù
ÁغñÇÑ À̹ÌÁö¸¦ ¸ðµÎ BASE64·Î ÀÎÄÚµùÇÕ´Ï´Ù.
(5°³ ÀÌ»óÀ¸·Î ÀÚ½ÅÀÇ È¨ÆäÀÌÁö ±âÁØ).
- ¹®¼1(tmp.html)
ºñ±³±âÁØÀÌ µÇ´Â ÀÏ¹Ý ¹®¼¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
¿¹: ¿Í °°Àº Çü½Ä
- ¹®¼2(tmp.php)
PHP¸¦ ÀÌ¿ëÇؼ ÇѹøÀÇ Ä¿³Ø¼ÇÀÌ ÀÌ·ç¾îÁöµµ·Ï ÀÛ¼ºÇÕ´Ï´Ù.
¿¹:
- ¹®¼3(tmp.enc.html)
ÀÎÄÚµùµÈ data¸¦ Á÷Á¢ HTML ¹®¼¿¡ Ãß°¡ÇÕ´Ï´Ù.
¿¹: