XAMPP: Directory Mismatch

Este erro ocorre quando o XAMPP Control Panel não pôde encontrar a pasta de instalação do XAMPP.

Para corrigirmos isso, abra o Editor de Registro do Windows (Menu iniciar > digite “regedit” e pressione <ENTER>). Agora, expanda a chave:

Em sistemas 32-bit: HKEY_LOCAL_MACHINESoftwarexampp

Em sistemas 64-bit: HKEY_LOCAL_MACHINESOFTWAREWow6432Nodexampp

Verifique se o diretório informado em “Install_Dir” existe e que você possui permissões para acessá-lo.

Install_Dir XAMPP


Warning : Directory mismatch when I lauch xampp-control.exe – Apache Friends Support Forum – https://community.apachefriends.org/f/viewtopic.php?f=16&t=25803

XAMPP: Serviço MySQL não inicia automaticamente

O MySQL inicia normalmente pelo XAMPP, mas ao reiniciar o computador não.

Era necessário abrir o Control Panel do XAMPP e iniciar o serviço manualmente.

Este problema começou a ocorrer após instalar uma nova versão do XAMPP em um dos nossos servidores.

xampp

Ele ocorre devido ao XAMPP não atualizar o serviço MySQL para corresponder ao novo arquivo de configuração do MySQL (que passou de my.cnf para my.ini).

Usando o Process Explorer, pude verificar a linha de comando utilizada pelo XAMPP para iniciar o MySQL. (Apenas procure na lista o processo mysqld.exe)

mysqld process explorer

Agora, abra o Registro do Windows (Menu iniciar > digite “regedit” e pressione <ENTER>) e expanda a chave:


HKEY_LOCAL_MACHINESYSTEMControlSet001servicesmysql

Modifique o valor ImagePath para o comando informado pelo Process Explorer.

mysql

Caso o serviço ainda não tenha iniciado, abra Serviços (Menu iniciar > digite “services.msc” e pressione <ENTER>) e verifique se o serviço MySQL está configurado para iniciação automática.


Why can’t I start up MySQL service via XAMPP Control Panel in Windows 8? – Quora – https://www.quora.com/Why-cant-I-start-up-MySQL-service-via-XAMPP-Control-Panel-in-Windows-8

WampServer: “PHP Startup:”

Ao iniciar o WampServer, ele mostrava a mensagem abaixo a cada iniciação:

WampServer PHP Startup

Ela aparece devido a uma das extensões habilitadas no WampServer.

Dê botão direito no Wamp e entre nos menus PHP > PHP extensions.

Agora, desabilite uma das extensões que estão habilitadas (possuem o certinho do lado), reinicie o Wamp e verifique se a mensagem apareceu. Caso ela apareça, habilite a extensão que foi desabilitada anteriormente e desabilite a próxima, e repita o processo novamente até encontrar a culpada.

Sim, este processo pode ser demorado e trabalhoso. Pude encontrar, no meu caso, a extensão que exibia este aviso incômodo:

;extension=php_pdo_oci.dll

Instalação e Configuração do IIS

ÍNDICE

  • 1. INTRODUÇÃO
  • 2. DESENVOLVIMENTO
    • 2.1 INSTALAÇÃO DO IIS
    • 2.2 CONFIGURANDO SERVIÇOS / COMPONENTES DO IIS
      • 2.2.1 Configurando o servidor HTTP
      • 2.2.2 Configurando o servidor FTP
    • 2.3 CONFIGURANDO O FIREWALL DO WINDOWS
    • 2.4 REMOÇÃO DO IIS
  • 3. CONCLUSÃO
  • 4. SOLUÇÃO DE PROBLEMAS
  • REFERÊNCIAS

1. INTRODUÇÃO

Acessando servidor Web (IIS) nos computadores locais virtualizados no Hyper-V

Acessando as páginas hospedadas no host em computadores locais virtualizados no Hyper-V

Possuo computadores virtualizados no Hyper-V no qual queria usar para testar a compatibilidade (na prática) das aplicações Web que desenvolvo com navegadores e Windows mais antigos, como o Windows XP (IE 8).

