[Á¦¸ñ] ÇѹøÀÇ Ä¿³Ø¼ÇÀ¸·Î À̹ÌÁö ¸ðµÎ Àü¼ÛÇÏ´Â ¹æ¹ý (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 ¹®¼­¿¡ Ãß°¡ÇÕ´Ï´Ù. ¿¹: