 |
|
|  |
PHP¿¡¼ MP3 ÆÄÀÏÀ» Á÷Á¢ ÀÐ°í ½ºÆ®¸®¹Ö Çϱâ |
|
|
 |
5´Þ Àü |
PHP¸¦ »ç¿ëÇÏ¿© MP3 ÆÄÀÏÀ» Á÷Á¢ ÀÐ¾î¼ Å¬¶óÀ̾ðÆ®¿¡ Àü¼ÛÇÏ·Á¸é, PHP ½ºÅ©¸³Æ®¿¡¼ ÆÄÀÏÀ» ¿°í ÀûÀýÇÑ Çì´õ¸¦ ¼³Á¤ÇÑ ´ÙÀ½, ÆÄÀÏÀÇ ³»¿ëÀ» Àоî¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô Çϸé Ŭ¶óÀ̾ðÆ®°¡ ÆÄÀÏÀ» Á÷Á¢ ´Ù¿î·ÎµåÇϰųª Àç»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½Àº PHP¿¡¼ MP3 ÆÄÀÏÀ» Á÷Á¢ Àаí Àü¼ÛÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.
<?php
// ÆÄÀÏ °æ·Î¸¦ °áÁ¤ÇÕ´Ï´Ù.
$file_path = "/media/music.mp3";
// ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÕ´Ï´Ù.
if (!file_exists($file_path)) {
die("File not found.");
}
// ÆÄÀÏ Å©±â ¹× ÄÜÅÙÃ÷ ŸÀÔ ¼³Á¤
$size = filesize($file_path);
$fp = fopen($file_path, 'rb');
$length = $size;
$start = 0;
$end = $size - 1;
// Ŭ¶óÀ̾ðÆ®ÀÇ ¹üÀ§ ¿äûÀ» ó¸®ÇÕ´Ï´Ù.
if (isset($_SERVER['HTTP_RANGE'])) {
$c_start = $start;
$c_end = $end;
// ¹üÀ§ °ªÀ» ÆĽÌÇÕ´Ï´Ù.
list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
if (strpos($range, ',') !== false) {
header('HTTP/1.1 416 Requested Range Not Satisfiable');
header("Content-Range: bytes $start-$end/$size");
exit;
}
if ($range == '-') {
$c_start = $size - substr($range, 1);
} else {
$range = explode('-', $range);
$c_start = $range[0];
$c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
}
$c_end = ($c_end > $end) ? $end : $c_end;
if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) {
header('HTTP/1.1 416 Requested Range Not Satisfiable');
header("Content-Range: bytes $start-$end/$size");
exit;
}
$start = $c_start;
$end = $c_end;
$length = $end - $start + 1;
fseek($fp, $start);
header('HTTP/1.1 206 Partial Content');
}
// Çì´õ ¼³Á¤
header('Content-Type: audio/mpeg');
header('Content-Length: ' . $length);
header("Content-Range: bytes $start-$end/$size");
header('Accept-Ranges: bytes');
// ÆÄÀÏÀÇ Æ¯Á¤ ºÎºÐÀ» Àаí Ãâ·ÂÇÕ´Ï´Ù.
while (!feof($fp) && ($p = ftell($fp)) <= $end) {
set_time_limit(0);
print fread($fp, min(1024 * 16, $end - $p + 1));
flush();
}
fclose($fp);
exit();
?>
MP3 ÆÄÀÏÀ» Á÷Á¢ ºÒ·¯¿À´Â °Í°ú PHP¸¦ ÅëÇØ Àоî¿À´Â °Í »çÀÌ¿¡´Â Æ®·¡ÇÈ ¾ç ÀÚü¿¡´Â Â÷ÀÌ°¡ ¾øÁö¸¸, ¼¹öÀÇ ºÎÇÏ¿Í ÆÛÆ÷¸Õ½º¿¡´Â Â÷ÀÌ°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù.
1. Æ®·¡ÇÈÀÇ ¾ç
Æ®·¡ÇÈ ¾çÀº µ¿ÀÏÇÕ´Ï´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¼¹ö·ÎºÎÅÍ MP3 ÆÄÀÏÀ» ¿äûÇÒ ¶§, Àüü ÆÄÀÏ Å©±â¸¸ÅÀÇ µ¥ÀÌÅ͸¦ ´Ù¿î·ÎµåÇϹǷÎ, Á÷Á¢ Á¢±ÙÇϰųª PHP¸¦ ÅëÇØ Á¢±ÙÇÏ´õ¶óµµ Àü¼ÛµÇ´Â µ¥ÀÌÅÍÀÇ ¾ç ÀÚü¿¡´Â Â÷ÀÌ°¡ ¾ø½À´Ï´Ù.
2. ¼¹ö ºÎÇÏ
PHP¸¦ ÅëÇÑ ÆÄÀÏ Àü´ÞÀº ¼¹ö Ãø¿¡¼ Ãß°¡ ÀÛ¾÷ÀÌ ¹ß»ýÇϱ⠶§¹®¿¡ ¼¹ö ºÎÇÏ°¡ ´õ Å®´Ï´Ù. PHP ½ºÅ©¸³Æ®´Â °¢ ¿äû¸¶´Ù ½ÇÇàµÇ¸ç, ÆÄÀÏÀ» ¿°í Àаí, HTTP Çì´õ¸¦ ¼³Á¤ÇÏ°í, µ¥ÀÌÅ͸¦ Àü¼ÛÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷Àº ¼¹öÀÇ CPU¿Í ¸Þ¸ð¸® ¸®¼Ò½º¸¦ »ç¿ëÇϹǷÎ, ¿äûÀÌ ¸¹¾ÆÁö¸é ¼¹öÀÇ ¼º´ÉÀÌ ÀúÇ쵃 ¼ö ÀÖ½À´Ï´Ù.
¹Ý¸é¿¡ MP3 ÆÄÀÏÀ» Á÷Á¢ Á¦°øÇÒ ¶§´Â À¥ ¼¹ö(Apache, Nginx µî)°¡ ÆÄÀÏÀ» ¹Ù·Î Àü´ÞÇϱ⠶§¹®¿¡ ¼¹öÀÇ ºÎÇÏ°¡ Àû½À´Ï´Ù. À¥ ¼¹ö´Â ÆÄÀÏ Àü¼Û¿¡ ÃÖÀûȵǾî ÀÖÀ¸¹Ç·Î, ÈξÀ ´õ È¿À²ÀûÀ¸·Î ÆÄÀÏÀ» ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
3. ij½Ì°ú ¼º´É ÃÖÀûÈ
Á÷Á¢ Á¢±ÙÀº À¥ ¼¹öÀÇ Ä³½Ã¸¦ È°¿ëÇÒ ¼ö ÀÖ¾î ´õ ºü¸¨´Ï´Ù. À¥ ¼¹ö´Â Á¤Àû ÆÄÀÏ(MP3¿Í °°Àº ÆÄÀÏ)À» Á¦°øÇÒ ¶§, ij½Ã¸¦ È°¿ëÇÏ¿© ¼º´ÉÀ» ÃÖÀûÈÇÒ ¼ö ÀÖ½À´Ï´Ù.
PHP¸¦ ÅëÇÑ Á¢±ÙÀº ij½ÌÀ» ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é, ¸ðµç ¿äû¿¡¼ PHP°¡ ´Ù½Ã ½ÇÇàµÇ¾î Ãß°¡ÀûÀÎ ¼¹ö ÀÚ¿øÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÇÏÁö¸¸, PHP ½ºÅ©¸³Æ®¿¡¼ ij½Ì Çì´õ¸¦ ¼³Á¤ÇÏ¿© Ŭ¶óÀ̾ðÆ® ¶Ç´Â Áß°£ ÇÁ·Ï½Ã ¼¹ö°¡ ij½ÌÇϵµ·Ï À¯µµÇÒ ¼ö ÀÖ½À´Ï´Ù.
4. º¸¾È ¹× Á¦¾î
PHP¸¦ ÅëÇÑ Á¢±ÙÀº Ãß°¡ÀûÀÎ º¸¾È ¹× Á¢±Ù Á¦¾î¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, »ç¿ëÀÚ ÀÎÁõ, ´Ù¿î·Îµå Á¦ÇÑ, ·Î±ë µîÀÇ ÀÛ¾÷À» PHP ÄÚµå·Î ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
Á÷Á¢ Á¢±ÙÀº ±âº»ÀûÀ¸·Î ÀÌ·¯ÇÑ Á¦¾î°¡ ¾î·ÆÁö¸¸, À¥ ¼¹ö ¼³Á¤À» ÅëÇØ ÀϺΠº¸¾È Á¶Ä¡¸¦ ÃëÇÒ ¼ö ÀÖ½À´Ï´Ù.
°á·Ð
Æ®·¡ÇÈ ¾ç: µ¿ÀÏÇÏÁö¸¸, PHP¸¦ ÅëÇØ Á¢±ÙÇÒ ¶§ ¼¹ö ºÎÇÏ°¡ Áõ°¡ÇÕ´Ï´Ù.
¼º´É ÃÖÀûÈ°¡ ÇÊ¿äÇÏ°í ´Ü¼øÈ÷ ÆÄÀÏÀ» Á¦°øÇÏ´Â °ÍÀÌ ¸ñÀûÀ̶ó¸é Á÷Á¢ Á¢±ÙÀÌ ´õ È¿À²ÀûÀÔ´Ï´Ù.
º¸¾È°ú Á¦¾î°¡ Áß¿äÇÑ °æ¿ì¿¡´Â PHP¸¦ ÅëÇØ Á¢±ÙÇÏ´Â °ÍÀÌ À¯¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
»ç¿ë »ç·Ê¿¡ µû¶ó Á÷Á¢ Á¢±Ù°ú PHP¸¦ ÅëÇÑ Á¢±ÙÀÇ Àå´ÜÁ¡À» °í·ÁÇÏ¿© °áÁ¤ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. |
|
̵̧ : 26 |
̵̧
¸ñ·Ï
|
|
|  |
|