2. DESENVOLVIMENTO

2.2. CONFIGURANDO SERVIÇOS / COMPONENTES DO IIS

O IIS pode ser usado tanto como um servidor Web e um servidor FTP.

2.2.1 Configurando o servidor HTTP

CRIANDO UM NOVO DIRETÓRIO VIRTUAL

  1. Abra o Gerenciador do Serviços de Informações da Internet (IIS) (Menu iniciar -> Ferramentas administrativas)
  2. Adicione um novo Diretório Virtual dentro de “Default Web Site”.
  3. Defina o aliasImages” e diretório real como \RemoteInstall\Boot\x86\Images. Usar ou não letras maiúsculas e minúsculas tanto no alias quanto no diretório real é indiferente: tanto o IIS quanto o Windows não são case-sensitive. [3]
  4. Deixe “Pass-Through authentication” marcado para habilitar o acesso anônimo

ADICIONAR FORMATO DE ARQUIVOS MIME (OPCIONAL)

Tipo MIME são usados para caracterizar os documentos transferidos pelo protocolo HTTP para que o navegador possa saber como mostrar o documento. [4]

Geralmente, não é necessário configurar o formato de arquivos MIME: os tipos MIME padrões são suficientes para a maioria dos servidores Web. Precisamos adicionar/modificar tipos MIME somente ao lidarmos com formatos de arquivo que fogem do padrão de um servidor Web.

  1. Selecione o novo diretório virtual recém-criado e dê dois cliques em “MIME types” na visualização de recursos.
  2. Clique no botão “Add…” no painel de Ação

Exemplos:

  1. Extensão do nome do arquivo: iso
  2. Tipo MIME: cd/image
  1. Extensão do nome do arquivo: ipxe
  2. Tipo MIME: text/plain

É importante que os tipos MIME sejam criados dentro da pasta virtual ao invés do servidor ou do “Default Web Site”.

booting_blancco_iso_using_ipxe_in_wds_2012Verifique se não há nenhum conflito de tipos MIME criados nas opções do servidor ou em “Default Web Site”. No IIS, clique em tipos MIME dentro do diretório virtual em “Default Web site”.

Se você encontrar o tipo MIME como Herdado ao invés de Local, tente deletar os tipos MIME conflitantes do servidor/default website.

2.2.1 Configurando o servidor FTP

Se você ainda não o possui instalado, abra “Painel de controle > Programas e Recursos“. Do lado esquerdo da tela (na barra), selecione “Ativar ou desativar componentes do Windows“.

Na lista, selecione “Servidor FTP > Serviço FTP” e “Ferramentas de Gerenciamento da Web > Console de Gerenciamento do IIS” e pressione OK.

Após reiniciar o computador, abra “Painel de Controle > Ferramentas Administrativas > Gerenciador do Serviços de Informações da Internet (IIS)“.

No IIS Manager, dê botão direito em “Sites” e selecione “Adicionar Site FTP…

Dê um nome para seu Servidor FTP (PXE) e selecione como diretório onde salvamos o disco de instalação de nossa distribuição (C:\pxeboot\images).

Em “Configurações SSL e Associações“, deixe Todos os não atribuídos para liberar acesso a todos os IPs ao nosso servidor FTP. Deixe marcada a opção “Iniciar o site FTP automaticamente” e, em SSL (criptografia), selecione Sem SSL.

Agora, precisamos liberar o acesso para usuários “Anônimo” em “Autenticação” e adicionar a eles somente permissão de “Leitura“.

2.3. CONFIGURANDO O FIREWALL DO WINDOWS

Ao migrar para o Hyper-V, o que mais me surpreendeu foi a capacidade das VMs se comunicarem com o host (computador que possui o IIS e Hyper-V instalados) sem nenhuma configuração adicional. Apenas usando o IP (identificação do computador na rede, pode ser comparado ao nosso RG, que deve ser único), poderia acessar recursos da rede, como compartilhamento de arquivos e impressoras e acesso a internet.

Ping host no Hyper-VVerificando a disponibilidade do computador “Rorschach” (host do Hyper-V, nome em homenagem a série Watchmen).

