PHP 에서 mail 함수 정상 동작하는지 확인하는 소스

<?php
 //$mailto="받는주소";
 $mailto="sample@a.com";
 $subject="mail test";
 $content="test";
 $result=mail($mailto, $subject, $content);
 if($result){
  echo "mail success";
  }else  {
  echo "mail fail";
 }
?>


test.php 로 저장하여,
웹페이지에서 로드했을때
mail success 가 찍혀야 정상

만약, 위 소소에서 mail success 가 찍히는데
각종 커스텀 보드에서 메일 발송이 되지 않는다면,
php소스에서 mail 함수의 각 인자들을 확인해본다.

error_log($mailto, 0);  // mailto 변수를 서버의 에러로그에 찍는다.
error_log($subject, 0);

가령,

<?php
 //$mailto="받는주소";
 $mailto="sample@a.com";
 $subject="mail test";
 $content="test";
 $result=mail($mailto, $subject, $content);
 if($result){
  echo "mail success";
  }else  {

  error_log($mailto, 0); 

  echo "mail fail";
 }
?>

일 경우,
Apache 서버를 구동중이라면,
Apache\logs\error.log
파일에 mailto 변수의 내용이 찍힌다.

지금 내가 사용중인 환경은
Apache2.2.8
+ SMTP(W2K3 R2) + PHP5.2.5


위와 같이 테스트에서 이상이 없었으나,
제로보드에서는 메일을 보내지 못하는 현상이 발생한다.

따라서,
제로보드의 메일발송 소스를 확인해보니,
받는 사람(Receiptor) 변수에

위의 예제에서는 "sample@a.com" 이지만,
제로보드는 "받는사람 이름 <sample@a.com>"을 설정한다.

Receiptor 변수를 임의로 "sample@a.com"으로 수정하고
정상 작동하는 것을 확인
해당 소스를 수정해주었다.

제로보드\classes\mail\Mail.class.php

function getReceiptor() {
  //if($this->receiptor_name) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->receiptor_name).'?=', $this->receiptor_email);
  return $this->receiptor_email;
}


수정이후 정상 발송 확인

출처: https://lifeful.tistory.com/19 [SEIZ THE DAY.]


[리눅스 sendmail 로 폼메일사용시 nobody@localhost.localhost.com 으로 발송될 경우 ]


보내는 사람 계정 명이 nobody@localhost.localdomain 으로 발송이 되서 

다음이나 다른 포털에서 반송되는 경우를 볼수 있습니다 

이럴때에 조치 방법으로 

php.ini에서 

 

메일 함수 사용시 

리눅스

php.ini 를 수정하는 방법.(Linux) 
; PHP mail() 함수에서 발송하는 메일에는 모두 적용됨.  수정후 아파치 재시작해야함. 
;sendmail_path = 

sendmail_path = “/usr/sbin/sendmail -t -i -f 계정@도메인” 

 

위에 처럼 수정후 발송 하면 잘 적용 되십니다 

무조건 적용 

 

 

윈도우

php.ini 를 수정하는 방법(windows)
; 모든 메일발송자가 고정적으로 지정됨.  수정후 아파치 재시작해야함. 
;sendmail_from = master@example.com 
=> 
sendmail_from = 계정@도메인



출처: https://cnisoft.tistory.com/10 [씨엔아이소프트]


 

CentOS7 에서부터는 network 설정방법이 좀 달라졌음


[root@localhost network-scripts]# vi /etc/sysconfig/network-scripts/ifcfg-enp6s0



랜카드명이 eth0 에서 enp6s0 처럼 변경되었음. 



고정ip설정시 netmask 설정은 NETMASK, PREFIX 중에 하나만 사용해야 함. 

두 개 다 지정해 놓을 경우 PREFIX가 우선함


NETMASK = 255.255.255.224

PREFIX = 27


와 


PREFIX = 27

NETMASK = 255.255.255.224


는 동일하게 PREFIX값이 우선함


PREFIX 값을 주석처리하거나 삭제함



-----



서브넷 클래스에 따른 NETMASK / PREFIX 값 (둘 중 하나만 사용)


NETMASK = 255.255.255.0

PREFIX = 24

호스트범위 : 1~254



