$_SERVER['DOCUMENT_ROOT'] //FTP의 폴더 첫 시작 위치
$_SERVER['REQUEST_TIME'] //요청 시작의 유닉스 시간
$_SERVER['REQUEST_TIME_FLOAT'] //마이크로 초의 정밀도를 갖는 쿼리의 시작 타임스템프
$_SERVER['HTTP_ACCEPT'] //ACCEPT의 헤더내용 : 요청값이 있을경우
$_SERVER['HTTP_ACCEPT_CHARSET'] //현재 요청의 Accept-Charset 헤더 내용 (있는 경우). 예 : iso-8859-1, *, utf-8
$_SERVER['HTTP_ACCEPT_ENCODING'] //현재 요청  Accept-Encoding 헤더 내용 (있는 경우). 예 : ' gzip '.
$_SERVER['HTTP_ACCEPT_LANGUAGE'] //Accept-Language 헤더의 내용 : 현재 요청의 내용 (있는 경우). 예 : ' fr '.
$_SERVER['HTTP_CONNECTION'] //현재 요청  Connection 헤더 내용 (있는 경우). 예 : ' Keep-Alive '.
$_SERVER['HTTP_HOST'] //호스트 헤더의 내용 : 현재 요청의 내용 (있는 경우).
$_SERVER['HTTP_USER_AGENT'] //현재 요청  User_Agent 헤더 내용 (있는 경우).
$_SERVER['HTTPS'] //
스크립트가 HTTPS 프로토콜을 통해 호출 된 경우 비어 있지 않은 값으로 설정합니다.
$_SERVER['REMOTE_ADDR'] //현재 페이지를 요청하는 클라이언트의 IP 주소입니다.
$_SERVER['REMOTE_HOST'] //현재 스크립트를 읽는 호스트의 이름/
$_SERVER['REMOTE_PORT'] //웹 서버와 통신하기 위해 클라이언트 시스템에서 사용하는 포트.
$_SERVER['REMOTE_USER'] //인증 된 사용자.
$_SERVER['REDIRECT_REMOTE_USER'] //요청이 내부적으로 리디렉션 된 경우 인증 된 사용자
$_SERVER['SCRIPT_FILENAME'] //실행중인 스크립트가 들어있는 파일의 절대 경로.
$_SERVER['SERVER_ADMIN'] //구성 파일의 SERVER_ADMIN 지정 문 (Apache의 경우)에 지정된 값.
$_SERVER['SERVER_PORT'] //통신에 사용되는 서버 시스템의 포트. 기본적으로 "80" 입니다.
$_SERVER['SERVER_SIGNATURE'] //사용 가능한 경우 서버 페이지에 추가되는 문자열입니다.
$_SERVER['PATH_TRANSLATED'] // 서버가 번역 가상 경로 -> real을 만들면 현재 스크립트까지 파일 시스템의 경로
$_SERVER['SCRIPT_NAME'] //현재 스크립트의 이름을 포함합니다. 이것은 페이지가 스스로를 호출해야 할 때 유용합니다. 
$_SERVER['REQUEST_URI'] //이 페이지에 액세스하기 위해 제공된 URI입니다. 예 : ' /index.html '.
$_SERVER['PHP_AUTH_DIGEST'] //HTTP 다이제스트 인증을 사용할 때 변수는 "Authorization" 헤더에 정의되어 있습니다.
$_SERVER['PHP_AUTH_USER'] //HTTP 인증을 사용할 때이 변수는 사용자가 제공 한 사용자로 설정됩니다.
$_SERVER['PHP_AUTH_PW'] //HTTP 인증을 사용할 때이 변수는 사용자가 제공 한 암호로 설정됩니다.
$_SERVER['AUTH_TYPE'] //HTTP 인증을 사용할 때이 변수는 식별 유형으로 설정됩니다.
$_SERVER['PATH_INFO'] //현재 스크립트를 실행하는 파일 이름에 대해 클라이언트가 제공 한 경로 이름에 대한 정보를 포함






<?php 
error_reporting(0); 

$db_info['host']='localhost';
$db_info['database']='데이터베이스 이름';
$db_info['user']='MYSQL 아이디';
$db_info['password']='MYSQL 비밀번호';

$db_connect=mysql_connect($db_info['host'],$db_info['user'],$db_info['password']) or die(mysql_error()); 
mysql_select_db($db_info['database']) or die('DB 선택 실패'); 

if(!$db_connect){ 
    echo '[연결실패] : '.mysql_error().'<br>';  
    die('MySQL 서버에 연결할 수 없습니다.'); 
} 
?>




$data = array(
    array('first', 3),
    array('second', 1),
    array('third', 2)
);

$key_row = array();

foreach ($data as $key => $row) { 
    //$key_row[$key]  = $row['정렬하고 싶은 칼럼']; 
    $key_row[$key]  = $row[1]; 
}

array_multisort($key_row, SORT_DESC, $data);

foreach ($data as $key => $row) { 
    echo $key." = ".$row."<br>";
}