Para acessar o servidor Web hospedado no computador host, pensava que o processo seria exatamente ao mesmo: Sem configurações adicionais, apenas digitar o IP do host no navegador e tudo fluiria bem.

Mas não é isso que ocorreu. Ao tentar digitar o IP do host no navegador, mostrava o erro de “Página não encontrada”, apesar do acesso local (no host) ocorrer sem problemas.

page-not-found(Reprodução)

A solução demorou um pouco para aparecer mas acessando esta página ela logo apareceu: Segurança.

No passado, lembro de ter lido na Revista PnP e artigos na internet sobre brechas de segurança que foram descobertas no IIS que permitiam o Acesso Remoto não autorizado de pessoas má intencionadas ao servidor.

Isso se referia principalmente ao Windows 2000, que vinha com o serviço pronto para funcionar, inclusive on-line. Lembrando que o Windows 2000 não acompanha Firewall.

Isso mudou com o Windows Server 2003, que requer a configuração manual das portas no Firewall que liberam o acesso da rede local ou externa ao servidor IIS, aumentando a segurança.

Mas, se você se esquece deste pequeno detalhe ou é apenas um programador que quer testar seu sistema Web em outras versões do Windows e nunca viu um servidor na vida, a dor de cabeça começa.

A solução para acessarmos nosso servidor Web nas VMs é liberar o acesso de computadores da rede interna a porta 80 (WWW) do nosso computador local (host).

Para isso, abra o Painel de Controle > Firewall do Windows. Na barra lateral, do lado esquerdo, clique em Configurações avançadas.

Configurações avançadas do Firewall do Windows

Agora, dê botão direito em Regras de Entrada e clique em Nova Regra…
Inbound Rules Windows Firewall Advanced

Abrirá o Assistente para Nova Regra de Entrada. Selecione a opção Porta e clique em Avançar.

ScreenShot016Na próxima tela, verifique se a opção TCP está marcada (selecionada por padrão) e, em Portas locais específicas, digite 80.

Liberando a Porta 80 no Servidor

Em Ação, você possui 2 escolhas para liberar o acesso:

  • Permitir a conexão: Use se você possui VMs com Windows XP e anteriores na rede. O acesso será seguro apenas se o computador que está acessando suporta o protocolo IPSec.
  • Permitir a conexão, se for segura: Use esta opção apenas se o computador que acessará o servidor Web é Windows Vista ou superiores. Aumenta a segurança do computador que está hospedando o site.

Como preciso testar a compatibilidade com o Internet Explorer 8 e apenas o Windows XP suporta ele (novas versões do Windows já possuem suporte ao Internet Explorer 9), selecionei a primeira opção.

Permitir acesso ao servidor Web (IIS)Com isso, informamos ao Firewall que toda conexão que vier ao nosso computador (entrada) que tiver como destino o servidor Web (80) deve ser permitida.

Agora, precisamos selecionar os computadores que possuirão acesso ao nosso computador. ESTE PROCESSO É O MAIS IMPORTANTE.

Desmarque a caixa Domínio (caso o computador host não seja um servidor com Windows Server instalado e esteja em um domínio) e Público.

Desmarcando público, removemos a possibilidade de pessoas da internet possuírem acesso ao nosso computador. Isso é importante por que este é apenas um ambiente de testes e não um servidor Web real (caso seje um servidor real, mantenha Público marcado). Após programarmos o site, precisamos hospedá-lo no nosso servidor real (geralmente um servidor Linux com Apache instalado).

Com isso, mantemos marcado apenas a opção Particular, que é nossa rede local (o que envolve os computadores virtualizados).

ScreenShot019

Agora precisamos dar um nome a regra (usei IIS HTTP). Após nomear a regra, clique em Concluir.

Com isso, as VMs poderão acessar nosso servidor Web do IIS. Mas lembrando que IIS não é algo que se brinque (pode permitir o acesso remoto ao nosso computador devido a uma má configuração no Firewall), podemos limitar ainda mais o acesso aos recursos do mesmo.