NETMASK = 255.255.255.128

PREFIX = 25

호스트범위 : 1~126



NETMASK = 255.255.255.192

PREFIX = 26

호스트범위 : 1~62



NETMASK = 255.255.255.224

PREFIX = 27

호스트범위 : 33~62



NETMASK = 255.255.255.240

PREFIX = 28

호스트범위 : 49~62



NETMASK = 255.255.255.248

PREFIX = 29

호스트범위 : 49~54



NETMASK = 255.255.255.252

PREFIX = 30

호스트범위 : 53~54



출처: https://ellordnet.tistory.com/67 [IT in MT]


 

증상 : configure: error: DBA: Could not find necessary library.
해결 : ln -s /usr/lib64/libgdbm_compat.so /usr/lib/libdbm.so

 

증상 : checking for DB4 major version... configure: error: Header contains different version.

해결 1 : yum install db4 db4-devel (db4 와 db4-devel 을 설치한 뒤에도 안되면 아래 참고)

해결 2

/usr/include/db.h 가 /usr/include/libdb/db.h 로 연결되어 있을 경우
unlink /usr/include/db.h   (기존 db.h 링크 해제)

cd /usr/include
ln -s /usr/include/libdb4/db.h db.h

 

make 과정에서

/home/segio_php/php-5.2.17/ext/dom/node.c: In function ‘dom_canonicalization’:

/home/segio_php/php-5.2.17/ext/dom/node.c:1953:21: error: dereferencing pointer to incomplete type

/home/segio_php/php-5.2.17/ext/dom/node.c:1955:5: error: dereferencing pointer to incomplete type


오류가 발생한다면

 

[root@localhost] wget -O php.patch  https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt

[root@localhost] cd php-5.2.17

[root@localhost] patch -p0 -b < php.patch


patching file ext/dom/node.c

Hunk #1 succeeded at 1950 (offset 55 lines).

patching file ext/dom/documenttype.c

Hunk #1 succeeded at 215 (offset 10 lines).

patching file ext/simplexml/simplexml.c

Hunk #1 succeeded at 1343 (offset -74 lines).


patch 명령어를 찾을 수 없다고 할 경우 yum -y install patch

위와 같이 패치를 적용한 후 컴파일을 하면 문제없이 진행된다.


 

ssh, scp 를 리눅스에서 사용하려면 비밀번호를 입력하라고 프로그램이 멈춘다.


자동화 시스템에서 이러한 점은 큰 문제점이다.


이러한 점들을 해결하기 위해 공개키 기반 인증을 사용할 수 있다.


미리 ssh 인증을 서버간에 해두면, 그 인증파일을 사용하여 비밀번호 없이 ssh나 scp 를 사용할 수 있다.


방식은


scp를 사용할 서버에서 키를 아래와 같이 생성한다.

ssh-keygen -t rsa


Enter file in which to save the key : 인증 파일을 어디에 만들지 설정(엔터시 계정 아이디/.ssh 에 파일들이 생성)

Enter passphrase : 비밀번호를 입력 안하려 하니 엔터

Enter same passphrase again : 비밀번호 확인 그냥 엔터


생성 되는 파일은 ID/.ssh 에 id_rsa, id_rsae.pub 이다.


id_rsa 는 private key.

id_rsae.pub 는 public key 이다.


키가 생성 되었으면 scp를 받을 서버에 키를 전송해야 한다.

공개 키인 id_rsa.pub 를 전송한다.


scp .ssh/id_rsa.pub ID@serverName:.ssh/authorized_keys

하고 비밀번호를 입력하면 전송이 된다.


authorized_key 말고 authorized_key2 까지 인식 된다.


ssh ID@serverName 했을 때 비밀번호를 인증하라고 메시지가 나오지 않으면 된다.



출처: https://www.kiljh.me/entry/ssh-scp-비밀번호-없이-실행공개키-기반-인증 [Dominic Blog]


출처 : http://www.cgmarina.co.kr/computer/13720

 

[Session]

session.save_handler = files
session.save_path = /tmp
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.gc_maxlifetime = 1440
session.cache_expire = 180

