No seu script PHP, quando você o acessa pelo endereço IP, você também precisa enviar um cabeçalho Host:
em sua solicitação com o nome de domínio correto.
Esta pergunta no Stack Overflow explica como fazer isso: link
Eu tenho algumas perguntas, por favor ajude:
Fist, eu posso acessar a pesquisa do Google apenas digitando http://74.125.224.211
, porque este é o endereço IP retornado pelo nslookup.
No entanto, não consegui fazê-lo com os endereços IP retornados de www.yahoo.com. Como eu vou para a página de busca do Yahoo pelo seu IP?
Outro exemplo, http://www.allaboutcircuits.com
será resolvido para 68.233.243.63
pelo servidor DNS, mas se eu for para http://68.233.243.63
, receberei "Hello world!".
Segundo, por algum motivo, há algo errado com os resolvedores de DNS com meu serviço de hospedagem na web (não será corrigido !!) . Então, comandos como
get_file_contents("http://www.allaboutcircuits.com");
retornará php_network_getaddresses: getaddrinfo failed: Name or service not known
Como faço para contornar isso com o endereço IP,
68.233.243.63
Quero dizer, de alguma forma anexar o parâmetro hostname HTTP a get_file_contents()
?
Eu gostaria de resolver isso do meu próprio lado (no meu código), nenhuma solução de problemas / ajustes será feita pelo administrador do servidor.
No seu script PHP, quando você o acessa pelo endereço IP, você também precisa enviar um cabeçalho Host:
em sua solicitação com o nome de domínio correto.
Esta pergunta no Stack Overflow explica como fazer isso: link
Como wallyk disse, são servidores virtuais
Veja este exemplo para o apache
<VirtualHost *:80>
ServerName example2.com
DocumentRoot C:/www/example2.com
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
DocumentRoot C:/www/example.com
</VirtualHost>
Em c: \ www \ example.com faça um arquivo de índice dizendo "Hello World! example.com"
em c: \ www \ example2.com faça um arquivo de índice dizendo "Hellow World! example2.com"
E altere seu arquivo de hosts para
127.0.0.1 example.com
127.0.0.1 example2.com
Em seguida, acesse link em seguida, vá para o link
Então é assim que você pode ter vários sites por ip único
Então, basicamente, a resposta é: não, você não conseguirá obter esse site do ip.
Você diz que deseja especificar manualmente o nome do host e o endereço IP, em vez de depender de um servidor DNS fora de seu controle. Observando os comentários na documentação do file_get_contents , vejo que os comentadores resolveram problemas semelhantes criando um contexto que contenha o cabeçalho Host: necessário. Algo parecido com isto:
$context = stream_context_create(array('http' => array('header' => 'Host: www.allaboutcircuits.com')));
$data = file_get_contents('http://68.233.243.63/', 0, $context);
Naturalmente, esteja ciente de que a desvantagem de especificar manualmente o nome do host e o endereço IP é que, se o endereço IP mudar no futuro (por exemplo, se o site for movido para um novo provedor de hospedagem), pare de trabalhar até que você atualize manualmente o endereço IP.
O endereço IP, por si só, não é suficiente para identificar com exclusividade para qual site você deseja ir quando vários hosts virtuais estão sendo executados na mesma porta / servidor. Nesse caso, você precisa especificar o cabeçalho do host na solicitação HTTP que identifica o nome do servidor. Você pode fazer isso diretamente via telnet para a porta 80:
$ telnet 68.233.243.63 80
Trying 68.233.243.63...
Connected to 68.233.243.63.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.allaboutcircuits.com
onde você digita o comando telnet e as linhas GET e Host e, em seguida, obtém o código-fonte HTML retornado do servidor.
Ou você pode usar o curl, onde você adiciona especificamente o cabeçalho (com o -H
flag).
curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"
Second, for some reason, there is something wrong with DNS resolvers with my web hosting service (it will not be fixed !!)
Você pode usar outro servidor DNS no lado do cliente, caso não seja o host da Web. 8.8.8.8 e 8.8.8.6 são executados pelo Google e 4.4.4.2 é um standby comum. Namebench permite encontrar o mais rápido. Alternativamente, você poderia usar um serviço de proxy de algum tipo (eu corro meu próprio em um VPS, ou use Tor, mas há outras opções).
Como isso é PHP, uma opção ainda mais fácil seria executar o código em outro sistema. Kludges não são passíveis de manutenção.