Podemos limitar a faixa de IP que poderá acessar nosso servidor e que usuários podem acessá-lo. Com isso, mesmo que um usuário externo tente acessar nosso computador de fora, ele somente obterá acesso caso o IP dele faça parte da nossa faixa (o que é impossível – e veremos por quê depois) e caso nosso computador possa autenticá-lo.

Na lista, procure pela nossa regra recém-criada e dê dois cliques. Entre na aba Entidades de Segurança Locais e, em Usuários autorizados, clique em Adicionar > Usuário local… 

Na próxima janela que aparecer, clique em Avançado…. Abrirá uma nova janela. Nela, clique em Localizar agora e na lista selecione Usuários autenticados.

ScreenShot021Com isso, apenas usuários que sejam reconhecidos pelo host poderão ter acesso ao nosso servidor Web. Se alguém da internet, por exemplo, tentar acessar nosso computador (e não for barrado pelo Firewall do modem ou do Windows) não obterá êxito por que nosso computador não o reconhecerá. Mas se um computador da rede local ou virtualizado tentar acessar, este obterá êxito.

Agora, entre na aba Escopo. Nesta aba, podemos definir as faixas de IP que podem ter acesso ao nosso servidor Web.

Antes de tudo, precisamos recapitular o que é um IP. O IP é como nosso CPF ou RG, mas para computadores. Cada computador do mundo possui um IP único, assim como nós possuímos um RG único.

Resumindo: Cada computador possui uma identificação única. Logo, podemos limitar apenas algumas identificações de possuírem acesso ao nosso servidor. As identificações que serão liberadas serão apenas a da nossa rede local. Assim, apenas nossos computadores locais terão acesso u.ú

Se você achou isso complicado, é por que você não viu nada ainda, ha ha.

Para obtermos nosso IP LOCAL, pressione as teclas <Windows> + <R>, digite cmd e pressione <ENTER>.

Na nova janela preta que se abrir, digite ipconfig /all e pressione <ENTER>. Agora, procure pelo adaptador de rede que possui acesso a internet (se você possui o Hyper-V instalado, ele se chama vEthernet) e anote a informação Máscara de Sub-rede e Endereço IPv4.

Obtendo Endereço IP e Máscara de Rede

Agora, abra a VM e novamente repita o processo, anotando o Endereço IP e Máscara de rede.

ScreenShot014

Podemos montar uma tabela com os dados encontrados:

host (Computador com Hyper-V e IIS instalado) 192.168.0.4
VM 192.168.0.5
Máscara de sub-rede 255.255.255.0

Lembra quando eu disse que se você achava a explicação de IP complicada é por que você não tinha visto nada ainda? O que é pior pode complicar, ha ha. u.ú

Quando dois ou mais computadores são da mesma rede, possuem máscara de redes iguais. A Máscara de rede determina quais partes do IP serão sempre fixas e quais mudarão sempre. Na prática, através da máscara de rede, podemos saber se dois computadores pertencem a mesma rede ou não.

Como você pode ver na tabela acima (em vermelho), 192.168.0 é um valor fixo (255.255.255 determina isso) e é a familía (ou “classe”) de IP que nossa rede local usa.

Existem 2 principais (mais comuns no dia-a-dia):

Classe A: 10 (10.1.1.1 geralmente é o IP do modem), máscara 255.0.0.0. (devido a mascara, apenas 10 é fixo)

Classe C: 192.168.0 (192.168.0.1 geralmente é o IP do modem), máscara 255.255.255.0. (devido a mascara, apenas 192.168.0 é fixo).

Os computadores da nossa rede poderão ter IPs como 192.168.0.1, 192.168.0.2, 192.168.0.3 […] 192.168.0.254, 192.168.0.255 mas NUNCA um IP 192.168.1.2, por exemplo.

É impossível para uma rede de classe A se comunique com uma rede de Classe C, por exemplo.

Com isso, podemos limitar o acesso ao nosso servidor IIS apenas para os computadores que tiverem o Endereço IP na faixa 192.168.0 (ou 10 caso possua uma rede classe A). Quando uma pessoa tentar acessar nosso servidor pela internet, ela não terá êxito.

