레이블이 PHP인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PHP인 게시물을 표시합니다. 모든 게시물 표시

22. 1. 13.

웹페이지 페이지 이동(?) 갱신( Javascript History Api )

페이지 이동시 부드럽게 이동하기 위한 방법(=한페이지에서 변화를...)
Javascript 파일(/main.js)
// 뒤로가기시 페이지 새로고침
window.onpopstate = function(event) {
	var np = document.location
	BodyClassLoad(np);
}
// 페이지 시작시 a태그의 href 조정(타 도메인일경우 그대로 두고 같은 도메인일 경우 function 으로 처리되도록..)
window.onload = function(){
	var abtn = document.querySelectorAll("a");
	for(var i = 0; i < abtn.length; i++){
		const loc = abtn[i].getAttribute("href");
		if(loc.indexOf("://") == -1){
			MoveHrefClick(abtn[i],loc);
		}else{
			if(loc.indexOf("://"+window.location.origin) > -1){
				MoveHrefClick(abtn[i],loc);
			}
		}
	}
}
// body class 조정 및 section 의 내용 교체
function BodyClassLoad(url){
	var nc = "";
	var mhref = "";
	if(url.origin != undefined){
		nc = url.href.substring(url.origin.length,url.origin.length+url.href.length);
	}else{
		nc = url;
	}
	mhref = nc;
	if(nc.substring(0,1)=="/"){
		nc = nc.substring(1,nc.length);
	}
	if(nc.substring(nc.length-1,nc.length)=="/"){
		nc = nc.substring(0,nc.length - 1);
	}
	nc = nc.replace("/"," ");
	document.querySelector("body").className = "BodyTag "+ nc;
	var xhr = new XMLHttpRequest(); 
	var loadurl = mhref;
	if(loadurl.indexOf("?") == -1){
		loadurl += "/main.php";
		loadurl = loadurl .replace("//","/");
	}else{
        // PHP 페이지를 불러오도록 상황에 따라 변경
		loadurl = loadurl .replace("?","main.php?");
	}
	xhr.open('GET', loadurl, true); 
	xhr.send(); 
	xhr.onload = function(){ 
		if (xhr.status == 200) {
			document.querySelector("section").innerHTML = xhr.response;
		} else { 
		// 실패 
		} 
	}
}
// a태그 href 비활성화 및 history 에 이전주소로 기록
function MoveHrefClick(el,href){
	el.removeAttribute("href");
	el.onclick = function(){
		history.pushState({page: 1}, document.title, href);
		BodyClassLoad(href)
		
	}
}

PHP 페이지(/index.php, /A/index.php) : 복붙을 위해...
<?php
    $relative_path = preg_replace("`\/[^/]*\.php$`i", "/", $_SERVER['PHP_SELF']);
    $pathNode = explode( '/', $relative_path );
    $bodyClass = "BodyTag";
    for( $i = 0;$i < sizeof($pathNode); $i++){
        if($pathNode[$i] != ""){
            $bodyClass .= " ".$pathNode[$i];
        }
    }
    $path1 = "Order";
	$path2 = "";
	$path3 = "";
    if($bodyClass != "BodyTag"){
        if(sizeof($pathNode)>1){
            $path1 = $pathNode[1];
        }
        if(sizeof($pathNode)>2){
            $path2 = $pathNode[2];
        }
		if(sizeof($pathNode)>3){
            $path3 = $pathNode[3];
        }
    }else{
		$bodyClass .= " ".$path1;
	}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script src="/main.js" defer></script>
</head>
<body class="<?php echo $bodyClass; ?>">
<header><?php include $_SERVER["DOCUMENT_ROOT"]."/header.html"; ?></header>
<section><?php include $_SERVER["DOCUMENT_ROOT"].$relative_path."main.php"; ?></section>
<footer><?php include $_SERVER["DOCUMENT_ROOT"]."/footer.html"; ?></footer>
</body>
</html>

페이지구성(/header.html)
<a href="/">Home</a>
<a href="/A/">A</a>

PHP 구성(/main.php)
<h2>Home</h2>

PHP 구성(/A/main.php)
<h2>A</h2>

19. 12. 5.

GCP PHP + MariaDB + Nginx + vsftpd 구성

1. 프로젝트 생성
- 프로젝트명 : server
- 프로젝트 선택 : 전체 -> server

2. VM인스턴스 생성
- 메뉴 -> VM인스턴스 -> 만들기
- 이름 : mysite
- 머신유형 : 초소형(공유 vCPU 1 개)
- 부팅 디스크 : 변경 -> OS이미지 -> CentOS 8
- http 트래픽허용 체크
- 만들기

