게시판같은곳에 파일을 첨부할때 파일이름에 .(쩜)이 두개 이상 붙으면 
다운받을때 브라우저에서 파일이름에 [1]같은것을 붙혀버립니다. 
(예를들면 xxx.tar.z같은 파일을 다운받을때 xxx[1].tar.z 로 바뀌어버림)
이러한 문제를 해결하고 싶으시면 아래 간단한 팁을 이용하시면 됩니다.

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
$파일이름 = preg_replace('/\./', '%2e', $서버에저장된파일이름, substr_count($서버에저장된파일이름, '.') - 1);
}

아래는 파일 다운로드 페이지 구현시 실제 사용예제입니다. 

/********************************** 예제 *******************************************/
// 파일열기모드 옵션값
$dn = 1; // 1 : 다운 0 : 실행
$dn_yn = ($dn) ? "attachment" : "inline";

// 디렉토리 정보
$dir = "/파일이저장된경로/";

// 서버에 저장된 파일명
$filen=" "

// 서버 저장되기 전 실제 파일명
$filen2=" ";

// 서버에 저장된 경로명+파일명 
$file = $dir.$filen;

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
$dnfile = preg_replace('/\./', '%2e', $filen2, substr_count($filen2, '.') - 1);
}

if(eregi("(MSIE 5.0|MSIE 5.1|MSIE 5.5|MSIE 6.0)", $HTTP_USER_AGENT))

if(strstr($HTTP_USER_AGENT, "MSIE 5.5")) 

Header("Content-Type: doesn/matter"); 
Header("Content-disposition: filename=$dnfile"); 
Header("Content-Transfer-Encoding: binary"); 
Header("Pragma: no-cache"); 
Header("Expires: 0"); 


if(strstr($HTTP_USER_AGENT, "MSIE 5.0")) 

Header("Content-type: file/unknown"); 
Header("Content-Disposition: $dn_yn; filename=$dnfile"); 
Header("Content-Description: PHP3 Generated Data"); 
Header("Pragma: no-cache"); 
Header("Expires: 0"); 


if(strstr($HTTP_USER_AGENT, "MSIE 5.1")) 

Header("Content-type: file/unknown"); 
Header("Content-Disposition: $dn_yn; filename=$dnfile"); 
Header("Content-Description: PHP3 Generated Data"); 
Header("Pragma: no-cache"); 
Header("Expires: 0"); 


if(strstr($HTTP_USER_AGENT, "MSIE 6.0"))
{
Header("Cache-Control: ");
Header("Pragma: ");
Header("Content-type: application/x-msdownload"); 
Header("Content-Length: ".(string)(filesize("$file")));
Header("Content-Disposition: $dn_yn; filename=$dnfile"); 
Header("Content-Transfer-Encoding: binary"); 
Header("Pragma: no-cache"); 
Header("Expires: 0"); 
}

else 

Header("Cache-Control: ");
Header("Pragma: ");
Header("Content-type: file/unknown"); 
Header("Content-Length: ".(string)(filesize("$file"))); 
Header("Content-Disposition: $dn_yn; filename=$dnfile"); 
Header("Content-Description: PHP3 Generated Data"); 
Header("Pragma: no-cache"); 
Header("Expires: 0"); 


if(is_file($file)) 
{
$fp = fopen($file, "rb"); 
if (!fpassthru($fp)) 
fclose($fp); 

else 

echo "해당 파일이나 경로가 존재하지 않습니다."; 
}
?>

오늘은 DB 테이블의 내용을 읽어서 화일로 저장하는 방법을 알아 보겠습니다. 

테이블의 내용을 화면에만 뿌려주면 나중에 실제 데이타를 사용해야 할 일이 있을때 많이 불편하거든요 
그래서 만들어 낸것이 CSV(Comma Separated Values) 포맷을 이용해 화일로 만들고 이것을 받아서 
EXCEL 등에서 사용하는 것 입니다. 
CSV 포맷은 각각의 필드가 콤마(,)로 분리된 일반 텍스트입니다. 


우선 이름,국어,영어,산수,음악의 필드를 가진 점수 테이블을 만듭니다. 

create table score( 
name char(10), 
korean int , 
english int , 
math int , 
music int 
); 
insert into score values('진호',91,95,88,72); 
insert into score values('영수',88,98,100,85); 
insert into score values('철수',100,78,91,76); 
insert into score values('희동',95,76,67,95); 
insert into score values('둘리',78,66,82,100); 


특별히 어려운 점은 없고 테이블 내용을 화면에 써주는 대신 화일로 써주는 것 뿐입니다. 
한가지 주의할점은 파일이 생성되는 디렉토리의 퍼미션이 웹서버에게 쓰기 가능하도록 해 주셔야 합니다 
# chmod 777 ./CSV 처럼요 

아래는 소스 입니다.





//=============DB 접속 ======================== 
$connect=mysql_connect( "", "mysql", "") or die( "SQL server에 연결할 수 없습니다."); 
mysql_select_db("test",$connect); 

// ===================화일 생성============= 
$que1=" select * from score " ; 
$result=mysql_query($que1,$connect ); 

if(file_exists('/score.csv')) 
{ unlink('./score.csv'); } // 만일 이전에 만든 화일이 있으면 지운다 

$newline = chr(10); // LF(줄바꿈)의 ascii 값을 얻는다. 

$fp = fopen( "./score.csv", "w" ) or die("./score.csv 화일을 열수 없습니다") ; 
// score.csv 를 새로 연다 

fwrite($fp,"이름,국어,영어,산수,음악"); // 타이틀 쓰고 
fwrite($fp,$newline); // 줄바꾸기 

$row=mysql_fetch_array($result); 

while($row) 

fwrite($fp,$row[0].",".$row[1].",".$row[2].",".$row[2].",".$row[2]);
// 점수를 한줄씩 쓰고 
fwrite($fp,$newline);
// 줄 바꾸기 
$row=mysql_fetch_array($result); 

fclose($fp); 
//===================== 화일 쓰기 끝 ============== 

