2014-05-25 2 views
2

나는 이걸로 끝내고 있어요. 나는 내 서버 (아마존 ec2 인스턴스)에서 실행중인 아파치가 있고, 나는 PHP에서 도메인 이름을 해결할 수없는 것. 예를 들어 fopen ('http://www.google.com', 'r')은 "php_network_getaddresses : getaddrinfo failed : Name or service not known"을 표시하지만 Google의 IP 주소 중 하나로 URL을 변경하면 정상적으로 작동합니다. 원격 서버의 pinging www.google.com도 잘 작동하므로 '외부 시스템'의 문제는 아닙니다.아파치에서 PHP의 도메인 이름을 확인할 수 없습니다

특이한 점은이 서버를 아무런 문제없이 잠시 동안 작동시키지 못했기 때문에 내가이 문제를 일으킬 수있는 일은 생각할 수 없다는 것입니다.

내 php.ini에서 allow_url_fopen = On으로 설정되어 있고이 스크립트가 적용된 것인지 확인하기 위해이 스크립트를 실행하여 allow_url_fopen이 실제로 켜져 있습니다.

내가 무엇을 시도해야하는지에 대한 아이디어가 있습니까? 어떤 종류의 파일 사용 권한 문제가이 원인 일 수 있습니까? 내 webapp 내부에서 일부 파일 권한을 변경했기 때문에 가능한 실수로 무언가를 잘못 입력했으며 응용 프로그램 외부에서 일부 파일의 권한/소유권이 실수로 변경되었습니다. 그럴 가능성은 낮지 만 시스템에서이 작업을 중단시킬 수있는 다른 작업을 생각할 수는 없습니다.

+0

서버의 명령 줄에서 PHP 스크립트를 실행하면 도메인 이름이 정상적으로 처리되므로 아파치와 관련이 있다고 생각하십니까? – user1585789

+0

같은 문제가있는 온라인 사람들이 많은 게시물을 발견했습니다. 대부분의 경우 서버를 다시 시작하면 문제가 해결되지만 나를 위해 해결되지는 않습니다. 다른 사람들에게는 권한 문제이지만, 모든 사람들에게 /etc/resolv.conf가 읽기 권한을 가지고 있고 어쨌든 아파치를 루트 권한으로 실행하고 있습니다 ... – user1585789

+0

아파치 나 커널 로그에 뭐가 있습니까? 대안으로 대안으로 [net_dns2] (http://pear.php.net/package/Net_DNS2/redirected) 또는 [PHPDNS] (http://www.purplepixie.org/phpdns/)를 사용하여 DNS 조회를 수행 할 수 있습니다.). – klugerama

답변

0

당신은 file_get_contents를 사용을 시도 할 수 있습니다 :

file_get_contents('http://www.google.com'); 

fopenfile_get_contents 거의 동일하지만 항상 서버에서 동일한 구성에서 작동하지 않습니다.

+0

고마워,하지만 그게 내 애플 리케이션이 일하고 싶지 않아. phpmyadmin, adminer, sqlbuddy 또는 mysql 관리 프로그램이 연결하려는 원격 데이터베이스에 액세스 할 수 없습니다. – user1585789

0

정말 아파치 때문입니까? 첫 번째 단계는 터미널에서 다음 스크립트를 실행하는 것입니다.

<?php 
$handle = @fopen("http://www.google.com", "r"); 
if ($handle) { 
    while (($buffer = fgets($handle, 4096)) !== false) { 
     echo $buffer; 
    } 
    if (!feof($handle)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    fclose($handle); 
} 

이것이 작동하지 않으면 다음 단계는 DNS 확인 프로그램이 작동하는지 확인하는 것입니다. 이 두 가지 테스트를 수행 한 후

host www.google.com 

의 출력은 무엇인가, 우리가 이동하는 방향을 결정할 수 있습니다. 당신은 권한이있는 경우

+0

감사합니다. 이미 동일한 테스트를 실시했습니다. 명령 줄에서 fopen으로 PHP 스크립트를 실행하면 정상적으로 작동합니다. "php_network_getaddresses : getaddrinfo failed : Name or service not known"으로 아파치를 통해 동일한 스크립트를 실행하면 실패합니다. – user1585789

+0

cUrl로 변경해보십시오. getaddrinfo의 일부 구현이 중단되었습니다. – pgampe

3

은, 당신의 /etc/resolv.conf 파일에서 이름 서버를 변경해보십시오 다른 네임 서버. 당신의 DNS 캐시가 오래

일 또는 터미널에서 다음 명령을 실행하여 SE 리눅스 정책을 변경 시도 할 수 있습니다 :

setsebool -P nis_enabled 1 
setsebool -P httpd_can_network_connect 1 
0

가 (미안 해요, 난 주석을 추가 할 수있는 충분한 명성을하지 않습니다). 이것이 chrooted 환경에서 Apache를 실행하는 것과 관련 될 수 있다고 나에게 알린다.

4

나는 동일한 문제가있었습니다.

이후 httpd restart 호스트 해결 문제가 계속됩니다. 그러나 httpd 정지 & 시작로 해결되었습니다.

+1

나를 위해 일했습니다! 감사! 아직도 그것이 일어나고 있는지 궁금해! – Napolux

1

내 개발에서 아파치에서 PHP를 실행하는 것과 동일한 문제가 있지만 직접 PHP로 작동합니다.

php filetest.php 

는 그럼 난 내 아파치 상태를 확인하고 나는 로그에 이것을보고 : 나는 그것을 발견 된 일부 검색 후

Mar 12 13:01:08 arch-linux apachectl[6847]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::6aa3:c4ff:fe...is message 

:

http://tutorialforlinux.blogspot.com.br/2013/10/solve-problem-ah00558-when-restarting.html 

을 그리고 이것은, 내가 다음 exaclty 문제였다 내 httpd.conf에서 이것을 변경했습니다 :

#ServerName www.example.com:80 

대상 :

ServerName localhost 

이제 작동합니다. 이제 apache에서 php로 DNS를 확인할 수 있습니다.

영어 실력이 좋지 않아 더욱 자세하게 말하고 싶습니다.

관련 문제