Por quê?“. Por que ambas as faixas de IP são restritas para rede local e não são endereços válidos na internet. (Referência) Se um invasor tentar acessar nosso servidor pela internet, ele notará que o IP não está na faixa 192.168.0 e bloqueará o acesso. Se o invasor tentar mudar seu IP para esta faixa, não obterá êxito por que o provedor de internet (ISP) vai bloquear o acesso deste IP por que ele não é válido na internet.

Para liberarmos apenas esta faixa de IP, entre na aba Escopo e em Endereço IP Local clique em Adicionar…

Selecione a caixa Este Endereço IP ou sub-rede e digite 192.168.0.0/24 e pressione <ENTER>.

Habilitando suporte a apenas uma faixa de IPRealize o mesmo processo em Endereço IP Remoto.

Ah, mas da onde veio o /24″? Veio da Máscara de rede. Por isso estudamos um pouco da teoria ali encima.

Cada uma das 4 partes que compõe o Endereço IP são nada mais nada menos do que 8 bits. Somando as partes que não mudam (255.255.255, 3 partes = 8 + 8 + 8 = 24) obtemos o valor “24” que é o mesmo que 255.255.255.0. Na classe A, este valor seria apenas 8, por que apenas uma parte é fixa (255).

teoria-tcp-ip

Informar a faixa de IP é importante. Só por que o IP possui inicial 192.168.0 não significa que ele é Classe C. Ele pode pertencer a Classe A caso a máscara de rede da qual ele pertence seja 255. Com isso, apenas a primeira parte (192) não muda.

Com a máscara podemos ser específicos: Apenas se o IP tiver como parte fixa 192.168.0 (255.255.255.0) ele será aceito.

2.4. REMOÇÃO DO IIS

Mantê-los no sistema pode manter brechas no sistema desnecessárias. Não usamos nenhum tipo de configuração de segurança no nosso Servidor FTP e permitimos acesso anônimo, possibilitando que pessoas, através da Internet, possam ter acesso a nosso computador.

Para remover o IIS, abra “Painel de controle > Programas e Recursos“. Do lado esquerdo da tela (na barra), selecione “Ativar ou desativar componentes do Windows“.

Desmarque a caixa “Serviços de Informação da Internet” e dê OK.


REFERÊNCIAS

  1. Creating a New FTP Site in IIS 7 – Learn IIS – http://learn.iis.net/page.aspx/301/creating-a-new-ftp-site-in-iis-7/
  2. Article: Make your website public – IIS Home
    http://www.it-notebook.org/iis/article/public_website.htm
  3. Case Sensitivity – Official Microsoft IIS Forum – https://forums.iis.net/t/1165661.aspx
  4. Formato de arquivos MIME – CCM – http://br.ccm.net/contents/649-formato-de-arquivos-mime

Upload de arquivos no IIS

Decidi migrar meu ambiente de testes para aplicações Web, que antes usava o Apache (WampServer), para o IIS.

Após instalar o PHP no IIS com o Microsoft Web Platform Installer e migrar a minha aplicação para o mesmo, não conseguia hospedar arquivos nos Servidor 😦 Tudo aparentava estar OK, o PHP não mostrava nenhuma mensagem de erro, como se o upload tivesse sido realizado com sucesso.

Provavelmente o problema não estava no código, já que no WampServer funcionava. Pensei que poderia estar relacionado ao IIS e… bingo!

Não é um problema necessariamente do IIS, mas do Windows. Por padrão, os diretórios do site possuem permissão apenas de leitura e escrita, mas não de gravação.

Para resolvermos isso, dê botão direito no diretório que os arquivos são salvos após o upload e entre na aba Segurança. Nela, clique em Editar… 

Na nova janela que se abrir, clique em Adicionar… e na caixa de texto digite Todos e pressione <ENTER>.

Dando permissão de leitura e gravação para TodosVerifique se “Todos” possui a permissão de gravação na lista (por padrão possui!).

Com isso, o PHP deve conseguir salvar o arquivo normalmente no diretório ^-^’