개발 Q&A

제목 외부서버가 죽었는지 살았는지 확인 할수 있는 방법이나 php함수로 있을까요?
카테고리 PHP
글쓴이 정수리 작성시각 2017/04/25 08:03:19
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 14902   RSS

저희 회사에서 만든 A사이트경우 

현재 여러 공공기관에서 사용합니다. 

특정기관을 상징하는 로고같은 이미지들이 바뀔 때마다 업데이트를 파일을 만들고 관리하는 

불편함이 있어 리뉴얼 작업을 통해 개선을 하였는데 

이미지파일이나 css파일을 업데이트 파일에 넣지 않고 저희회사서버에 놔둔후 

이미지 링크만 저희회사 서버링크로 걸어 놓았습니다. 

그러면 특정기관이 연락와서 변경사항을 요청하였을 때 

바로 회사내 서버에서 이미지를 변경해주기만 하면 이미지 링크를 걸어놓았기에 

업데이트 파일을 만들필요도 없고 기관별로 일일이 따로 업데이트파일을 관리할필요가 없어졌죠 

근데 문제가 새로운 문제가 발생하였는데  주말에 회사에서 광케이블 제공회사에서 수리때문에 

1시간동안 인터넷이 안됐는데 그거 때문에 A사이트를 사용하여 기관들의 로고나 공통 이미지들이 

출력이 되지 않아 깨져버리는 현상이 발생하였습니다. 

그렇다보니 이러한 문제 때문에 회사에서는 이전처럼 기관별로  업데이트 파일을 관리하라고 하는데 

저희 팀의 경우 그렇게 관리했을 때 너무 불편하여 개선하고자 하였는데 다시 이전처럼으로 돌아가면 

그동안 리뉴얼 작업했던 것이 수포로 돌아가기에 다른 방법을 찾아보고자 하는데 

저희팀 부장님께서는 php로 외부서버가 죽었는지 안죽었는지 확인하여 다운되었을 경우 폴더 디렉토리를 통해 

원상복귀 될때까지만 대체할수 있는 이미지가 출력이 되도록 하고 다운이 되지않았을 경우 회사내부서버의 이미지가 정상적으로 

출력되도록 하고자 하시는데 

저보고 그러한 방법이 있는지 찾아보라고 하셨습니다. 

나름 검색을 해보았지만 원하는 글을 찾지 못해 글을 올리게 되었습니다. 

php를 통해 외부서버가 다운이 됐는지 안됐는지를 확인하는 방법이 있을까요? 

아니면 curl를 사용하여 외부서버에 파일 존재여부를 통해 확인하는 방식을 사용하면 될까요?

 다음글 mysql에서 특정단어 검색질문 (7)
 이전글 상위 html에서 하위 html ajax로 호출했을시에... (2)

댓글

변종원(웅파) / 2017/04/25 09:30:33 / 추천 0

특정파일 호출해서 헤더 리턴 값 확인해도 되구요.

텍스트파일이라면 읽어서 문자열 비교해도 되구요. php.net 가서 파일 함수 목록 보세요.

개발할때 제일 먼저 해야할 일은 함수 레퍼런스에서 찾아보는 것입니다.

정수리 / 2017/04/25 10:04:32 / 추천 0

@변종원 

감사합니다.

말씀하신대로 메뉴얼을 확인하여

fopen를 사용하여 테스트를 해보았는데 

<?php 
$fp =  fopen("http://abcd/gyeyak2017/jeonnam/logo.gif", "r");
if($fp == null)
{
	echo '1';
}
else
{
	echo "<img src ='http://abcd/gyeyak2017/jeonnam/logo.gif'>";
}

했을 경우 정상적으로 false 값이 출력됩니다

 

그런데 $fp에서 

$fp = http://abcd/gyeyak2017/jeonnam/test.gif

존재하지않는 test.gif로 변경하여 

테스트를 하였을 때

test.gif파일 없기에

true값이 1출력이 되어야 하는데

false값이 출력이 되버리네요;; 

메뉴얼를 확인하고 예제를 참고 하여 작성하였는데...

변종원(웅파) / 2017/04/25 10:28:59 / 추천 0

정수리/ 에러가 났을때  false가 나오는게 정상입니다.

fopen에서 외부주소를 읽지 못하도록 php.ini에 설정이 되어 있어서 그런 것 같네요.

$handle = fopen("index.php", "r");
var_dump($handle);

//결과
resource(77) of type (stream)





$handle = fopen("http://aaa.com/index.php", "r");
var_dump($handle);

//결과
false

 

상대경로로 바꿔서 테스트 해보시거나 php.ini에서 외부파일 읽을 수 있도록 설정을 변경해서 테스트하세요.

정수리 / 2017/04/25 11:00:37 / 추천 0

@변종원

답변감사합니다

 

$fp =  fopen("http://hanayo.net/gyeyak2017/jeonnam/test.gif", "r");
if($fp)
{
    echo "<img src ='http://hanayo.net/gyeyak2017/jeonnam/logo.gif'>";
}
else
{
    echo '1';
}

이렇게 변경하고

 

php.ini에서 

allow_url_fopen = On

으로 확인하였습니다...

test.gif 이미지 파일이 없는데도

계속 true값이 출력이 되네요... 어디가 문제 인건지 알수가 없는 상황입니다.

도라에몽 / 2017/04/25 11:13:54 / 추천 0
ini_set('allow_url_fopen',1);
$url = "http://yoururl.co.kr/uri?asdfkljasdfj=asdfasdf";
$response = file_get_contents($url);

저는 이런식으로 했었는데요.. php.net에서 메뉴얼 차근차근히 읽어보시면 답이 나올것 같네요.