ȸ¿ø·Î±×ÀÎ
PHP·Î ±¸ÇöÇÑ °Ô½ÃÆÇ ÀÚµ¿ µî·Ï±â Ŭ·¡½º
13³â Àü
====== DB ½ºÅ°¸¶ ========================================
CREATE TABLE autopost (
num int(6) NOT NULL auto_increment,
title varchar(250) NOT NULL default '', // »çÀÌÆ® À̸§
type varchar(30) default NULL, // Àü¼Û¹æ¹ý (formdata, urlencoded)
site varchar(250) NOT NULL default '', // ¸®½ºÆ® ÆäÀÌÁö ÁÖ¼Ò
port int(5) default '80', // Á¢¼Ó Æ÷Æ® (±âº» 80)
referer varchar(250) NOT NULL default '', // ±Û¾²±âÆû ÆäÀÌÁö ÁÖ¼Ò
cookie text, // ±Û¾²±âÆû¿¡¼ÀÇ ÄíÅ°°ª
method varchar(4) default 'POST', // Àü¼Û¹æ¹ý (POST,GET)
target varchar(250) NOT NULL default '', // ±Û¾²±â ÆäÀÌÁöÀÇ ÁÖ¼Ò
ff_name varchar(40) NOT NULL default '', // ÀÛ¼ºÀÚ Çʵå À̸§
ff_password varchar(40) NOT NULL default '', // ºñ¹Ð¹øÈ£ Çʵå À̸§
ff_email varchar(40) default NULL, // À̸ÞÀÏ Çʵå À̸§
ff_homepage varchar(40) default NULL, // ȨÆäÀÌÁö Çʵå À̸§
ff_subject varchar(40) NOT NULL default '', // Á¦¸ñ Çʵå À̸§
ff_content varchar(40) NOT NULL default '', // ³»¿ë Çʵå À̸§
ff_etc text NOT NULL, // Ãß°¡º¯¼ö
count int(4) NOT NULL default '0', // Àü¼ÛȽ¼ö
date datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (num)
) TYPE=MyISAM;
$sbh¶õ °´Ã¼¸¦ ¸¸µé°í °Ô½ÃÆÇ¿¡ ÀÔ·ÂÇÒ À̸§,ºñ¹Ð¹øÈ£,Á¦¸ñ,³»¿ë,À̸ÞÀÏ µîµîÀÇ °ªÀ» ¼³Á¤ÇÕ´Ï´Ù.
±×·± ´ÙÀ½ DB¿¡ ³»¿ëÀ» Àоî $sbh->setData($row)·Î ³Ñ°ÜÁÝ´Ï´Ù.
±×·± ´ÙÀ½ $result·Î °á°ú°ªÀ» ¹Þ¾Æ¿É´Ï´Ù.
ÀÀ´ä Äڵ尡 200ÀÎ °Í¿¡ ´ëÇؼ ¼º°øÀ¸·Î ó¸®ÇÕ´Ï´Ù.
ÀÌ°ÍÀº À¥¼¹ö¿¡¼ º°´Ù¸¥ ¿¡·¯¾øÀÌ Ã³¸®Çß´Ù´Â ¸Þ¼¼ÁöÀÌÁö °Ô½Ã¹°ÀÇ µî·ÏÀÌ ¼º°øÀûÀ¸·Î µÇ¾ú´Ù´Â °ÍÀ» ÀǹÌÇÏÁö´Â ¾Ê½À´Ï´Ù.
====== write.php ÆÄÀÏ ¼Ò½º ==============================
include("send_board.inc");
$sbh = new sendBoard($name,$password,$email,$subject,$content,$homepage);
$i = 0;
$total_success = 0;
$total_fail = 0;
$sql_order = " order by num desc";
$query = mysql_query("select * from autopost where $sql_where $sql_order");
while($row = mysql_fetch_array($query)){
// 1ÀÌ¸é ¿äûÇì´õ¿Í ÀÀ´äÇì´õ¸¸ º¸¿©ÁÖ°í µ¥ÀÌŸ¸¦ Àü¼ÛÀº ¾ÈÇÔ
// 2ÀÌ¸é ¿äûÇì¾îµÂ ÀÀ´äÇì´õ¸¦ º¸¿©ÁÖ°í µ¥ÀÌŸ¸¦ Àü¼ÛÇÔ
$sbh->setDebug(2);
$result = $sbh->setData($row);
$print_num[$i] = $row[num];
$print_title[$i] = $row[title];
$print_site[$i] = $row[site];
$print_message[$i] = $sbh->getHttpStatusName($result[code]);
if($result[code] == 200){
$print_result[$i] = "<font color=blue>¼º°ø</font>";
$dbh->sql_update("autopost","count=count+1","num='$row[num]'");
$print_count[$i] = $row[count] + 1;
$total_success++;
}else{
$print_result[$i] = "<font color=red>½ÇÆÐ</font>";
$total_fail++;
$print_count[$i] = $row[count];
}
$i++;
}
====== send_board.inc ÆÄÀÏ ¼Ò½º =========================
<?
class sendBoard{
var $time_out = 60;
var $debug_level;
var $row;
var $data_name;
var $data_password;
var $data_email;
var $data_subject;
var $data_content;
var $data_homepage;
// ÀÔ·ÂÇؾßÇÒ °ªµéÀ» ¼³Á¤ÇÔ
//{{{ function sendBoard()
function sendBoard($name,$password,$email,$subject,$content,$homepage=""){
$this->data_name = $name;
$this->data_password = $password;
$this->data_email = $email;
$this->data_subject = $subject;
$this->data_content = $content;
$this->data_homepage = $homepage;
}
//}}}
// µð¹ö±× ·¹º§À» ¼³Á¤ÇÔ
//{{{ function setDebug($debug_level=1);
function setDebug($debug_level=1){
$this->debug_level = $debug_level;
}
//}}}
// ±âº» °Ô½ÃÆÇ ¼³Á¤ Á¤º¸¸¦ °¡°øÇÏ¿© ¼³Á¤ÇÏ°í ±× Á¤º¸¸¦ ¹ÙÅÁÀ¸·Î ¿äûÇì´õ¸¦ ¸¸µé¾î
// sendData()ÇÔ¼ö¿¡ ³Ñ°Ü¼ Àü¼ÛÀÛ¾÷À» ÇÏ°í °á°ú¸¦ ¹Þ¾Æ¼ ¸®ÅÏÇÔ
//{{{ function setData($row)
function setData($row){
$server = parse_url($row[site]);
$row[server] = $server[host];
if(!$row[referer]) $row[referer] = "http://".$server[host]."/";
$this->row = $row;
$request_header = $this->getRequestHeader($row[type]);
$result = $this->sendData($row[server],$row[port],$this->time_out,$request_header);
return $result;
}
//}}}
// ¿äûÇì´õ¸¦ ¸¸µå´Â ÇÔ¼ö
//{{{ function getRequestHeader($type="")
function getRequestHeader($type=""){
## request header¸¦ Á¤ÀÇÇÔ
$request_header = $this->row[method]." ".$this->row[target]." HTTP/1.0\r\n";
$request_header .= "Host: ".$this->row[server]."\r\n";
$request_header .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n";
$request_header .= "Accept-Language: ko\r\n";
$request_header .= "Accept-Encoding: gzip, deflate\r\n";
$request_header .= "Referer: ".$this->row[referer]."\r\n";
$request_header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)\r\n";
$request_header .= "Cache-Control: no-cache\r\n";
$request_header .= "Connection: Keep-Alive\r\n";
if($this->row[cookie]) $request_header .= "Cookie: ".trim($this->row[cookie])."\r\n";
if($type == "formdata"){
$boundary = uniqid("");
$boundary_header = "boundary=---------------------------".$boundary."\r\n";
$boundary_body = "-----------------------------".$boundary."\r\n";
$boundary_footer = "-----------------------------".$boundary."--\r\n";
$formdata = $this->getFormData($boundary_body);
$content_length = strlen($formdata);
$request_header .= "Content-Type: multipart/form-data; $boundary_header";
$request_header .= "Content-Length: $content_length\r\n\r\n";
$request_header .= $formdata;
$request_header .= $boundary_footer;
}else{
$formdata = $this->getFormData();
$content_length = strlen($formdata)."\r\n";
$request_header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$request_header .= "Content-Length: $content_length\r\n";
$request_header .= $formdata;
}
$request_header .= "\r\n";
if($this->debug_level) $this->printDebug("¿äû Çì´õ",$request_header);
return $request_header;
}
//}}}
// °Ô½ÃÆÇ¿¡ ÀÔ·ÂµÉ Á¤º¸µéÀ» ¿äûÇì´õ¿¡ ÇÔ²² º¸³¾ Çü½ÄÀ¸·Î °¡°ø
//{{{ function getFormData()
function getFormData($boundary_body=""){
if($this->row[type] == "formdata"){
$formdata .= $boundary_body."Content-Disposition: form-data; name=\"".$this->row[ff_name]."\"\r\n\r\n".$this->data_name."\r\n";
$formdata .= $boundary_body."Content-Disposition: form-data; name=\"".$this->row[ff_password]."\"\r\n\r\n".$this->data_password."\r\n";
$formdata .= $boundary_body."Content-Disposition: form-data; name=\"".$this->row[ff_email]."\"\r\n\r\n".$this->data_email."\r\n";
$formdata .= $boundary_body."Content-Disposition: form-data; name=\"".$this->row[ff_homepage]."\"\r\n\r\n".$this->data_homepage."\r\n";
$formdata .= $boundary_body."Content-Disposition: form-data; name=\"".$this->row[ff_subject]."\"\r\n\r\n".$this->data_subject."\r\n";
$formdata .= $boundary_body."Content-Disposition: form-data; name=\"".$this->row[ff_content]."\"\r\n\r\n".$this->data_content."\r\n";
$etc_data = explode("&",$this->row[ff_etc]);
for($t=0; $t<sizeof($etc_data); $t++){
$tmp = explode("=",$etc_data[$t]);
$formdata .= $boundary_body."Content-Disposition: form-data; name=\"".$tmp[0]."\"\r\n\r\n".$tmp[1]."\r\n";
}
}else{
if($this->row[ff_etc]) $formdata .= trim($this->row[ff_etc])."&";
$formdata .= $this->row[ff_name]."=".$this->data_name."&";
$formdata .= $this->row[ff_password]."=".$this->data_password."&";
$formdata .= $this->row[ff_email]."=".$this->data_email."&";
$formdata .= $this->row[ff_homepage]."=".$this->data_homepage."&";
$formdata .= $this->row[ff_subject]."=".$this->data_subject."&";
$formdata .= $this->row[ff_content]."=".$this->data_content;
$formdata .= "\r\n";
}
return $formdata;
}
//}}}
// ¼ÒÄÏÀ» ÀÌ¿ëÇÏ¿© °¡°øµÈ ¿äûÇì´õ¸¦ º¸³»°í °á°ú¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö
//{{{ function sendData($server,$port,$time_out,$request_header)
function sendData($server,$port,$time_out,$request_header){
if($this->debug_level > 1){
$header = "";
$result = "";
## ¼ÒÄÏ ¿äû ¿¬°á
$socket = @fsockopen($server,$port,$errno,$errstr,$time_out);
## ¼ÒÄÏ ¿¬°áÀÌ ¼º°øÇßÀ» ¶§
if($socket){
fwrite($socket,$request_header);
## response header ¸¦ Àоî¿È
do $header .= fread($socket,1); while (!preg_match('/\\r\\n\\r\\n$/',$header));
## chunked encoding °Ë»ç
if (preg_match('/Transfer\\-Encoding:\\s+chunked\\r\\n/',$header))
do {
$byte = "";
$chunk_size="";
do {
$chunk_size.=$byte;
$byte=fread($socket,1);
} while ($byte!="\\r");
fread($socket, 1);
$chunk_size = hexdec($chunk_size);
$result .= fread($socket,$chunk_size);
fread($socket,2);
} while ($chunk_size);
else {
## content length °¡ Á¤ÀÇ µÇ¾ú´ÂÁö °Ë»ç
if(preg_match('/Content\\-Length:\\s+([0-9]*)\\r\\n/',$header,$matches)) {
$result = fread($socket,$matches[1]);
}else{
while (!feof($socket)) $result .= fread($socket, 4096);
}
}
## ¼ÒÄÏ ´Ý±â
fclose($socket);
## ¼ÒÄÏ ¿¬°áÀÌ ½ÇÆÐÇßÀ» ¶§
}else{
errorMsg("$server:$port ¼¹ö·Î ¿¬°áÇÒ ¼ö ¾ø½À´Ï´Ù.");
}
$return_value[header] = $header;
$return_value[result] = $result;
$return_value[code] = substr($header,9,3);
if($this->debug_level) $this->printDebug("ÀÀ´ä Çì´õ",$return_value[header]);
return $return_value;
}
}
//}}}
// ¿¡·¯¸Þ¼¼Áö Ãâ·Â ÇÔ¼ö
//{{{ function errorMsg($msg,$url="javascript:history.go(-1)",$frame="document")
function errorMsg($msg,$url="javascript:history.go(-1)",$frame="document"){
echo "
<table width=100% height=350 border=0 cellpadding=0 cellspacing=0>
<tr>
<td>
<table border=0 cellpadding=3 cellspacing=1 width=350 bgcolor=8d8d8d align=center>
<tr bgcolor=e5e5e5>
<td align=center height=30 style=font-family:Tahoma;font-size:8pt;><b>Error Message</font></td>
</tr>
<tr bgcolor=f5f5f5>
<td align=center height=30 style=font-family:Tahoma;font-size:8pt;>
<table width=90% border=0 cellpadding=0 cellspacing=0>
<tr>
<td>
<br>
<span style=line-height:150%;font-size=12;>$msg</span>
</td>
</tr>
<tr>
<td>
<br>
<center><input type=button value=\" Move Back \" onclick=\"$frame.location.href='$url'\" style=border-color:#b0b0b0;background-color:#3d3d3d;color:#ffffff;font-size:8pt;font-family:Tahoma;height:23px;>
<br>
<br>
</td>
</tr>
</table>
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
";
exit;
}
//}}}
// µð¹ö±× Á¤º¸¸¦ Ãâ·ÂÇÏ´Â ÇÔ¼ö
//{{{ function printDebug($title,$data)
function printDebug($title,$data){
$data = nl2br($data);
$debug = "==== $title ==============================================================================================================================\r\n<br>";
$debug .= $data;
$debug .= "============================================================================================================================================\r\n\r\n<br>";
echo $debug;
}
//}}}
// ¼ÒÄÏÀ¸·Î ¿äûÇÑ ÈÄ ³Ñ¾î¿À´Â ÀÀ´äÄڵ带 ¾Ë·ÁÁÜ
//{{{ function getHttpStatusName($code)
function getHttpStatusName($code){
switch($code){
case 100 : $name = "Continue";break;
case 101 : $name = "Switching protocols";break;
case 200 : $name = "Complete, Àü¼Û ¼º°ø";break;
case 201 : $name = "Created, POST ¸í·É ½ÇÇà ¹× ¼º°ø";break;
case 202 : $name = "Accepted, ¼¹ö°¡ Ŭ¶óÀ̾ðÆ® ¸í·ÉÀ» ¹ÞÀ½";break;
case 203 : $name = "Non-authoritative information, ¼¹ö°¡ Ŭ¶óÀ̾ðÆ® ¿ä±¸ Áß ÀϺΠ¸¸ Àü¼Û";break;
case 204 : $name = "No content, Ŭ¶ó¾ðÆ® ¿ä±¸¸¦ ó¸®ÇßÀ¸³ª Àü¼ÛÇÒ µ¥ÀÌÅÍ°¡ ¾øÀ½";break;
case 205 : $name = "Reset content";break;
case 206 : $name = "Partial content";break;
case 300 : $name = "Multiple choices, ÃÖ±Ù¿¡ ¿Å°ÜÁø µ¥ÀÌÅ͸¦ ¿äû";break;
case 301 : $name = "Moved permanently, ¿ä±¸ÇÑ µ¥ÀÌÅ͸¦ º¯°æµÈ Àӽà URL¿¡¼ ã¾ÒÀ½";break;
case 302 : $name = "Moved temporarily, ¿ä±¸ÇÑ µ¥ÀÌÅÍ°¡ º¯°æµÈ URL¿¡ ÀÖÀ½À» ¸í½Ã";break;
case 303 : $name = "See other, ¿ä±¸ÇÑ µ¥ÀÌÅ͸¦ º¯°æÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¹®Á¦°¡ ÀÖÀ½";break;
case 304 : $name = "Not modified";break;
case 305 : $name = "Use proxy";break;
case 400 : $name = "Bad request, Ŭ¶óÀ̾ðÆ®ÀÇ À߸øµÈ ¿äûÀ¸·Î ó¸®ÇÒ ¼ö ¾øÀ½";break;
case 401 : $name = "Unauthorized, Ŭ¶óÀ̾ðÆ®ÀÇ ÀÎÁõ ½ÇÆÐ";break;
case 402 : $name = "Payment required, ¿¹¾àµÊ";break;
case 403 : $name = "Forbidden, Á¢±ÙÀÌ °ÅºÎµÈ ¹®¼¸¦ ¿äûÇÔ";break;
case 404 : $name = "Not found, ¹®¼¸¦ ãÀ» ¼ö ¾øÀ½";break;
case 405 : $name = "Method not allowed, ¸®¼Ò½º¸¦ Çã¿ë¾ÈÇÔ";break;
case 406 : $name = "Not acceptable, Çã¿ëÇÒ ¼ö ¾øÀ½";break;
case 407 : $name = "Proxy authentication required, ÇÁ·Ï½Ã ÀÎÁõ ÇÊ¿ä";break;
case 408 : $name = "Request timeout, ¿äû½Ã°£ÀÌ Áö³²";break;
case 409 : $name = "Conflict";break;
case 410 : $name = "Gone, ¿µ±¸ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ¾øÀ½";break;
case 411 : $name = "Length required";break;
case 412 : $name = "Precondition failed, ÀüüÁ¶°Ç ½ÇÆÐ";break;
case 413 : $name = "Request entity too large";break;
case 414 : $name = "Request-URI too long, URLÀÌ ³Ê¹« ±è";break;
case 415 : $name = "Unsupported media type";break;
case 500 : $name = "Internal server error, ³»ºÎ¼¹ö ¿À·ù";break;
case 501 : $name = "Not implemented, Ŭ¶óÀ̾ðÆ®¿¡¼ ¼¹ö°¡ ¼öÇàÇÒ ¼ö ¾ø´Â ÇൿÀ» ¿ä±¸ÇÔ";break;
case 502 : $name = "Bad gateway, ¼¹öÀÇ °úºÎÇÏ »óÅÂ";break;
case 503 : $name = "Service unavailable, ¿ÜºÎ ¼ºñ½º°¡ Á×¾ú°Å³ª ÇöÀç ¸ØÃã »óÅÂ";break;
case 504 : $name = "Gateway timeout";break;
case 505 : $name = "HTTP version not supported";break;
}
$message = "[$code] $name";
return $message;
}
//}}}
}
?>
̵̧ : 512
̵̧
¸ñ·Ï