Hyper-Vで動作するFedora 25 VMがあります。この仮想マシンは、Apacheで実行されているPHPアプリケーションに使用されます。最新の状態で、すべての作業を行っています。
リモートWebサイトに接続する単純な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
- しかし、これはUbuntuにのみ当てはまります。