echo ("

CSV 파일로 저장하기

"); 
echo (" 저장FILE : score.csv "); 

?> 

// phpschool

<form method="POST" action= "<?PHP echo($PHP_SELF); 
?>">

Find an available domain name from Network Solutions: 

<INPUT name="domain" SIZE="20" MAXLENGTH="22">

<INPUT TYPE="SUBMIT" VALUE="Check name">

<INPUT TYPE="RESET" VALUE="Clear">

</FORM>

<hr>

<font size="2"><pre>

<?

//This function was found at : http://www.phpwizard.net/phpTidbits/

function whois($domain, $server="www.geektools.com")



$fp = fsockopen ($server, 43, &$errnr, &$errstr) or die("$errno: 
$errstr");

fputs($fp, "$domain\n");

while (!feof($fp))

echo fgets($fp, 2048);

fclose($fp); 



 ?>

<?

If (isset ($domain)){

echo (whois($domain));

}

?>

</pre></font>

디자이너가 드림위버로 만든 html을 프로그래머가 메모장에서 일일이 다시 코딩한 경험있으시지요..? 
프로그래머가 코딩한거 드림위버로 일일이 다시 코딩 하는것은 어떨까요?
서로 조금만 배려하면 서로 무지 편하게 작업 할수있어요

아래 예제는 디자이너 , 기획자 , 프로그래머 ,등의 공동 작업시 편리한 생각(팁)입니다.



~~~~~~~~~~~~~~~~~echo 함수의 사용~~~~~~~~~~~~~~~~~~~~~~~~
//좋은 코딩
..

..
//드림위버나 나모에서 아주 잘 보입니다 
//변수에 대한 학습 효과도 줄 수 있어요
//이렇게 하면 템플릿도 필요 없어요


// 열나 짜증나는 코딩(디자이너 입장)
echo"
..

.. ";
?>



~~~~~~~~~~~~~~~~~ 네이밍 ~~~~~~~~~~~~~~~~~~~~~~~~~
//파일의 역할 
게시판 파일의 경우를 예를 들면 
리스트 / 내용보기 / 수정하기 / 삭제하기 /검색하기 
5가지의 역할(인터페이스)를 가지고 있습니다
그럼에도 불구 하고 이걸 bbs.php라는 파일 한장에 다 넣어서 if 문으 쪼개면
드림위버에서 볼 수 없어요

보통 프로그램 할때 어떤게 더 빠를까 생각하시는데..,
그것 보다는 어떤 인터페이스와 유지보수가 더 쉬울까
생각하는것이 요즘 추세 같습니다

각각 write.php list.php view.php ..등으로 나뉘주세요
///////////좋은 파일 네이밍의 예//////////////
bbs_list.php
bbs_write.php
bbs_view.php
mail_list.php
mail_view.php
mail_write.php
inc_common.php
inc_dbconnect.php
inc_menu.php
company_ceo.php
company_map.php
company_phone.php

// 먼저 모듈을 정하고 역할을 표시한다 
//그럼 FTP 로 파일명 순으로보면 잘정리 되어서 보인다.

/////////나쁜 네이밍의 예//////////////////
1.php
3.php
ttt.gif

//역할을 알수 없다 
//모듈(카테고리도 표시가없다)
//숫자를 사용한다
//대소문자를 막 섞는다..


~~~~~~~~~~~~~디렉터리 구조~~~~~~~~~~~~~~~~~~~~~~~
수평적인 구조를 만든다
(디렉토리는 하나~ 두개 정도의 하위구조를 만든다)
///////잘된예 
// "[]" 이거는 디렉터리를 말합니다 
[html]
[php]
[image]
[bbs]
index.html

위처럼 기본계정에 들어가면 인덱스 파일 외에는 
모두 각각의 폴더에 집어넣습니다
image 폴더에는 이미지만
html 폴더에는 html파일만.,

이렇게 사용하면 이미지와 include 사용시 항상 깨지지 않습니다
경로때 문에 고민하지 않아도 되구요 
그리고 php 파일이나 html에서 어디서나 깨지지지 않아요
제로보드 등 설치시에도 이미지 경로가 똑같아지지요
헤더랑 푸터 불러와도 php나 html에서 동일 하게 보입니다
단 경로는 항상 "../" 이걸 붙여줘야 합니다 이유는 아시지요?
../image/이미지명.gif
../inc/common.php

위 처럼 모든 파일의 상대 경로가 동일 하죠


//나쁜예
디렉터리 밑에 또 그밑에 또 ..그밑에 또 디렉터리
파일 한장 고칠려면 엄청 뒤져야 합니다


이상입니다 


* nzeo.com

'Coding' 카테고리의 다른 글

[PHP] DB 내용 CSV 포멧 파일로 저장하기  (0) 2017.01.07
[PHP] Whois 조회 코드  (0) 2017.01.07
[PHP] 오픈 포트 확인  (0) 2017.01.07
[PHP] 한글 문자열 자르는 함수  (0) 2017.01.07
자주 사용하는 PHP 함수  (0) 2017.01.07

$trojans = array ("1" => "(UDP) - Sockets des Troie",
"2" => "Death",
"15" => "B2",
"20" => "Senna Spy FTP server",
"21" => "Back Construction, Blade Runner, Cattivik FTP Server, CC Invader, Dark FTP, Doly Trojan, Fore, FreddyK, Invisible FTP, Juggernaut 42, Larva, MotIv FTP, Net Administrator, Ramen, RTB 666, Senna Spy FTP server, The Flu, Traitor 21, WebEx, WinCrash",
"22" => "Adore sshd, Shaft",
"23" => "ADM worm, Fire HacKer, My Very Own trojan, RTB 666, Telnet Pro, Tiny Telnet Server - TTS, Truva Atl",
"25" => "Ajan, Antigen, Barok, BSE, Email Password Sender - EPS, EPS II, Gip, Gris, Happy99, Hpteam mail, Hybris, I love you, Kuang2, Magic Horse, MBT (Mail Bombing Trojan), Moscow Email trojan, Naebi, NewApt worm, ProMail trojan, Shtirlitz, Stealth, Stukach, Tapiras, Terminator, WinPC, WinSpy",
"30" => "Agent 40421",
"31" => "Agent 31, Hackers Paradise, Masters Paradise",
"39" => "SubSARI",
"41" => "Deep Throat, Foreplay",
"44" => "Arctic",
"48" => "DRAT",
"50" => "DRAT",
"53" => "ADM worm, Lion",
"58" => "DMSetup",
"59" => "DMSetup",
"69" => "BackGate",
"79" => "CDK, Firehotcker",
"80" => "711 trojan (Seven Eleven), AckCmd, Back End, Back Orifice 2000 Plug-Ins, Cafeini, CGI Backdoor, Executor, God Message, God Message 4 Creator, Hooker, IISworm, MTX, NCX, Noob, Ramen, Reverse WWW Tunnel Backdoor, RingZero, RTB 666, Seeker, WAN Remote, Web Server CT, WebDownloader",
"81" => "RemoConChubo",
"99" => "Hidden Port, Mandragore, NCX",
"110" => "ProMail trojan",
"113" => "Invisible Identd Deamon, Kazimas",
"119" => "Happy99",
"121" => "Attack Bot, God Message, JammerKillah",
"123" => "Net Controller",
"133" => "Farnaz",
"137" => "Chode",
"137" => "(UDP) - Msinit, Qaz",
"138" => "Chode",
"139" => "Chode, God Message worm, Msinit, Netlog, Network, Qaz, Sadmind, SMB Relay",
"142" => "NetTaxi",
"146" => "Infector",
"146" => "(UDP) - Infector",
"166" => "NokNok",
"170" => "A-trojan",
"334" => "Backage",
"411" => "Backage",
"420" => "Breach, Incognito",
"421" => "TCP Wrappers trojan",
"455" => "Fatal Connections",
"456" => "Hackers Paradise",
"511" => "T0rn Rootkit",
"513" => "Grlogin",
"514" => "RPC Backdoor",
"515" => "lpdw0rm, Ramen",
"531" => "Net666, Rasmin",
"555" => "711 trojan (Seven Eleven), Ini-Killer, Net Administrator, Phase Zero, Phase-0, Stealth Spy",
"600" => "Sadmind",
"605" => "Secret Service",
"661" => "NokNok",
"666" => "Attack FTP, Back Construction, BLA trojan, Cain & Abel, lpdw0rm, NokNok, Satans Back Door - SBD, ServU, Shadow Phyre, th3r1pp3rz (= Therippers)",
"667" => "SniperNet",
"668" => "th3r1pp3rz (= Therippers)",
"669" => "DP trojan",
"692" => "GayOL",
"777" => "AimSpy, Undetected",
"808" => "WinHole",
"911" => "Dark Shadow, Dark Shadow",
"999" => "Chat power, Deep Throat, Foreplay, WinSatan",
"1000" => "Connecter, Der Sp?er / Der Spaeher, Direct Connection",
"1001" => "Der Sp?er / Der Spaeher, Le Guardien, Silencer, Theef, WebEx",
"1005" => "Theef",
"1008" => "Lion",
"1010" => "Doly Trojan",
"1011" => "Doly Trojan",
"1012" => "Doly Trojan",
"1015" => "Doly Trojan",
"1016" => "Doly Trojan",
"1020" => "Vampire",
"1024" => "Jade, Latinus, NetSpy, Remote Administration Tool - RAT [no 2]",
"1025" => "Fraggle Rock, md5 Backdoor, NetSpy, Remote Storm",
"1025" => "(UDP) - Remote Storm",
"1031" => "Xanadu",
"1035" => "Multidropper",
"1042" => "BLA trojan",
"1042" => "(UDP) - BLA trojan",
"1045" => "Rasmin",
"1049" => "/sbin/initd",
"1050" => "MiniCommand",
"1053" => "The Thief",
"1054" => "AckCmd",
"1080" => "SubSeven 2.2, WinHole",
"1081" => "WinHole",
"1082" => "WinHole",
"1083" => "WinHole",
"1090" => "Xtreme",
"1095" => "Remote Administration Tool - RAT",
"1097" => "Remote Administration Tool - RAT",
"1098" => "Remote Administration Tool - RAT",
"1099" => "Blood Fest Evolution, Remote Administration Tool - RAT",
"1104" => "(UDP) - RexxRave",
"1150" => "Orion",
"1151" => "Orion",
"1170" => "Psyber Stream Server - PSS, Streaming Audio Server, Voice",
"1174" => "DaCryptic",
"1180" => "Unin68",
"1200" => "(UDP) - NoBackO",
"1201" => "(UDP) - NoBackO",
"1207" => "SoftWAR",
"1208" => "Infector",
"1212" => "Kaos",
"1234" => "SubSeven Java client, Ultors Trojan",
"1243" => "BackDoor-G, SubSeven, SubSeven Apocalypse, Tiles",
"1245" => "VooDoo Doll",
"1255" => "Scarab",
"1256" => "Project nEXT, RexxRave",
"1269" => "Matrix",
"1272" => "The Matrix",
"1313" => "NETrojan",
"1337" => "Shadyshell",
"1338" => "Millennium Worm",
"1349" => "Bo dll",
"1386" => "Dagger",
"1394" => "GoFriller",
"1441" => "Remote Storm",
"1492" => "FTP99CMP",
"1524" => "Trinoo",
"1568" => "Remote Hack",
"1600" => "Direct Connection, Shivka-Burka",
"1703" => "Exploiter",
"1777" => "Scarab",
"1807" => "SpySender",
"1826" => "Glacier",
"1966" => "Fake FTP",
"1967" => "For Your Eyes Only - FYEO, WM FTP Server",
"1969" => "OpC BO",
"1981" => "Bowl, Shockrave",
"1991" => "PitFall",
"1999" => "Back Door, SubSeven, TransScout",
"2000" => "Der Spaer / Der Spaeher, Insane Network, Last 2000, Remote Explorer 2000, Senna Spy Trojan Generator",
"2001" => "Der Spaer / Der Spaeher, Trojan Cow",
"2023" => "Ripper Pro",
"2080" => "WinHole",
"2115" => "Bugs",
"2130" => "(UDP) - Mini Backlash",
"2140" => "The Invasor",
"2140" => "(UDP) - Deep Throat, Foreplay",
"2155" => "Illusion Mailer",
"2255" => "Nirvana",
"2283" => "Hvl RAT",
"2300" => "Xplorer",
"2311" => "Studio 54",
"2330" => "IRC Contact",
"2331" => "IRC Contact",
"2332" => "IRC Contact",
"2333" => "IRC Contact",
"2334" => "IRC Contact",
"2335" => "IRC Contact",
"2336" => "IRC Contact",
"2337" => "IRC Contact",
"2338" => "IRC Contact",
"2339" => "IRC Contact, Voice Spy",
"2339" => "(UDP) - Voice Spy",
"2345" => "Doly Trojan",
"2400" => "Portd",
"2555" => "Lion, T0rn Rootkit",
"2565" => "Striker trojan",
"2583" => "WinCrash",
"2589" => "Dagger",
"2600" => "Digital RootBeer",
"2702" => "Black Diver",
"2716" => "The Prayer",
"2773" => "SubSeven, SubSeven 2.1 Gold",
"2774" => "SubSeven, SubSeven 2.1 Gold",
"2801" => "Phineas Phucker",
"2929" => "Konik",
"2989" => "(UDP) - Remote Administration Tool - RAT",
"3000" => "InetSpy, Remote Shut",
"3024" => "WinCrash",
"3031" => "Microspy",
"3128" => "Reverse WWW Tunnel Backdoor, RingZero",
"3129" => "Masters Paradise",
"3131" => "SubSARI",
"3150" => "The Invasor",
"3150" => "(UDP) - Deep Throat, Foreplay, Mini Backlash",
"3456" => "Terror trojan",
"3459" => "Eclipse 2000, Sanctuary",
"3700" => "Portal of Doom",
"3777" => "PsychWard",
"3791" => "Total Solar Eclypse",
"3801" => "Total Solar Eclypse",
"4000" => "Connect-Back Backdoor, SkyDance",
"4092" => "WinCrash",
"4201" => "War trojan",
"4242" => "Virtual Hacking Machine - VHM",
"4321" => "BoBo",
"4444" => "CrackDown, Prosiak, Swift Remote",
"4488" => "Event Horizon",
"4523" => "Celine",
"4545" => "Internal Revise",
"4567" => "File Nail",
"4590" => "ICQ Trojan",
"4653" => "Cero",
"4666" => "Mneah",
"4950" => "ICQ Trogen (Lm)",
"5000" => "Back Door Setup, BioNet Lite, Blazer5, Bubbel, ICKiller, Ra1d, Sockets des Troie",
"5001" => "Back Door Setup, Sockets des Troie",
"5002" => "cd00r, Linux Rootkit IV (4), Shaft",
"5005" => "Aladino",
"5010" => "Solo",
"5011" => "One of the Last Trojans - OOTLT, One of the Last Trojans - OOTLT, modified",
"5025" => "WM Remote KeyLogger",
"5031" => "Net Metropolitan",
"5032" => "Net Metropolitan",
"5321" => "Firehotcker",
"5333" => "Backage, NetDemon",
"5343" => "WC Remote Administration Tool - wCrat",
"5400" => "Back Construction, Blade Runner",
"5401" => "Back Construction, Blade Runner, Mneah",
"5402" => "Back Construction, Blade Runner, Mneah",
"5512" => "Illusion Mailer",
"5534" => "The Flu",
"5550" => "Xtcp",
"5555" => "ServeMe",
"5556" => "BO Facil",
"5557" => "BO Facil",
"5569" => "Robo-Hack",
"5637" => "PC Crasher",
"5638" => "PC Crasher",
"5742" => "WinCrash",
"5760" => "Portmap Remote Root Linux Exploit",
"5802" => "Y3K RAT",
"5873" => "SubSeven 2.2",
"5880" => "Y3K RAT",
"5882" => "Y3K RAT",
"5882" => "(UDP) - Y3K RAT",
"5888" => "Y3K RAT",
"5888" => "(UDP) - Y3K RAT",
"5889" => "Y3K RAT",
"6000" => "The Thing",
"6006" => "Bad Blood",
"6272" => "Secret Service",
"6400" => "The Thing",
"6661" => "TEMan, Weia-Meia",
"6666" => "Dark Connection Inside, NetBus worm",
"6667" => "Dark FTP, EGO, Maniac rootkit, Moses, ScheduleAgent, SubSeven, Subseven 2.1.4 DefCon 8, The Thing (modified), Trinity, WinSatan",
"6669" => "Host Control, Vampire",
"6670" => "BackWeb Server, Deep Throat, Foreplay, WinNuke eXtreame",
"6711" => "BackDoor-G, SubSARI, SubSeven, VP Killer",
"6712" => "Funny trojan, SubSeven",
"6713" => "SubSeven",
"6723" => "Mstream",
"6767" => "UandMe",
"6771" => "Deep Throat, Foreplay",
"6776" => "2000 Cracks, BackDoor-G, SubSeven, VP Killer",
"6838" => "(UDP) - Mstream",
"6883" => "Delta Source DarkStar (??)",
"6912" => "Shit Heep",
"6939" => "Indoctrination",
"6969" => "2000 Cracks, Danton, GateCrasher, IRC 3, Net Controller, Priority",
"6970" => "GateCrasher",
"7000" => "Exploit Translation Server, Kazimas, Remote Grab, SubSeven, SubSeven 2.1 Gold",
"7001" => "Freak88, Freak2k, NetSnooper Gold",
"7158" => "Lohoboyshik",
"7215" => "SubSeven, SubSeven 2.1 Gold",
"7300" => "NetMonitor",
"7301" => "NetMonitor",
"7306" => "NetMonitor",
"7307" => "NetMonitor, Remote Process Monitor",
"7308" => "NetMonitor, X Spy",
"7424" => "Host Control",
"7424" => "(UDP) - Host Control",
"7597" => "Qaz",
"7626" => "Binghe, Glacier, Hyne",
"7718" => "Glacier",
"7777" => "God Message, The Thing (modified), Tini",
"7789" => "Back Door Setup, ICKiller, Mozilla",
"7826" => "Oblivion",
"7891" => "The ReVeNgEr",
"7983" => "Mstream",
"8080" => "Brown Orifice, Generic backdoor, RemoConChubo, Reverse WWW Tunnel Backdoor, RingZero",
"8685" => "Unin68",
"8787" => "Back Orifice 2000",
"8812" => "FraggleRock Lite",
"8988" => "BacHack",
"8989" => "Rcon, Recon, Xcon",
"9000" => "Netministrator",
"9325" => "(UDP) - Mstream",
"9400" => "InCommand",
"9870" => "Remote Computer Control Center",
"9872" => "Portal of Doom",
"9873" => "Portal of Doom",
"9874" => "Portal of Doom",
"9875" => "Portal of Doom",
"9876" => "Cyber Attacker, Rux",
"9878" => "TransScout",
"9989" => "Ini-Killer",
"9999" => "The Prayer",
"10000" => "OpwinTRojan",
"10005" => "OpwinTRojan",
"10008" => "Cheese worm, Lion",
"10067" => "(UDP) - Portal of Doom",
"10085" => "Syphillis",
"10086" => "Syphillis",
"10100" => "Control Total, GiFt trojan",
"10101" => "BrainSpy, Silencer",
"10167" => "(UDP) - Portal of Doom",
"10520" => "Acid Shivers",
"10528" => "Host Control",
"10607" => "Coma",
"10666" => "(UDP) - Ambush",
"11000" => "Senna Spy Trojan Generator",
"11050" => "Host Control",
"11051" => "Host Control",
"11223" => "Progenic trojan, Secret Agent",
"11831" => "Latinus",
"12076" => "Gjamer",
"12223" => "Hack'99 KeyLogger",
"12310" => "PreCursor",
"12345" => "Adore sshd, Ashley, cron / crontab, Fat Bitch trojan, GabanBus, icmp_client.c, icmp_pipe.c, Mypic, NetBus, NetBus Toy, NetBus worm, Pie Bill Gates, ValvNet, Whack Job, X-bill",
"12346" => "Fat Bitch trojan, GabanBus, NetBus, X-bill",
"12348" => "BioNet",
"12349" => "BioNet, Webhead",
"12361" => "Whack-a-mole",
"12362" => "Whack-a-mole",
"12363" => "Whack-a-mole",
"12623" => "(UDP) - DUN Control",
"12624" => "ButtMan",
"12631" => "Whack Job",
"12754" => "Mstream",
"13000" => "Senna Spy Trojan Generator, Senna Spy Trojan Generator",
"13010" => "BitchController, Hacker Brasil - HBR",
"13013" => "PsychWard",
"13014" => "PsychWard",
"13223" => "Hack?9 KeyLogger",
"13473" => "Chupacabra",
"14500" => "PC Invader",
"14501" => "PC Invader",
"14502" => "PC Invader",
"14503" => "PC Invader",
"15000" => "NetDemon",
"15092" => "Host Control",
"15104" => "Mstream",
"15382" => "SubZero",
"15858" => "CDK",
"16484" => "Mosucker",
"16660" => "Stacheldraht",
"16772" => "ICQ Revenge",
"16959" => "SubSeven, Subseven 2.1.4 DefCon 8",
"16969" => "Priority",
"17166" => "Mosaic",
"17300" => "Kuang2 the virus",
"17449" => "Kid Terror",
"17499" => "CrazzyNet",
"17500" => "CrazzyNet",
"17569" => "Infector",
"17593" => "AudioDoor",
"17777" => "Nephron",
"18667" => "Knark",
"18753" => "(UDP) - Shaft",
"19864" => "ICQ Revenge",
"20000" => "Millenium",
"20001" => "Insect, Millenium, Millenium (Lm)",
"20002" => "AcidkoR",
"20005" => "Mosucker",
"20023" => "VP Killer",
"20034" => "NetBus 2.0 Pro, NetBus 2.0 Pro Hidden, NetRex, Whack Job",
"20203" => "Chupacabra",
"20331" => "BLA trojan",
"20432" => "Shaft",
"20433" => "(UDP) - Shaft",
"21544" => "GirlFriend, Kid Terror, Matrix",
"21554" => "Exploiter, FreddyK, Kid Terror, Schwindler, Winsp00fer",
"21579" => "Breach",
"21957" => "Latinus",
"22222" => "Donald Dick, Prosiak, Ruler, RUX The TIc.K",
"23005" => "NetTrash, Olive, Oxon",
"23006" => "NetTrash",
"23023" => "Logged",
"23032" => "Amanda",
"23321" => "Konik",
"23432" => "Asylum",
"23456" => "Evil FTP, Ugly FTP, Whack Job",
"23476" => "Donald Dick",
"23476" => "(UDP) - Donald Dick",
"23477" => "Donald Dick",
"23777" => "InetSpy",
"24000" => "Infector",
"24289" => "Latinus",
"25123" => "Goy'Z TroJan",
"25555" => "FreddyK",
"25685" => "MoonPie",
"25686" => "MoonPie",
"25982" => "MoonPie",
"26274" => "(UDP) - Delta Source",
"26681" => "Voice Spy",
"27160" => "MoonPie",
"27374" => "Bad Blood, EGO, Fake SubSeven, Lion, Ramen, Seeker, SubSeven, SubSeven 2.1 Gold, Subseven 2.1.4 DefCon 8, SubSeven 2.2, SubSeven Muie, The Saint, Ttfloader, Webhead",
"27444" => "(UDP) - Trinoo",
"27573" => "SubSeven",
"27665" => "Trinoo",
"28431" => "Hack'ack",
"28678" => "Exploiter",
"29104" => "NetTrojan",
"29292" => "BackGate",
"29369" => "ovasOn",
"29559" => "Latinus",
"29891" => "The Unexplained",
"30000" => "Infector",
"30001" => "ErrOr32",
"30003" => "Lamers Death",
"30005" => "Backdoor JZ",
"30029" => "AOL trojan",
"30100" => "NetSphere",
"30101" => "NetSphere",
"30102" => "NetSphere",
"30103" => "NetSphere",
"30103" => "(UDP) - NetSphere",
"30133" => "NetSphere",
"30303" => "Sockets des Troie",
"30700" => "Mantis",
"30947" => "Intruse",
"30999" => "Kuang2",
"31221" => "Knark",
"31335" => "Trinoo",
"31336" => "Bo Whack, Butt Funnel",
"31337" => "ADM worm, Back Fire, Back Orifice 1.20 patches, Back Orifice (Lm), Back Orifice russian, Baron Night, Beeone, bindshell, BO client, BO Facil, BO spy, BO2, cron / crontab, Freak88, Freak2k, Gummo, icmp_pipe.c, Linux Rootkit IV (4), Sm4ck, Sockdmini",
"31337" => "(UDP) - Back Orifice, Deep BO",
"31338" => "Back Orifice, Butt Funnel, NetSpy (DK)",
"31338" => "(UDP) - Deep BO, NetSpy (DK)",
"31339" => "NetSpy (DK), NetSpy (DK)",
"31557" => "Xanadu",
"31666" => "BOWhack",
"31745" => "BuschTrommel",
"31785" => "Hack'ack",
"31787" => "Hack'ack",
"31788" => "Hack'ack",
"31789" => "(UDP) - Hack'ack",
"31790" => "Hack'ack",
"31791" => "(UDP) - Hack'ack",
"31792" => "Hack'ack",
"32001" => "Donald Dick",
"32100" => "Peanut Brittle, Project nEXT",
"32418" => "Acid Battery",
"32791" => "Acropolis",
"33270" => "Trinity",
"33333" => "Blakharaz, Prosiak",
"33567" => "Lion, T0rn Rootkit",
"33568" => "Lion, T0rn Rootkit",
"33577" => "Son of PsychWard",
"33777" => "Son of PsychWard",
"33911" => "Spirit 2000, Spirit 2001",
"34324" => "Big Gluck, TN",
"34444" => "Donald Dick",
"34555" => "(UDP) - Trinoo (for Windows)",
"35555" => "(UDP) - Trinoo (for Windows)",
"37237" => "Mantis",
"37266" => "The Killer Trojan",
"37651" => "Yet Another Trojan - YAT",
"38741" => "CyberSpy",
"39507" => "Busters",
"40412" => "The Spy",
"40421" => "Agent 40421, Masters Paradise",
"40422" => "Masters Paradise",
"40423" => "Masters Paradise",
"40425" => "Masters Paradise",
"40426" => "Masters Paradise",
"41337" => "Storm",
"41666" => "Remote Boot Tool - RBT, Remote Boot Tool - RBT",
"44444" => "Prosiak",
"44575" => "Exploiter",
"44767" => "(UDP) - School Bus",
"45559" => "Maniac rootkit",
"45673" => "Acropolis",
"47017" => "T0rn Rootkit",
"47262" => "(UDP) - Delta Source",
"48004" => "Fraggle Rock",
"48006" => "Fraggle Rock",
"49000" => "Fraggle Rock",
"49301" => "OnLine KeyLogger",
"50000" => "SubSARI",
"50130" => "Enterprise",
"50505" => "Sockets des Troie",
"50766" => "Fore, Schwindler",
"51966" => "Cafeini",
"52317" => "Acid Battery 2000",
"53001" => "Remote Windows Shutdown - RWS",
"54283" => "SubSeven, SubSeven 2.1 Gold",
"54320" => "Back Orifice 2000",
"54321" => "Back Orifice 2000, School Bus",
"55165" => "File Manager trojan, File Manager trojan, WM Trojan Generator",
"55166" => "WM Trojan Generator",
"57341" => "NetRaider",
"58339" => "Butt Funnel",
"60000" => "Deep Throat, Foreplay, Sockets des Troie",
"60001" => "Trinity",
"60008" => "Lion, T0rn Rootkit",
"60068" => "Xzip 6000068",
"60411" => "Connection",
"61348" => "Bunker-Hill",
"61466" => "TeleCommando",
"61603" => "Bunker-Hill",
"63485" => "Bunker-Hill",
"64101" => "Taskman",
"65000" => "Devil, Sockets des Troie, Stacheldraht",
"65390" => "Eclypse",
"65421" => "Jade",
"65432" => "The Traitor (= th3tr41t0r)",
"65432" => "(UDP) - The Traitor (= th3tr41t0r)",
"65530" => "Windows Mite",
"65534" => "/sbin/initd",
"65535" => "Adore worm, RC1 trojan, Sins"
);

$host = $REMOTE_ADDR;

echo "당신의 IP.ADDRESS $host 입니다.

자신의 컴퓨터에 해킹이 가능한 포트가 열려 있는지 검사합니다.



\n";

$strNumberFound = 0;

echo "트로이 검색을 시작합니다...
\n";

foreach($trojans as $port=>$desc) {
$fp = fsockopen($host, $port);
if(!$fp) {
echo "접속 포트 $port 검사 해킹프로그램 $desc
\n";
} else {
echo "$desc 로 $port 포트에 해킹이 가능합니다.\n
\n";
$strNumberFound++;
fclose($fp);
}
flush();
}

if($strNumberFound == 0) {
echo "\n\n $host 에서 해킹이 가능한 포트를 찾지 못하였습니다.

";
} else {
echo "$strNumberFound 개의 해킹 가능한 포트가 열여 있습니다
\n";
echo "지금 당신의 컴퓨터는 해킹 될 가능성이 있습니다. 바이러스 검사와 트로이 제거프로그램을 사용하길 권합니다.


\n";
}

?>

function cutStringHan($str, $len)
{
$tail="";
if(strlen($str)>$len)
{
for($i=0; $i<$len; $i++) if(ord($str[$i])>127) $i++;
$str=substr($str,0,$i);
$tail=" ... ";
}
return $str.$tail;
}

1. 날짜 및 시간 관련함수 

*time() 
-용도: 현재 시각을 timestamp값으로 구한다. 
-방법: time() 

*date() 
-용도: 사용자가 지정한 형태로 시간을 표시. 특정시간의 날짜와 요일등을 배열로 리턴한다. 
-방법: date("표시할 시간의 포맷형태","특정한 timestamp값") 

*mktime() 
-용도: 지정된 날짜를 timestamp값으로 변환한다. 
-방법: mktime(시,분,초,월,일,년) 

*checkdate() 
-용도: 날짜와 시간이 올바른 범위 안에 있는지 검사한다. 
-방법: checkdate(월,일,년) 

*getdate() 
-용도: 특정timestamp값으로 시간,요일,날짜정보를 배열로 반환한다. 
-방법: getdate(timestamp값) 또는 getdate() 

*gettimeofday() 
-용도: 현재 시스템의 현재 시간 정보를 배열로 리턴한다. 
-방법: gettimeofday() 

*gmmktime() 
-용도: 그리니치표준 시간으로 지정한 날짜의 timestamp값을 리턴한다. 
-방법: gmmktime(시,분,초,월,일,년) 

*strftime() 
-용도: 특정한 포맷으로 날짜 정보를 출력하는데 언어를 지정할수 있다. 
-방법: strftime("표시할 시간의 포맷형태","특정시간의 timestamp값") 

*microtime() 
-용도: 현재시간의 마이크로타임 값과 timestamp값을 표시한다. 
-방법: microtime() 

*localtime() 
-용도: 현재 서버의 로컬 타임을 표시 
-방법: localtime() 또는 localtime("timestamp값") 

2. 문자열 처리함수 

*addslashes() 
-용도: 작은따옴표 큰따옴표와 같은 특정문자 앞에 역슬래시 문자를 붙인다. 
-방법: addslashes() 

*stripslashes() 
-용도: allslashes로 역슬래시 처리된 문자를 원상태로 되돌린다. 
-방법: stripslashes() 

*htmlspecialchars() 
-용도: HTML코드를 소스 그대로 출력해준다. 
-방법: htmlspecialchars() 

*nl2br() 
-용도: 문자열에 포함된 개행 문자를 
태그로 모두 바꿔준다. 
-방법: nl2br() 

*echo() 
-용도: 문자열 출력 
-방법: echo("변수명" 또는 "문자열") 

*sprintf() 
-용도: 포맷 문자열을 통해 지정해 준 포맷으로 문자열을 표시한다. 
-방법: sprintf("포맷","변수명") 

*printf() 
-용도: 지정할 수 있는 포맷에 따라 문자열을 출력한다. 
-방법: printf("포맷","변수명") 

*explode() 
-용도: 문자열을 지정해준 구분자로 분리하여 배열에 저장한다. 
-방법: explode("구분자","문자열인수") 

*implode() 
-용도: 구분자로 나누어 배열에 담은 문자열을 다시 지정해준 구분자로 연결하여 전체 문자열을 반환한다. 
-방법: implode("구분자",배열변수명) 

*join() 
-용도: implode()와 동일한 기능을 수행한다. 
-방법: join("/", "배열변수명") 

*split() 
-용도: 주어진 문자열을 정규표현식의 패턴에 따라 분리하여 배열에 저장한다. 
-방법: implode("정규표현식","문자열") 

*strcmp() 
-용도: 두개의 문자열을 비교하여 참이면1, 거짓이면 0을 반환한다. 
-방법: strcmp("문자열","문자열") 또는 strcmp("문자열","변수명") 또는 strcmp(변수명, 변수명) 

*substr() 
-용도: 문자열에서 특정시작 문자부터 길이만큼의 문자열을 추출하여 반환한다. 
-방법: substr("문자열", 시작문자번호, 문자열의 길이) 

*strchr() 
-용도: 문자열이 처음으로 나타나는 위치부터 끝까지 반환 
-방법: strchr("문자열","찾을 문자열") 

*strstr() 
-용도:strchr()함수와 동일한 수행을 한다. 
-방법: strstr("문자열","찾을 문자열") 

*strrchr() 
-용도: 문자열이 마지막으로 나타나는 위치부터 끝까지 반환한다. 
-방법: strrchr("문자열","찾을문자열") 

*strpos() 
-용도: 문자열 대신 처음으로 나타나는 위치를 숫자로 반환, 이때 숫자는 0부터 시작. 
-방법: strpos("문자열","찾을 문자열") 

*strrpos() 
-용도: 찾고자 하는 문자열에서 마지막으로 나타나는 위치를 반환한다. 
-방법: strrpos("문자열", "찾을 문자열") 

*strlen() 
-용도: 문자열의 길이를 반환한다. 
-방법: strlen($변수명) 또는 strlen("문자열") 

*strtolower() 
-용도: 알파벳 대문자를 모두 소문자로 바꾸어 반환한다. 
-방법: strtolower("문자열") 

*strtoupper() 
-용도: 알파벳 대문자를 소문자로 바꾸어 반환한다. 
-방법: strtoupper("문자열") 

*ucfirst() 
-용도: 알파벳 문자열의 첫 글자를 대문자로 반환한다. 
-방법: unfirst("문자열") 

*ucwords() 
-용도: 알파벳 문자열의 첫 글자를 대문자로 반환한다. 
-방법: ucwords("문자열") 

*strrev() 
-용도: 인자로 전달한 문자열의 순서를 역전시킨다. 
-방법: strrev("문자열") 

*strtr() 
-용도: 문자열에서 변경하고자 하는 문자열을 변경할문자열로 1:1 변경해준다. 
-방법: strtr("문자열","변경하고자하는 문자열","변경할 문자열") 

*str_replace 
-용도: 문자열 중에 변경하고자 하는 문자열을 찾아 변환한다. 
-방법: str_replace("찾을 문자열","변경할 문자열","문자열 원본") 

*chop() 
-용도: 문자열의 뒷부분의 공백 문자를 제거한 후 반환한다. 
-방법: chop("문자열") 

*trim() 
-용도: 문자열의 앞과 뒤에 있는 공백을 제거한 후 문자열을 반환한다. 
-방법: trim("문자열") 

*quotemeta() 
-용도: 메타문자 앞에 역슬래시를 붙인다. 
-방법: quotemeta() 

*ord/chr() 
-용도: ord()함수는 문자열에서 첫번째 문자에 아스키코드값을 반환하고 chr()함수는 아스키함수에 해당하는 문자를 반환한다. 
-방법: ord("문자열"), chr("아스키값") 

*parse_str() 
-용도: get방식과 같은 형태의 변수형을 변수와 값으로 받을 수 있게 해준다. 
-방법: parse_str(변수명) 

3.파일관련함수 

*fopen() 
-용도: 로컬경로의 파일이나 url경로의 파일을 읽기 모드나 쓰기 모드로 열어준다. 
-방법: fopen("절대경로명/파일", "모드")또는 fopen("url주소", "모드") 

*fclose() 
-용도: fopen으로 열린 파일을 닫는다. 
-방법: fclose($fp) 

*fread() 
-용도: 파일포인터가 가리키는 파일의 내용을 지정한 크기만큼 읽어 들인다. 
-방법:fread($fp,"읽어들일 바이트") 

*feof() 
-용도: 현재 파일 포인터가 파일의 끝인지를 알려주는 함수 
-방법: feof($fp) 

*fgets() 
-용도: 파일을 읽어올때 한줄씩 읽어온다. 
-방법: fgets($fp,"읽어들일 바이트") 

*fputs() 
-용도: 파일을 a 또는 w 모드로 열어 문자열을 파일에 기록한다. 
-방법: fputs($fp, "문자열") 

*fwirte() 
-용도: 파일을 기록한다. 
-방법: fwrite($fp, "문자열") 

*fpassthru() 
-용도: 파일포인터의 현재 위치에서 파일의 끝까지 읽어 들이도록 한다. 
-방법: fpassthru($fp) 

*readfile() 
-용도: fpassthru와 비슷하지만 fopen()없이 직접 바로 파일을 읽어들일 수 있다. 읽어들인 파일의 절대경로를 포함한다. 
-방법: readfile("파일의 절대경로 또는 상대경로/파일명") 

*fgetc() 
-용도: 파일로부터 한문자를 읽어들인다. 
-방법: fgetc($fp) 

*filesize() 
-용도: 파일의 크기를 바이트수로 반환한다. 
-방법: filesize("파일경로/파일명") 

*file_exists() 
-용도: 파일이름으로 지정한 파일이 존재하는지 검사한다. 
-방법: file_exists("파일경로/파일명") 

*is_file() 
-용도: 파일이름으로 지정한 이름이 파일면 true를 반환한다. 
-방법: is_file("파일경로/파일명") 

*is_dir() 
-용도: 파일이름으로 지정한 이름이 디렉토리일경우 true를 반환한다. 
-방법: is_dir("파일경로/파일명") 

*is_link() 
-용도: 파일이름으로 지정한 이름이 심볼릭 링크일경우 true를 반환한다. 
-방법: is_link("파일경로/파일명") 

*is_escutable() 
-용도: 파일이름으로 지정한 파일이 실행 가능한 파일이면 true를 반환한다. 
-방법: is_excutable("파일경로/파일명") 

*is_readable() 
-용도: 파일이름으로 지정한 파일이나 디렉토리가 읽기 가능한경우 true를 반환한다 
-방법: is_readable("파일경로/파일명 또는 디렉토리명") 

*is_writeable() 
-용도: 파일이름으로 지정한 파일이나 디렉토리가 쓰기 가능한 경우 true를 반환한다 
-방법: is_writeable("파일경로/파일명 또는 디렉토리명") 

*copy() 
-용도: 파일을 복사하고 제대로 수행이 되면 true를 반환한다. 
-방법: copy("파일경로/복사할 파일명", "파일경로/복사된 파일명") 

*rename() 
-용도: 파일을 이름을 바꾼다. 제대로 수행이 되면 true를 반환한다. 
-방법: rename("파일경로/변경할 파일명", "파일경로/변경후 파일명") 

*unlink() 
-용도: 파일을 삭제한다. 제대로 수행될 경우 true를 반환한다. 
-방법: unlink("파일경로/삭제할 파일명") 

*mkdir() 
-용도: 디렉토리를 생상하고 동시에 권한도 함께 지정할 수 있다. 
-방법: mkdir("경로/디렉토리명") 

*rmdir() 
-용도: 디렉토리 삭제 
-방법: rmdir("경로/디렉토리명") 

*basename() 
-용도: 경로명과 파일명을 받아 파일명만을 반환한다. 
-방법: basename("파일경로/파일명") 

*dirname() 
-용도: 경로명과 파일명을 받아 경로명만을 반환한다. 
-방법: dirname("파일경로/파일명") 

*file() 
-용도: 줄단위로 읽어서 각 줄으 문자열을 배열로 하여 반환한다. 
-방법: dirname("파일경로/파일명") 

4.디렉토리 관련함수 

*opendir() 
-용도: 지정한 디렉토리에 대한 핸들을 얻는다. 
-방법: opendir("디렉토리 경로") 

*closedir() 
-용도: opendir()함수 호출로 열어둔 디렉토리에 대한 핸들을 닫는다. 
-방법: closedir($od) 

*readdir() 
-용도: 디렉토리에 있는 모든 디렉토리 및 파일들의 이름을 읽어 배열의 형태로 반환 
-방법: readdir($od) 

*rewinddir() 
-용도: 디렉토리 핸들의 포인터 위치를 제일 처음으로 되돌린다. 
-방법: rewinddir($od) 

*chdir() 
-용도: 지저한 디렉토리로 바꾼다. 
-방법: chdir("경로명/디렉토리명") 

*dir() 
-용도: 디렉토리 관련 함수를 사용할 수 있는 클래스 
-방법: dir("경로/디렉토리명") 

5. URL관련함수 

*parse_url() 
-용도: url을 입력하면 해당 url에 대한 정보를 연관 배열로 저장하여 반환 
-방법: parse_url("URL주소") 

*urlencode() 
-용도: 데이터를 url인코딩해준다. 
-방법: urlencode("문자열") 

*urldecode() 
-용도: url을 통해 넘어온 값 중 인코딩된 문자열을 디코딩한다. 
-방법: urldecode("문자열") 

6.변수 및 수학 관련함수 

*gettype() 
-용도: 변수형을 반환한다. 
-방법: gettype("변수명") 

*settype() 
-용도: 변수형을 변환한다. 
-방법: settype("변수명", "변수타입") 

*intval() 
-용도: 변수값을 정수형 값으로 변환 
-방법: intval("변수값") 

*doubleval() 
-용도: 변수값을 실수형 값으로 변환한다. 
-방법: doubleval("변수값") 

*strval() 
-용도: 변수를 문자형 값으로 변환한다. 
-방법: strval("변수값") 

*isset() 
-용도: 변수가 존재하는지 확인한다. 
-방법: isset("변수명") 

*unset() 
-용도: 변수를 삭제한다. 
-방법: unset("변수명") 

*empty() 
-용도: 변수에 값이 존재하는지 확인하여 없으면 true를 있으면 false를 반환한다. 
-방법: empty("변수명") 

*is_array() 
-용도: 변수의 형이 배열인지 확인한다. 
-방법: is_array("변수명") 

*is_double 
-용도: 변수의 형이 더블형인지 확인한다. 
-방법: is_double("변수명") 

*abs() 
-용도: 변수의 절대값을 반환 
-방법: abs("변수명") 

*round() 
-용도: 변수의 반올림한 값을 구한다. 
-방법: round("변수명") 

*ceil() 
-용도: 변수 값의 무조건 올림 값을 구한다. 
-방법: ceil("변수명") 

*floor() 
-용도: 변수값의 무조건 내림 값을 구한다. 
-방법: floor("변수명") 

*pow() 
-용도: 인자 값만큼 제곱승 한 값을 구한다. 
-방법: pow("변수명", "제곱할 횟수") 

*max & min() 
-용도: 최대값과 최소값을 구한다. 
-방법: max("숫자값", "숫자값",...) min("숫자값", "숫자값",...) 

7.기타 알아두어야 할 함수 

*count()/sizeof() 
-용도: 배열의 크기를 구한다. 
-방법: count("변수명") sizeof("변수명") 

*each()/list() 
-용도: 배열의 내용을 출력할때 사용한다. 
-방법: each("배열변수명"), list("배열의 인자를 받을 변수명", "배열의 인자를 받을 변수명"...) 

*end()/next()/reset() 
-용도: 현재 배열의 포인터를 끝이나 다음으로 이동시킨다. reset은 배열포인터를 다시 처음으로 되돌린다. 
-방법: end("배열변수명") next("배열변수명") 

*exec() 
-용도: 리눅스 서버의 내부 명령어를 사용하게 한다. 
-방법: exec("리눅스명령어", "결과를 저장할 변수명" ,"에러발생시 저장할 변수명") 

*number_format() 
-용도: 천단위마다 ","를 붙여준다. 
-방법: number_format("변수명", "소수점자리수", "소수점 표시마크변경", "천단위 표시 마크변경") 

*show_source() / highlight_string() 
-용도: php파일의 소스를 보여준다. 
-방법: show_source("경로명/파일명") highlight_string("변수명") 

*uniqid() 
-용도: 유일한 아이디 값을 만들어준다 
-방법: uniqid() 

// koreaPHP

//////기관추적///////

$ipa='211.192.197.130'; 
//ip만 바꾸어 주세요.. 딴건 수정할 필요 없는 듯..하네요..참고로 아이피는 한국통신..유동아이피라 출력이 않 될 수 도 있습니다..

$find = array("연결 ISP명","기 관 명"); 

$contents = file("http://whois.nic.or.kr/whois/webapisvc?VALUE=".$ipa);

foreach($contents as $line => $value) {

if(eregi("^".$find[0]."",$value)) 
{ $isp=substr($value,21);} //21

if(eregi("^".$find[1]."",$value)) 
{ $serv=substr($value,16);} //16

}

$server=trim($isp.$serv); //통신업체

switch($server){
case "KORNET":
$host="한국통신";
break;

case "한국통신-초고속국가망":
$host="한국통신";
break;

case "주식회사 두루넷":
$host="두루넷";
break;

case "THRUNET":
$host="두루넷";
break;

case "HANANET":
$host="하나로통신";
break;

case "하나로통신(주)":
$host="하나로통신";
break;

case "SHINBIRO":
$host="온세통신";
break;

case "(주)데이콤":
$host="데이콤";
break;

case "데이콤초고속국가망":
$host="데이콤";
break;

case "PUBNETPLUS":
$host="PUBNET";
break;

case "한국과학기술정보연구":
$host="한국과학기술정보연구원";
break;


default:
$host=$server;
break;
}

echo $host; // 방문자 isp 출력
////////기관추적끝/////////

?>

'Coding' 카테고리의 다른 글

[PHP] 한글 문자열 자르는 함수  (0) 2017.01.07
자주 사용하는 PHP 함수  (0) 2017.01.07
불량 단어 필터링  (0) 2017.01.07
절대경로 표현하기  (0) 2017.01.07
색을 랜덤하게 뽑아서 출력합니다.  (0) 2017.01.07

ex) $res[subject] => {바보,미워}

1. 등록된 불량단어의 수를 알아온다.

$arr = explode(",", $res[subject]); 
$bad_word_count=0;
while(list($key, $val) = each($arr) ) {
$bad_word_count++; 
}

2. 불량단어를 바꾼다.
$html_use_temp=$res[subject];
for ($bad_temp=0; $bad_temp<$bad_word_count; $bad_temp++)
{
$res_temp=str_replace($arr[$bad_temp], ♡, $html_use_temp); // 내용중 불량단어 ♡로 치환
$html_use_temp=$res_temp;
}


제로보드 같은 경우 아예 글이 써지지 않지만 이렇게 하면
글을 올라가고 특정 단어는 다른 단어로 바꿀수 있어 좀더 좋은것 같더군요.

예) 
원문 : 넌 바보야 영원히 미워해!!!
변경 : 넌 ♡야 영원히 ♡해!!!