session.save_handler :
기본적으로 Files 방식을 이용한다.
session_module_name() 을 통하여 현재 설정된 정보를 볼 수 있다. 공유 메모리를 사용하는 MM방식과 USER방식을 지원하다.
USER방식을 사용하는 경우에는 session_set_save_handler(string open, string close,string read, string write, string destroy, string gc)을 이용하여session_set_save_handler("함수명", "함수명", "함수명", "함수명", "함수명", "함수명")과 같이콜백 함수를 정의하고 콜백 함수를 호출하여 세션 데이터나 세션ID등을 데이터베이스 등에 보관하여 사용할 수도 있다.

session.save_path :
세션 파일을 저장할 경로을 의미하고 files 방식에서는 /tmp가 기본적인 파일이 저장되는 디렉토리의 절대 경로이다.

session.use_cookies :
세션과 함께 쿠키를 사용할 것인가에 대한 설정으로 기본적으로 쿠키와 함께 사용하도록 되어 있다.
쿠키를 사용하지 않는 경우에는 0으로 설정하고 버전에 따라서는 On과 Off로 설정하기도 한다.

session.name :
세션ID를 쿠키에 저장한 경우 PHP에서 세션ID를 확인하기 위한 변수명을 의미한다.
기본값으로 PHPSESSID로 설정되어 있으며$PHPSESSID라고 하면 세션ID를 확인할 수 있다.

session.auto_start :
PHP시작과 동시에 세션이 자동으로 스타트 되도록 하는 옵션이다.
기본값은 0으로 자동으로 시작되지 않도록 되어 있다.
그러므로 세션을 사용하기 전에는 session_start()를 호출해야 하고, 자동으로 시작하게 하려면 1로 설정하면 된다.
버전에 따라서는 On과 Off로 설정하기도 한다.

session.cookie_lifetime :
세션ID를 저장한 쿠키의 활성화 시간 또는 유효 시간을 설정하는 것이다.
기본값으로는 0이 설정되어 있어 브라우저가 종료되면 자동으로 쿠키값은 삭제된다.
session_set_cookie_params()함수를 이용하여 쿠키의 유효 시간을 변경할 수 있으며 PHP.INI를 수정하여 쿠키 적용 시간을 변경 가능하다.

session.cookie_path :
세션ID가 저장된 쿠키가 적용될 유효 경로(디렉토리)를 설정하는 부분이다.
기본값은 "/"로 모든 경로에서 적용 가능하도록 설정되어 있다.
session.cookie_lifetime과 같이 session_set_cookie_params()함수를 이용하여 쿠키의 적용 디렉토리를 변경할 수 있다.

session.gc_maxlifetime :
사용되지 않는 것으로 보이는 세션 데이터를 삭제한다.
세션ID를 삭제하는 것이 아니라 기본 설정 시간인 1440초 동안 아무런 요청이 없을때 자동으로 세션 데이터를 삭제하도록 되어 있다.
이렇게 자동으로 삭제하는 이유는 서버의 부하를 줄이기도 하지만 클라이언트에서 접속을 종료하였는지 여부를 확인할수 없으므로1440초 동안 사용하지 않는 데이터는 삭제하게 한다.

session.cache_expire :
서버에 저장된 세션ID의 활성화 시간이다.
클라이언트에서 브라우저를 닫아버리면 서버에서는 클라이언트가 연결중인지 아닌지 확인하는 방법이 없으므로 미리 세션데이터를 삭제하고 세션ID는 180분 이후에 삭제시킨다.
만약 세션 ID를 삭제하지 않으려면 PHP.INI를 수정하여 시간을 늘려주면 된다.


세션을 핸들링하려면 세션 저장 디렉토리를 별도로 사용해야 한다.

session_save_path("저장디렉토리");
ini_set("session.cache_expire", 180); // 세션 유효시간 : 분
ini_set("session.gc_maxlifetime", 86400); // 세션 가비지 컬렉션(로그인시 세션지속 시간) :

 

 

 

 

 

실제 사용할때에는  
session_save_path($_SERVER['DOCUMENT_ROOT']."/세션폴더");
ini_set("session.cache_expire", 180); // 세션 유효시간 : 분
ini_set("session.gc_maxlifetime", 86400); // 세션 가비지 컬렉션(로그인시 세션지속 시간) :
session_start();

 