업로드 형식은 무조건 csv 형식으로 업로드를 해야한다.
엑셀 최대 갯수인 100만건 정도 올라가고
올라가는 시간은 125MB 기준 5분정도 소요된다.
열의 갯수가 짧을 수록 더 빨리 올라간다.
필자는 열의 갯수가 20개 정도 행의 갯수가 많게는 100만개 적게는 80만개정도 되는 데이터 양이다.


HTML

<form action="처리페이지.php" method="post" enctype="multipart/form-data"> 
    <table> 
        <tr> 
            <td><input type="file" name="upfile"></td> 
            <td><input type="submit" value="업로드"></td> 
        </tr> 
    </table> 
</form>

처리 페이지

error_reporting(E_ALL); 
ini_set('memory_limit',-1); // 엑셀 가져오다가 뻗을 수 있으므로 메모리는 무한대로~ 
set_time_limit(0);

$UpFile = $_FILES["upfile"]; 

$UpFileName = $UpFile["name"]; 

$UpFilePathInfo = pathinfo($UpFileName); 
// 파일 확장자
$UpFileExt = strtolower($UpFilePathInfo["extension"]); 

//파일 확장자 체크
if($UpFileExt != "csv"){ 
echo "<script>alert('csv형식의 데이터만 업로드 가능합니다.'); history.back();</script>"; 
} 

 
$upfile_path = "경로/".$UpFileName; 

//temp에 임시 파일이 있는지 체크
if(is_uploaded_file($UpFile["tmp_name"])) { 

    //파일 업로드
    $result = move_uploaded_file($UpFile["tmp_name"], $upfile_path); 

    //없을 경우 오류 출력
    if(!$result){ 
        echo "업로드된 파일을 옮기는 중 에러가 발생했습니다."; 
        exit; 
    } 
} 

//한글 깨짐 방지
setlocale(LC_CTYPE, 'ko_KR.eucKR'); 
$row = 1; 

if(($handle = fopen($upfile_path, "r")) !== FALSE) { 
    //행의 갯수 만큼 while fgetcsv로 최대 출력 글자 체크
    while (($data = fgetcsv($handle, 1000000, ",")) !== FALSE) { 
        //열의 갯수가 몇개인지 체크
        $num = count($data); 

        //열 첫번째는 제외 (주로 구분 쪽 제거)
        if($row==1){ 
            $row++; 
        }else{ 
            $val = array(); 
            //열을 배열로 쪼개서 인코딩에 맞게 변환 후 $val에 삽입
            for ($c=0; $c < $num; $c++) { 
                    $val[] = iconv("euc-kr","utf-8", $data[$c]); 
            }
            echo $val[0];
        }
    }
}






날짜 데이터를 받아온 후에

$today_y = date('Y'); 
$today_m = date('m'); 
$today_d = date('d');

$check_week = $today_y ."-".$today_m ."-".$today_d;

$mk_date = strtotime($check_week); 
$today_week = date("W", $mk_date);

하면 이번년도의 몇주차인지 나옴.

이번 년도의 총 주차를 구하려면

$total_week = date($today_y."-12-31"); 
$total_date = strtotime($total_week);  

$total_week = date("W", $total_date); 

로 구하면 이번년도의 총 주차를 구할수 있음.






PHPMailer.zip

글을 들어가기에 앞서 필자는 naver의 smtp서버를 이용했고,
네이버 smtp 서버가 열려있어야한다.

require_once($_SERVER['DOCUMENT_ROOT'].'/common/lib/PHPMailer/PHPMailerAutoload.php');

$mail = new PHPMailer(); 

$mail->ContentType = "text/html";  

//전송시 한글 깨짐 방지
$mail->Charset = 'UTF-8'; 
$mail->SMTPSecure = 'ssl'; 

$mail->isSMTP(); 
$mail->SMTPDebug = 2; 

$subject = "제목";
$mail_from  = "보내는 사람";
$mail_to  = "받는 사람";


//제목과 보내는 사람 이름 등등은 직접적으로 인코딩 변경
$subject = "=?UTF-8?B?".base64_encode($subject)."?="."\r\n"; 
$mail_from = "=?UTF-8?B?".base64_encode($mail_from )."?="."\r\n"; 
$mail_to = "=?UTF-8?B?".base64_encode($mail_to)."?="."\r\n"; 

$message =  "보내는 내용";
  
$mail->Debugoutput = 'html'; 
  
$mail->Host = 'smtp.naver.com'; 
  
$mail->Port = 465; 
$mail->SMTPAuth = true; 
  
$mail->Username = "Naver Email"; 
  
$mail->Password = "Naver Password"; 
  
$mail->setFrom('보내는 사람 이메일', $mail_from); 
  
$mail->addReplyTo('보내는 사람 이메일', $mail_from); 
  
$mail->addAddress('받는 사람 이메일', $mail_to); 
  
$mail->Subject = $subject; 
  
$mail->msgHTML($message, dirname(__FILE__)); 
  
$mail->AltBody = 'This is a plain-text message body'; 
  
if (!$mail->send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
}

//만약 Charset을 변경해도 내용 쪽 한글이 깨질 경우
class.phpmailer.php 파일을 열어서

public $CharSet = 'iso-8859-1';

이 코딩을

public $CharSet = 'UTF-8';

이렇게 변경해주면 해결된다.

+ Recent posts