// 절대경로 알아내기 
global $PHP_SELF; 

$thisfilename=basename(__FILE__); 
$temp_filename=realpath(__FILE__); 
if(!$temp_filename) $temp_filename=__FILE__; 
$osdir=eregi_replace($thisfilename,"",$temp_filename); 
unset($temp_filename); 

$virdir = eregi_replace($thisfilename,"",$PHP_SELF); 


echo "현재 디렉토리의 절대경로 : ".$osdir."
"; 
echo "현재 디렉토리의 상대 경로 주소 : ".$virdir."
"; 

?>


먼저 메모장을 꺼내셔셔 위 소스를 그대로 복사해서 붙여넣기 하세요.
그리고 원하는 이름명으로 "이름.php" 형식으로 저장하세요. (*저는 "이름.php"로 설명하겠습니다.)
그리고는 계정에 접속해서 절대경로를 알아고자 하는 곳에다 아까 저장하신 "이름.php"를 업로드 하세요.

그런 다음 해당 "이름.php"로 웹브라우져 상에서 접속해 보세요.
예: http://계정주소/이름.php

그럼 아래와 같이 나올 것입니다.

현재 디렉토리의 절대경로 : 
현재 디렉토리의 상대 경로 주소 : 


제로보드의 경우 제로보드 폴더안에다 "이름.php"를 넣으면 되겠죠^^ 

* "이름.php"는 파일명을 바꾸셔도 무방합니다.
* 절대 경로 아래 나오는 상대경로는 절대경로와는 다른 것입니다. 

+ Recent posts