위와같이 사용 하면 됨.



출처: https://jaweb.tistory.com/entry/php-session-유지시간-설정-작업관련 [잡다구리 파크]


MySQL mysqldump 시 특정테이블만 백업 받는 방법


DB 테이블 덤프할 때 table_* 이런형태의 asterisk 별표를 사용한 특정 테이블만 받고 싶을때 사용할 수 있습니다.


방법은 여러가지가 있지만 아래처럼 하면 간단하게 백업을 받을 수 있습니다.


# mysqldump -u유저아이디 -p비밀번호 dbname table_* > backup.sql

mysqldump: Couldn't find table: "table_*"


이렇게 하면 에러가 나지요~


# mysqldump -u유저아이디 -p비밀번호 dbname $(mysql -u유저아이디 -p비밀번호 dbname -Bse "show tables like 'test_%'") > backup.sql


이런 방법으로 백업이 가능합니다.

$() 변수로 받는다는 의미입니다.


# mysql -u유저아이디 -p비밀번호 dbname -Bse "show tables like 'test_%'"


괄호 안에 있는 내용을 먼저 테스트 해보고 사용하면 됩니다.



출처: https://ivps.tistory.com/204 [iVPS 가상서버호스팅]


1. 증상

가. 대상 : Windows 7 SP1 / Windows 2008 R2 (에디션 상관 없음)

나. 업데이트 실패 목록 : KB4516065 또는 KB4519976 (2019-09 또는 10월 누적 보안패치)만 설치 하지 못함

다. 오류 코드 : WindowsUpdate_80092004 또는 80092004, 80073712

2. 오류 화면

가. 한글 OS

 

나. 영문 OS

 

3. 해결 방법

가. 해결 방법 :

KB4490628 (9.1MB) 업데이트 스택을 수동 다운로드 후 설치 

다운로드 링크 : https://www.catalog.update.microsoft.com/Search.aspx?q=KB4490628

패치 설명 : 이 업데이트는 Windows 업데이트를 설치하는 구성 요소인 서비스 스택의 품질을 개선합니다.(뭔말인지..) 

나. 설치화면 : 소요시간 1분내

 

다. 영향도 : KB4490628 패치 후 재부팅 필요 없음,  이후 실패 한 KB4516065(재부팅필요) 업데이트 실행 -> 성공

 

출처 : https://hosts.tistory.com/594

 

KB4516065/KB4519976 : 2019-09/10월 보안 업데이트 실패 해결방법

1. 증상 가. 대상 : Windows 7 SP1 / Windows 2008 R2 (에디션 상관 없음) 나. 업데이트 실패 목록 : KB4516065 또는 KB4519976 (2019-09 또는 10월 누적 보안패치)만 설치 하지 못함 다. 오류 코드 : WindowsUpda..

hosts.tistory.com

 


네임서버를 설정하고 난 후에는 아래의 명령어로 설정사항을 검사할 수 있습니다.

named-checkconf 명령과 named-checkzone 명령어에 대한 사용법을 알아보겠습니다.

=================================================================================
named-checkconf - /etc/named.conf 파일을 검사하는 명령

-사용법
named-checkconf [named 설정파일 경로]

[root@localhost root]# named-checkconf /etc/named.conf
[root@localhost root]#
엔터를 쳤을때 위와 같이 아무런 반응없이 프롬프트가 떨어지면 named.conf 파일에 이상이 없는 것 입니다.

=================================================================================
named-checkzone - /var/named 디렉토리 하위에 설정한 zone 파일을 검사하는 명령

-사용법
named-checkzone [zone 네임] [zone 파일 경로]

------------------------------
zone "hostway.co.kr" IN {
       type master;
       file "hostway.zone";
       allow-update { none; };
};
------------------------------

/etc/named.conf 파일에 위와 같이 zone 설정이 되어 있을때, 아래와 같은 방법으로 검사를 할 수 있습니다.

[root@localhost root]# named-checkzone hostway.co.kr /var/named/hostway.zone
zone localhost/IN: loaded serial 42
OK
[root@localhost root]#

=================================================================================

 

출처 : http://faq.hostway.co.kr/Linux_DNS/2247