Hyper-V에서 실행되는 Fedora 25 VM이 있습니다. 이 가상 머신은 Apache에서 실행되는 PHP 애플리케이션에 사용됩니다. 최신 상태이며 모든 작업을 수행하고 있습니다.
원격 웹사이트에 연결하는 간단한 PHP 스크립트는 Apache에서 실행 시 실패하지만 명령줄에서는 정상적으로 실행됩니다.
$host='tcp://www.shinyandnew.ca/';
$socket = stream_socket_client($host, $errno, $errstr, 10, STREAM_CLIENT_CONNECT, stream_context_create());
if (!$socket) {
print ("Unable to connect to ${host}: ${errno} ${errstr}\n");
} else {
print ("Connected to ${host} successfully \n");
fclose($socket);
}
오류는 다음과 같습니다
php_network_getaddresses: getaddrinfo 실패: 알 수 없는 이름 또는 서비스
그러나 가상 머신은 네트워크에 액세스할 수 있으며 PHP 명령줄에서는 모든 것이 잘 작동합니다. 이는 Apache 문제임을 나타냅니다. 또한: Apache를 다시 시작하면 문제가 사라집니다.
그래서 내 질문은 다음과 같습니다
Apache를 다시 시작한 후 이름을 올바르게 확인하도록 하려면 어떻게 해야 합니까? 네트워크가 변경될 때마다 Apache를 다시 로드해야 하는 경우 이 설치(개발 워크스테이션)에 이것이 허용됩니까? 시작 시 작동하도록 자동으로 트리거하려면 어떻게 해야 합니까? 이를 수행하는 체계적인 방법이 있습니까?
답변1
다시 로드하거나 다시 시작할 필요가 없습니다. /etc/resolv.conf
부트로더에서 이 작업을 수행하도록 작성된 프로그램이 완료될 때까지 Apache가 시작되지 않는지 확인하기만 하면 됩니다 . PHP 버그 추적기의 제안은 시스템 오버레이 파일을 사용하여 After=
문제의 서비스 이름을 지정하는 확장을 추가하는 것입니다 httpd.service
.
CD /etc/systemd/system/ 설치 -m 0755 -d httpd.d echo >> httpd.d/after.conf "[단위]" echo >> httpd.d/after.conf "After=network.service systemd-networkd.service network-online.target"
추가 읽기
- 이마카저(2017-04-20). 호스트 항목이 없으면 stream_socket_client가 실패합니다.. 버그 #74483. PHP 버그 추적기.
답변2
Apache 다시 로드 스크립트를 /etc/NetworkManager/dispatcher.d
폴더에 넣습니다. 원천:무선 인터페이스가 시작된 후 Fedora 13에서 시작 시 데몬 실행
또는 Upstart conf에서 Apache 구성 다시 로드를 트리거합니다.
내 말은 이게 무슨 뜻이야
start on net-device-up
- 하지만 이는 우분투에만 해당될 수 있습니다.