$contents = htmlspecialchars($contents);

html을 그대로 복사해서 가져온 것이거나 에디트에서 html 코드를 사용했으면
그걸 DB에서 불러오는걸 htmlspecialchars 코드로 불러오면 된다.






가끔 나누거나 곱할 경우
0과 곱하거나 나누경우에 NaN이 뜰때가 있다.

그럴때 해결방법이다.

$NaN_check = 0;

if(is_nan($NaN_check)){
    $NaN_check = 0;
}

으로 해주면 간단히 해결된다.

만약에 NUMBER_FORMAT을 사용해서 초기화 해준 다음
출력했을 때 nan 으로 소문자로 뜨는 경우는 그 값에 문자로 들어간 것이기 때문에

if(is_nan($NaN_check) || $NaN_check === 'nan'){
    $NaN_check = 0;
}

이렇게 체크해주면 된다.






모바일 접속시 PC환경인지 모바일 환경인지 체크하는 소스이다
<?php 
$mobilechk = '/(iPod|iPhone|Android|BlackBerry|SymbianOS|SCH-M\d+|Opera Mini|Windows CE|Nokia|SonyEricsson|webOS|PalmOS)/i';  

// 모바일 접속인지 PC로 접속했는지 체크합니다. 
if(preg_match($mobilechk, $_SERVER['HTTP_USER_AGENT'])) { 
    echo "<script>location.href='/mobile/mobile_login.php';</script>"; 
}

'PHP' 카테고리의 다른 글

[PHP] html 코드 그대로 출력  (0) 2017.11.27
[PHP] NaN 뜰때 해결방법  (0) 2017.11.27
[PHP] define과 defined의 차이  (0) 2017.11.27
[PHP] PHPExcel을 이용해서 엑셀 다운로드  (0) 2017.11.27
[PHP] $_SERVER[''] 정리  (0) 2017.11.27



define() 함수 : 상수를 정의한다. 상수 이름과 상수값을 인수로 넣어주면 된다.
 
<?php define("변수", "변수값"); ?>
 
defined() 함수 : 변수가 정의되어 있는지 검사한다.
 
외부에서 직접 URL을 입력하여 해당 페이지로 접근하려고 할 때 이를 막는데 사용할 수 있다.
 
defined() 함수를 이용해 값이 정의되어 있을 때만 해당 페이지를 실행할 수 있게 한다.

'PHP' 카테고리의 다른 글

[PHP] NaN 뜰때 해결방법  (0) 2017.11.27
[PHP] 모바일 접속 체크  (0) 2017.11.27
[PHP] PHPExcel을 이용해서 엑셀 다운로드  (0) 2017.11.27
[PHP] $_SERVER[''] 정리  (0) 2017.11.27
[PHP] mySql 연결하기  (0) 2017.11.27



PHPExcel을 사용해서 엑셀을 다운로드 하는 방법이다.
require_once($_SERVER['DOCUMENT_ROOT']."/lib/Classes/PHPExcel.php");

 //한글 깨짐 방지
header("Content-Type:text/html;charset=utf-8");

//PHPExcel class 로드
$objPHPExcel = new PHPExcel();

$objPHPExcel->getProperties() ->setCreator("작성자") 
                                                    ->setLastModifiedBy("최종 수정자") 
                                                    ->setTitle("타이틀") 
                                                    ->setSubject("주제") 
                                                    ->setDescription("설명") 
                                                    ->setKeywords("키워드") 
                                                    ->setCategory("라이센스");
//시트이름 변경 
$objPHPExcel->setActiveSheetIndex(0)->setTitle('변경 시트 이름');

//셀 가로 크기 설정 ( 설정은 되나 0.45 정도 적게 적용됨 )
$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(4);

//셀 세로 높이 설정 ( 가로와 다르게 정확히 적용 됨 )
$objPHPExcel->setActiveSheetIndex(0)->getRowDimension(1)->setRowHeight(21);

//글자 굵게 
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getFont()->setBold(true);

//글자 사이즈 
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getFont()->setSize(16);

//글자색 
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getFont()->getColor()->setARGB("FFFFFFFF");

//셀값 입력 
$objPHPExcel->setActiveSheetIndex(0)->setCellValue("A1", "제목")
                                                                ->setCellValue("A2", 12345); // 여러개를 추가하려면 이렇게 하면 된다.

//숫자 형 변환 
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A1:A2')->getNumberFormat()->setFormatCode('#,##0');

//가로정렬 
// 중앙 정렬
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
// 오른쪽 정렬
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); 
// 왼쪽 정렬
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

//세로정렬 
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A1:S343')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);


//배경색 
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A1:A2')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB("FFD9D9D9");


//이미지 추가
$path = "이미지경로";
$objDrawing = new PHPExcel_Worksheet_Drawing(); 
$objDrawing->setName('Photo_3'); 
$objDrawing->setDescription('Photo_3'); 
$objDrawing->setPath($path); 
$objDrawing->setResizeProportional(true); 
$objDrawing->setWidth(400);  // 이미지 크기
$objDrawing->setOffsetX(35);  // 이미지가 시작할 위치를 퍼센트로 적용 셀의 크기에 가로가 35%만큼 이동해서 시작
$objDrawing->setOffsetY(5);  // 이미지가 시작할 위치를 퍼센트로 적용 셀의 크기에 세로가 5%만큼 이동해서 시작
$objDrawing->setCoordinates("A1"); 
$objDrawing->setWorksheet($objPHPExcel->setActiveSheetIndex(1));


//시트 생성 및 이름 지정 
$objPHPExcel->createSheet();  
$objPHPExcel->setActiveSheetIndex(1)->setTitle('새로운 시트 이름');


추가한 시트는 setActiveSheetIndex 여기의 번호를 올리면 됨.



'PHP' 카테고리의 다른 글

[PHP] 모바일 접속 체크  (0) 2017.11.27
[PHP] define과 defined의 차이  (0) 2017.11.27
[PHP] $_SERVER[''] 정리  (0) 2017.11.27
[PHP] mySql 연결하기  (0) 2017.11.27
[PHP] 이중 배열 정렬하는 방법  (0) 2017.11.27



$_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); 

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



+ Recent posts