3. VM 인스턴스 목록
- SSH 클릭(인증되며 까만창 뜸)

4. 프롬프트 창내의 명령실행
- 관리자 접속
sudo su -
- 업데이트 및 다운로드,압축풀기 설치
yum update -y
yum install -y wget unzip
- FTP 용 계정생성 및 비밀번호 생성
useradd myid
passwd myid
- 사이트 경로 생성 및 권한 추가
mkdir /home/myid/mysite
chmod +x /home/myid/mysite
- PHP + 모듈 설치
dnf install -y dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf module list php
dnf module reset php
dnf module install -y php:remi-7.4
dnf install -y php php-fpm php-mysql php-gd php-common php-cli php-json php-opcache php-devel php-imagick php-mbstring php-mcrypt php-mysqlnd php-pear php-xml php-xmlrpc php-soap php-dba php-bcmath php-pdo php-ldap
- vi 편집기("insert 키" : 편집 및 수정, "Escape 키" : 보기모드, ":wq" : 저장, ":q" : 저장하지않고 닫기, ":/검색어" : 검색어 검색 )
- 편집기로 PHP 설정파일(/etc/php.ini) 설정 명령
vi /etc/php.ini
- php.ini 변경내용(검색해서 해당 값만 변경)
cgi.fix_pathinfo = 0
allow_url_fopen = Off
expose_php = Off
display_errors = Off
- 편집기로 php-fpm 설정파일(/etc/php-fpm.d/www.conf) 수정
vi /etc/php-fpm.d/www.conf
- www.conf 변경내용 1. apache를 myid로 교체(apache로 검색)
user = myid
group = myid
- www.conf 변경내용 2. 주석제거(nobody로 검색)
listen.owner = nobody
listen.group = nobody
- www.conf 변경내용 3. listen 의 /run/php-fpm/www.sock을 127.0.0.1:9000으로 수정
listen = 127.0.0.1:9000
- Nginx 설치
wget http://nginx.org/packages/mainline/centos/8/x86_64/RPMS/nginx-1.17.6-1.el8.ngx.x86_64.rpm
yum localinstall -y nginx-1.17.6-1.el8.ngx.x86_64.rpm
- Nginx 설정파일 수정
vi /etc/nginx/nginx.conf
- Nginx 설정파일 수정내용(http{}안에 추가)
server_tokens off;
- 방화벽 설정(http,https,ftp,database(MariaDB))
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
- Nginx 기본 설정 삭제
rm -f /etc/nginx/conf.d/default.conf
- Nginx 기본 설정 만들기
vi /etc/nginx/conf.d/default.conf
- Nginx 기본 설정 만들기 내용(아래내용을 복사, 붙여넣기)
server {
    listen       80;
    server_name  localhost;
    charset utf-8;
    root   /home/myid/mysite;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        index index.php index.html index.htm;
    }
    error_page  404              /404.html;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /home/myid/mysite;
    }
    location ~ \.php(?:$|/) {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
- php-fpm, nginx 재시작
systemctl start php-fpm nginx
systemctl enable php-fpm nginx
systemctl reload nginx
- ftp 프로그램인 vsftpd 설치
dnf -y install vsftpd
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_orig
grep -v ^# /etc/vsftpd/vsftpd.conf_orig > /etc/vsftpd/vsftpd.conf
- vsftpd 설정파일 삭제
rm -f /etc/vsftpd/vsftpd.conf
- vsftpd 설정파일 생성
vi /etc/vsftpd/vsftpd.conf
- vsftpd 설정파일 내용입력
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
pasv_enable=Yes
pasv_max_port=40000
pasv_min_port=40000
- SELinux 권한에서 차단되는 경우가 있으므로 처리
setenforce 0
- SELinux 권한에서 차단되는 경우가 있으므로 설정도 편집
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- ftp 불가한 아이디 목록1에서 편집(root 제거)
vi /etc/vsftpd/ftpusers
- ftp 불가한 아이디 목록2에서 편집(root 제거)
vi /etc/vsftpd/user_list
- vsftpd 설정된 서비스로 재시작
systemctl start vsftpd
systemctl enable vsftpd
systemctl restart vsftpd
- ftp 접속권한 편집
chown myid:myid /home/myid/
chown myid:myid /home/myid/mysite/
chown nginx:nginx /home/myid/
chown nginx:nginx /home/myid/mysite/
chown -R myid:myid /home/myid/
chmod -Rf 775 /home/myid
- ftp 아이디 myid 접근권한 편집
vi /etc/passwd
- ftp 아이디 myid 접근권한 편집맨아래 추가
myid:x:1001:1002::/home/myid/mysite:/bin/bash
- MariaDB 설정 추가
yum search mariadb
- MariaDB 설치 및 서비스 추가
yum install -y mariadb-server
systemctl start mariadb
systemctl enable mariadb
- MariaDB root 루트 비밀번호 생성 및 설정(비밀번호,접속권한,test테이블등)
mysql_secure_installation
- 그냥 순서대로함...
"엔터"
y
password
password
y
n
y
y
- MariaDB 재시작
systemctl restart mariadb
- MariaDB 접속
mysql -u root -p
- MariaDB 패스워드 로그인후 원격접속 가능하도록 root에 권한 부여, 비밀번호 다시 부여 후 접속 종료
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
exit
5. Google Cloud Platform 메뉴에서 VPC네트워크 방화벽설정
- Google Cloud Platform 메뉴 -> 방화벽규칙 -> 만들기
- 이름 : mysite
- 대상 : 네트워크의 모든인스턴스
- 소스 IP 범위: 0.0.0.0/0
- 프로토콜 및 포트 : tcp 체크 -> 20-21,3306,40000
- 만들기
6. PHP MariaDB 접속 테스트 - index.php 생성
vi /home/myid/mysite/index.php
- index.php 내용
<?php
$conn=mysqli_connect('127.0.0.1', 'root', 'password');
if($conn) 
  echo "db연결성공";
else
  echo "db연결 실패"; 
?>
7. ssh 옆에 외부 아이피 클릭 및 확인
8. ftp는 fileziller 이용하거나 크롬 브라우저로 접속확인가능

19. 4. 8.

GCP PHP + MariaDB + Nginx + vsftpd 구성

1. 프로젝트 생성
- 프로젝트명 : server
- 프로젝트 선택 : 전체 -> server

2. VM인스턴스 생성
- 메뉴 -> VM인스턴스 -> 만들기
- 이름 : mysite
- 머신유형 : 초소형(공유 vCPU 1 개)
- 부팅 디스크 : 변경 -> OS이미지 -> CentOS 7
- http 트래픽허용 체크
- 만들기

3. VM 인스턴스 목록
- SSH 클릭(인증되며 까만창 뜸)

4. 프롬프트 창내의 명령실행
- 업데이트 및 다운로드,압축풀기 설치
sudo yum update -y
sudo yum install -y wget unzip
- FTP 용 계정생성 및 비밀번호 생성
sudo useradd myid
sudo passwd myid
- 사이트 경로 생성 및 권한 추가
sudo mkdir /home/myid/mysite
sudo chmod +x /home/myid/mysite
- PHP + 모듈 설치
sudo yum install -y epel-release
sudo rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum --enablerepo=remi update remi-release
sudo yum --enablerepo=remi-php73 install -y php php-fpm php-mysql php-gd php-common php-cli php-json php-opcache php-devel php-imagick php-mbstring php-mcrypt php-mysqlnd php-pear php-xml php-xmlrpc php-soap php-dba php-bcmath php-pdo php-ldap
- vi 편집기("insert 키" : 편집 및 수정, "Escape 키" : 보기모드, ":wq" : 저장, ":q" : 저장하지않고 닫기, ":/검색어" : 검색어 검색 )
- 편집기로 PHP 설정파일(/etc/php.ini) 설정 명령
sudo vi /etc/php.ini
- php.ini 변경내용(검색해서 해당 값만 변경)
cgi.fix_pathinfo = 0
allow_url_fopen = Off
expose_php = Off
display_errors = Off
- 편집기로 php-fpm 설정파일(/etc/php-fpm.d/www.conf) 수정
sudo vi /etc/php-fpm.d/www.conf
- www.conf 변경내용 1. apache를 myid로 교체(apache로 검색)
user = myid
group = myid
- www.conf 변경내용 2. 주석제거(nobody로 검색)
listen.owner = nobody
listen.group = nobody
- Nginx 설정파일 생성
sudo vi /etc/yum.repos.d/nginx.repo
- nginx.repo 내용 입력(신규생성)
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
- Nginx 설치
sudo yum install -y nginx
- Nginx 설정파일 수정
sudo vi /etc/nginx/nginx.conf
- Nginx 설정파일 수정내용(http{}안에 추가)
server_tokens off;
- 방화벽 설정(http,https,ftp,database(MariaDB))
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=21/tcp
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
- Nginx 기본 설정 삭제
sudo rm /etc/nginx/conf.d/default.conf
- Nginx 기본 설정 만들기
sudo vi /etc/nginx/conf.d/default.conf
- Nginx 기본 설정 만들기 내용(아래내용을 복사, 붙여넣기)
server {
    listen       80;
    server_name  localhost;
    charset utf-8;
    root   /home/myid/mysite;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        index index.php index.html index.htm;
    }
    error_page  404              /404.html;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /home/myid/mysite;
    }
    location ~ \.php(?:$|/) {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
- php-fpm, nginx 재시작
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl reload nginx
- ftp 프로그램인 vsftpd 설치
sudo yum -y install vsftpd
- vsftpd 설정파일 삭제
sudo rm /etc/vsftpd/vsftpd.conf
- vsftpd 설정파일 생성
sudo vi /etc/vsftpd/vsftpd.conf
- vsftpd 설정파일 내용입력
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=yes
pasv_enable=Yes
pasv_max_port=40000
pasv_min_port=40000
- SELinux 권한에서 차단되는 경우가 있으므로 처리
sudo setenforce 0
- SELinux 권한에서 차단되는 경우가 있으므로 설정도 편집
sudo vi /etc/selinux/config
- SELinux 권한에서 차단되는 경우가 있으므로 설정도 편집(내용수정 disabled)
SELINUX=disabled
- vsftpd 설정된 서비스로 재시작
sudo systemctl enable vsftpd
sudo systemctl restart vsftpd
- ftp 불가한 아이디 목록1에서 편집(root 제거)
sudo vi /etc/vsftpd/ftpusers
- ftp 불가한 아이디 목록2에서 편집(root 제거)
sudo vi /etc/vsftpd/user_list
- ftp 접속권한 편집
sudo chown myid:myid /home/myid/mysite/
sudo chmod 555 /home/myid
sudo chmod 777 /home/myid/mysite
- ftp 아이디 myid 접근권한 편집
sudo vi /etc/passwd
- ftp 아이디 myid 접근권한 편집맨아래 추가
myid:x:1001:1002::/home/myid/mysite:
myid:x:1001:1002::/home/myid/mysite:/bin/bash
- MariaDB 설정 추가
sudo vi /etc/yum.repos.d/MariaDB.repo
- MariaDB 설정 추가(새로생성)
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
- MariaDB 설치 및 서비스 추가
sudo yum install -y MariaDB-client MariaDB-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
- MariaDB root 루트 비밀번호 생성 및 설정(비밀번호,접속권한,test테이블등)
sudo mysql_secure_installation
- 그냥 순서대로함...
password
password
y
n
y
y
- MariaDB 재시작
sudo systemctl restart mariadb
- MariaDB 접속
sudo mysql -u root -p
- MariaDB 패스워드 로그인후 원격접속 가능하도록 root에 권한 부여, 비밀번호 다시 부여 후 접속 종료
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
exit
5. Google Cloud Platform 메뉴에서 VPC네트워크 방화벽설정
- Google Cloud Platform 메뉴 -> 방화벽규칙 -> 만들기
- 이름 : mysite
- 대상 : 네트워크의 모든인스턴스
- 소스 IP 범위: 0.0.0.0/0
- 프로토콜 및 포트 : tcp 체크 -> 20-21,3306,40000
- 만들기
6. PHP MariaDB 접속 테스트 - index.php 생성
sudo vi /home/myid/mysite/index.php
- index.php 내용
<?php
$conn=mysqli_connect('127.0.0.1', 'root', 'password');
if($conn) 
  echo "db연결성공";
else
  echo "db연결 실패"; 
?>
7. ssh 옆에 외부 아이피 클릭 및 확인
8. ftp는 fileziller 이용하거나 크롬 브라우저로 접속확인가능

16. 10. 24.

PHP에서 ODBC 이용 MS-SQL 연동

<?php
 $ListArr = array();
 $conn = odbc_connect('dbserver', 'ID', 'PASSWORD');
 if($conn){
  $sql = "select top 10".PHP_EOL.
    "m_code,m_id,convert(char(10),m_regdate,120) as m_regdate".PHP_EOL.
    "from tbl_member".PHP_EOL.
    "order by m_code desc".PHP_EOL;
  $rs = odbc_exec($conn, $sql);
  while (odbc_fetch_row($rs)){
   array_push($ListArr,
    array(
     odbc_result($rs,"m_code"),
     iconv('euc-kr','utf-8',odbc_result($rs,"m_id")),
     odbc_result($rs,"m_regdate")
    )
   );
  }
  odbc_close($conn);
 }
?>
<table border="1">
<thead><tr><th>CODE</th><th>ID</th><th>DATE</th></tr></thead>
<tbody>
<?php
 if(count($ListArr)>0){
  foreach($ListArr as $arr1){
   echo "<tr><td>".$arr1[0]."</td><td>".$arr1[1]."</td><td>".$arr1[2]."</td></tr>";
  }
 }else{
  echo "<tr><td colspan=\"3\" align=\"center\">No Exist</td></tr>";
 }
?>
</tbody>
</table>