![](/bink.gif) |
|
| ![](/bink.gif) |
php·Î À¥»óÀÇ ÆÄÀÏ Àбâ(html ¼Ò½º Àбâ) |
|
|
![](icon/private_name/1.gif) |
10³â Àü |
ÀÌ ±ÛÀº http://www.php-mysql-tutorial.com/wikis/php-tutorial/reading-a-remote-file-using-php.aspx ¿¡ ÀÖ´Â ±ÛÀ» ¹ø¿ªÇÑ °ÍÀÔ´Ï´Ù
——————————————————–
php·Î À¥»ó(¿ø°Ý)¿¡ ÀÖ´Â ÆÄÀÏÀ» Àд ¹æ¹ýÀ¸·Î´Â ¾Æ·¡ÀÇ 4°¡Áö°¡ °¡´ÉÇÏ´Ù
1. fopen() ÇÔ¼ö »ç¿ë
2. file_get_contents() ÇÔ¼ö »ç¿ë
3. CURL
4. php ¼ÒÄÏ ÇÔ¼ö¸¦ È°¿ëÇÏ¿© Á÷Á¢ °¡Á®¿À´Â ¹ý
1¹ø°ú 2¹ø ¹æ¹ýÀ» »ç¿ëÇϱâ À§Çؼ´Â fopen wrapper °¡ »ç¿ë°¡´ÉÇؾßÇÑ´Ù. ÀÌ fopen wrapper ÆĶó¹ÌÅÍ´Â php.ini¿¡ Á¤ÀǵǾî ÀÖÀ¸³ª, ini_set()À» »ç¿ëÇؼ ½ÇÇà½Ã°£¿¡ ¹Ù²Ü¼ö´Â ¾ø´Ù.
ÀÌ µÎ ¹æ¹ýÀ» ¾µ¼ö ÀÖ´ÂÁöÀÇ ¿©ºÎ´Â ¾Æ·¡ ÄÚµå·Î È®ÀÎÇÒ¼ö ÀÖ´Ù
if (ini_get('allow_url_fopen') == '1') {
// fopen() À̳ª file_get_contents() »ç¿ë
} else {
// curl À̳ª ÇÔ¼ö Á÷Á¢ ÀÛ¼º
}
1. fopen() ÇÔ¼ö »ç¿ë
fopen()À» »ç¿ëÇÏ´Â ¹ýÀº local ÆÄÀÏÀ» ÀÐ´Â°Í ¸¸Å ½±´Ù. À¯ÀÏÇÏ°Ô ´Ù¸¥Á¡Àº fopen()ÇÔ¼ö ³»¿¡ ÆÄÀÏ¸í ´ë½Å URLÀ» Àû´Â´Ù´Â °ÍÀÌ´Ù
¾Æ·¡ ¿¹Á¦¸¦ º¸ÀÚ
// ¿ø°Ý ÆÄÀÏÀ» »ç¿ëÇϱâ Àü¿¡ ¼º°øÀûÀ¸·Î open µÇ¾ú´ÂÁö È®ÀÎ
if ($fp = fopen('http://www.google.com/', 'r')) {
$content = '';
// ÀüºÎ ÀÐÀ»¶§±îÁö °è¼Ó ÀÐÀ½
while ($line = fread($fp, 1024)) {
$content .= $line;
}
// content »ç¿ë
// ...
} else {
// ÆÄÀÏ open½Ã ¿¡·¯ ¹ß»ý
}
À§ ÄÚµåÁß while ¹Ýº¹¹®ÀÇ fread() ÇÔ¼ö´Â ÇÑ ·çÇÁ ¾È¿¡¼ 1024 ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ Àбâ À§ÇØ »ç¿ëµÈ´Ù. ÀÌ ÄÚµå´Â ¾Æ·¡¿Í °°ÀÌ ¾µ¼öµµ ÀÖ´Ù
// ¿ø°Ý ÆÄÀÏÀ» »ç¿ëÇϱâ Àü¿¡ ¼º°øÀûÀ¸·Î open µÇ¾ú´ÂÁö È®ÀÎ
if ($fp = fopen('http://www.google.com/', 'r')) {
$content = '';
// ÀüºÎ ÀÐÀ»¶§±îÁö °è¼Ó ÀÐÀ½
while ($line = fgets($fp, 1024)) {
$content .= $line;
}
// content »ç¿ë
// ...
} else {
// ÆÄÀÏ open½Ã ¿¡·¯ ¹ß»ý
}
fread() ´ë½Å¿¡ ÃÖ´ë 1024¹ÙÀÌÆ®ÀÇ ¶óÀÎ ÇÑÁÙÀ» Àд fgets()¸¦ »ç¿ëÇß´Ù. ù¹ø° Äڵ尡 µÎ¹ø°º¸´Ù Á»´õ ¼±È£µÇ´Â ¹æ½ÄÀÌ´Ù
¿ø°Ý¿¡ ÀÖ´Â ÆÄÀÏÀÌ 300Á٠¥¸® 50KB ÆÄÀÏÀ̶ó°í »ý°¢Çغ¸¸é, ù¹ø° ÄÚµå´Â ·çÇÁ°¡ 15¹ø Á¤µµ µ¹Å×Áö¸¸ µÎ¹ø° ÄÚµå´Â 300¹øÀÇ ·çÇÁ°¡ ½ÇÇàµÇ¾ß ÇÑ´Ù
¸¸¾à ÇÔ¼öÈ£Ãâ ºñ¿ë°ú ½Ã°£À» °í·ÁÁßÀ̶ó¸é ù¹ø° ¹æ¹ýÀÌ È®½ÇÈ÷ ³ªÀº ¹æ¹ýÀÌ´Ù
2. file_get_contents() ÇÔ¼ö »ç¿ë
°¡Àå °£´ÜÇؼ ³»°¡ °¡Àå ¼±È£ÇÏ´Â ¹æ¹ýÀÌ´Ù. ´ÜÁö ÆĶó¸ÞÅ͸¦ url·Î ÁÖ°í ÇÔ¼ö¸¦ È£ÃâÇϱ⸸ ÇÏ¸é µÈ´Ù. ÇÑ°¡Áö ±â¾ïÇؾßÇÒ Á¡Àº ¸®ÅϹÞÀº °ªÀ» »ç¿ëÇϱâ Àü¿¡ error°¡ ¸®ÅÏ 됬´ÂÁö È®ÀÎ ¸ÕÀú ÇؾßÇÑ´Ù´Â °Í.
$content = file_get_contents('http://www.google.com/');
if ($content !== false) {
// content »ç¿ë
} else {
// error ¹ß»ý
}
3. CURL
À§ÀÇ µÎ ¹æ¹ý°ú´Â ´Ù¸£°Ô CURLÀ» ¾²´Â ¹æ¹ýÀº µü ºÎ·¯Áö°Ô ¼³¸íÇϱâ Èûµé´Ù. ÀÌ ¶óÀ̺귯¸®´Â (http»Ó¸¸ ¾Æ´Ï¶ó) ´Ù¸¥ ÇÁ·ÎÅäÄÝ °£ÀÇ ¿¬°á°ú Åë½ÅÇÏ´Â µ¥¿¡ ¸Å¿ì À¯¿ëÇϱ⠾²À̱ä ÇÏÁö¸¸ ¹è¿ì´Âµ¥ ½Ã°£À» Á» µé¿©¾ß ÇÑ´Ù. ¶Ç´Ù¸¥ ¹®Á¦´Â ¸ðµç web host µéÀÌ ÀÌ php ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÏÁö´Â ¾Ê¾Ò´Ù´Â°Í. µû¶ó¼ ÀÌ ¹æ¹ýÀ» ¾²±â Àü¿¡ ÇØ´ç ¶óÀ̺귯¸®°¡ ¼³Ä¡µÇ¾î ÀÖ´ÂÁö ¸ÕÀú È®ÀÎ ÇؾßÇÑ´Ù
´ÙÀ½Àº ¿ø°Ý ÆÄÀÏÀ» ¿©´Â °£´ÜÇÑ ¿¹Á¦
// curlÀÌ ¼³Ä¡ µÇ¾ú´ÂÁö È®ÀÎ
if (function_exists('curl_init')) {
// curl ¸®¼Ò½º¸¦ ÃʱâÈ
$ch = curl_init();
// urlÀ» ¼³Á¤
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
// Çì´õ´Â Á¦¿ÜÇÏ°í content ¸¸ ¹ÞÀ½
curl_setopt($ch, CURLOPT_HEADER, 0);
// ÀÀ´ä °ªÀ» ºê¶ó¿ìÀú¿¡ Ç¥½ÃÇÏÁö ¸»°í °ªÀ» ¸®ÅÏ
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// ºê¶ó¿ìÀúó·³ º¸À̱â À§ÇØ user agent »ç¿ë
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
$content = curl_exec($ch);
// ¸®¼Ò½º ÇØÁ¦¸¦ À§ÇØ ¼¼¼Ç ¿¬°á ´ÝÀ½
curl_close($ch);
} else {
// curl ¶óÀ̺귯¸®°¡ ¼³Ä¡ µÇÁö ¾ÊÀ½. ´Ù¸¥ ¹æ¹ý ¾Ë¾Æº¼ °Í
}
¸î°¡Áö °æ¿ì¿¡´Â file_get_contents()³ª fopen() À» ¾²´Â°Íº¸´Ù CURLÀÌ ´õ ºü¸£´Ù. ÀÌ°ÍÀº CURLÀÌ ±âº»ÀûÀ¸·Î ¾ÐÃà ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϱ⠶§¹®ÀÌ´Ù (¿¹¸¦µé¸é gzip).
Å©°í ÀÛÀº ¸¹Àº »çÀÌÆ®¿¡¼ bandwidth¸¦ ÁÙÀ̱â À§ÇØ ±×µé ÆäÀÌÁö¿¡¼ gzip ¾ÐÃàÀ» »ç¿ëÇÑ´Ù. ÀÌ »çÀÌÆ®µµ gzip ¾ÐÃàÀ» »ç¿ëÇß°í, bandwidth°¡ Àý¹ÝÀ¸·Î ÁÙ¾ú´Ù. ¸¸¾à ±â´Ù¸®±â ½È¾îÇϴ ŸÀÔÀ̶ó¸é CURLÀÌ °¡Àå Àû´çÇÒ°ÍÀÌ´Ù
4. ÇÔ¼ö Á÷Á¢ ÀÛ¼º
ÃÖ¾ÇÀÇ °æ¿ì¿¡´Â ¼¹öÀÇ fopen wrapper ¿É¼Çµµ ²¨Á®ÀÖ°í, CURL ¶óÀ̺귯¸®µµ ÀνºÅç µÇÁö ¾Ê¾ÒÀ»¼öµµ ÀÖ´Ù. ÀÌ ½½Ç »óȲ¿¡¼´Â ¿ì¸®°¡ ¾µ ÇÔ¼ö¸¦ Á÷Á¢ ¸¸µé¾î¾ß ÇÑ´Ù.
¿ì¸®ÀÇ ÇÔ¼ö´Â ´ë»ó ÆÄÀÏÀÇ url ÆĶó¹ÌÅÍ ÇÑ°³¸¦ °®´Â getRemoteFile() ÇÔ¼ö·Î ¸í¸íÇß´Ù. ´ë·«ÀûÀÎ »À´ë´Â ¾Æ·¡¿Í °°´Ù
function getRemoteFile($url)
{
// 1. host name°ú url path °ªÀ» ȹµæ
// 2. ¿ø°Ý ¼¹ö¿¡ Á¢¼Ó
// 3. ÆÄÀÏÀ» ¾ò±âÀ§ÇØ ÇÊ¿äÇÑ Çì´õµéÀ» Àü¼Û
// 4. ¿ø°Ý ¼¹ö·ÎºÎÅÍ ÀÀ´ä ¹ÞÀ½
// 5. header ºÎºÐ °È¾î³¿
// 6. ÆÄÀÏ content ¸®ÅÏ
}
url¿¡¼ host name°ú url path ¸¦ ÃßÃâÇϱâÀ§Çؼ´Â parse_url() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù. ÀÌ ÇÔ¼ö¿¡ ³Ñ°ÜÁø urlÀº ´ÙÀ½ Ç׸ñµé·Î ºÐ¸®µÉ °ÍÀÌ´Ù
•scheme
•host
•port
•user
•pass
•path
•query
•fragment
¿¹¸¦µé¸é, http://www.php-mysql-tutorial.com/somepage.php Àº ¾Æ·¡¿Í °°ÀÌ ¸®ÅϵȴÙ
Array
(
[scheme] => http
[host] => www.php-mysql-tutorial.com
[path] => /somepage.php
)
¸¸¾à http://myusername:mypassword@www.php-mysql-tutorial.com/somepage.php?q=whatsthis#ouch ¶ó¸é ¾Æ·¡¿Í °°ÀÌ ¸®ÅϵȴÙ
Array
(
[scheme] => http
[host] => www.php-mysql-tutorial.com
[user] => myusername
[pass] => mypassword
[path] => /somepage.php
[query] => q=whatsthis
[fragment] => ouch
)
¿ì¸®°¡ °ü½ÉÀִ°ÍÀº host, port, path, query °ª »ÓÀÌ´Ù
¿ø°Ý ¼¹ö¿ÍÀÇ connectionÀ» »ý¼ºÇϱâ´Â À§Çؼ fsockopen()À» »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö´Â [hostname, port number, error number Æ÷ÀÎÅÍ, error message Æ÷ÀÎÅÍ, ½Ã°£Á¦ÇÑ] 5°³ÀÇ ÀÎÀÚ¸¦ °¡Áö°í ÀÖ´Ù
function getRemoteFile($url)
{
// host name °ú url path °ªÀ» ȹµæ
$parsedUrl = parse_url($url);
$host = $parsedUrl['host'];
if (isset($parsedUrl['path'])) {
$path = $parsedUrl['path'];
} else {
// urlÀÌ http://www.mysite.com °°Àº Çü½ÄÀ̶ó¸é
$path = '/';
}
if (isset($parsedUrl['query'])) {
$path .= '?' . $parsedUrl['query'];
}
if (isset($parsedUrl['port'])) {
$port = $parsedUrl['port'];
} else {
// ´ëºÎºÐÀÇ »çÀÌÆ®µéÀº 80Æ÷Æ®¸¦ »ç¿ë
$port = '80';
}
$timeout = 10;
$response = '';
// ¿ø°Ý ¼¹ö¿¡ Á¢¼ÓÇÑ´Ù
$fp = @fsockopen($host, $port, $errno, $errstr, $timeout );
if( !$fp ) {
echo "Cannot retrieve $url";
} else {
// ÇÊ¿äÇÑ Çì´õµé Àü¼Û
fputs($fp, "GET $path HTTP/1.0\r\n" .
"Host: $host\r\n" .
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3\r\n" .
"Accept: */*\r\n" .
"Accept-Language: en-us,en;q=0.5\r\n" .
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" .
"Keep-Alive: 300\r\n" .
"Connection: keep-alive\r\n" .
"Referer: http://$host\r\n\r\n");
// ¿ø°Ý ¼¹ö·ÎºÎÅÍ response ¹ÞÀ½
while ( $line = fread( $fp, 4096 ) ) {
$response .= $line;
}
fclose( $fp );
// header ºÎºÐ °È¾î³¿
$pos = strpos($response, "\r\n\r\n");
$response = substr($response, $pos + 4);
}
// ÆÄÀÏÀÇ content ¸®ÅÏ
return $response;
}
À§ÀÇ Äڵ忡¼´Â 9ÁÙÀÇ Çì´õ Á¤º¸¸¦ º¸³»Áö¸¸ »ç½Ç óÀ½ 2ÁÙ¸¸ Çʼö»çÇ×ÀÌ´Ù. µû¶ó¼ ÀÌ·¸°Ô¸¸ º¸³»µµ µÈ´Ù
fputs($fp, "GET $path HTTP/1.0\r\n" .
"Host: $host\r\n\r\n");
¾Æ¸¶ Àßµ¿ÀÛÇÒ°ÍÀÌ´Ù. ÇÏÁö¸¸ Ç×»ó Àß µ¿ÀÛÇϴ°ÍÀº ¾Æ´Ï´Ù. ¿°íÀÚ ÇÏ´Â ÆÄÀϵéÀº ¿ø°Ý ¼¹ö¿¡ ÀúÀåµÇ¾î Àֱ⶧¹®¿¡, ¿ø°Ý ¼¹ö°¡ request¿¡ response ÇÏ´ÂÁö ¾ÈÇÏ´ÂÁö¿¡ ´Þ·ÁÀÖ´Ù
¸î¸î ¼¹ö´Â request Çì´õ¿¡ referer Ç׸ñÀÌ ¾ø´Ù¸é block ÇÒ°ÍÀÌ°í, ¸î¸îÀº ƯÁ¤ user agent ¸¸ ¹Þ¾ÆµéÀÏ °ÍÀÌ´Ù. ¶Ç ¾î¶² °ÍµéÀº cookie°¡ ¼³Á¤µÇ¾î ÀÖ´Â header¸¸ ¹ÞÀ» °ÍÀÌ´Ù
ƯÁ¤ ¿ø°Ý ÆÄÀÏÀ» ¿©´Âµ¥¿¡ ¾î¶² Çì´õ°¡ º¸³»Á®¾ß ÇÏ´ÂÁö ¾Ë°í ½Í´Ù¸é ÆÄÀ̾îÆø½º¿Í live http headers plugin ÅøÀ» »ç¿ëÇØ º¸¶ó. ÀÛ°í °ÇÑ ÅøÀÌ´Ù
|
|
̵̧ : 477 |
̵̧
¸ñ·Ï
|
|
| ![](/bink.gif) |
|