segunda-feira, 7 de dezembro de 2015

PHP, IIS e MySQL juntos na rede caseira

IIS Internet Information Server 7, incluído no Windows 7
PHP 7.0.0
MySQL 5.7.9

Instalar MySQL

Baixar MySQL

http://dev.mysql.com/downloads/mysql/
Escolhi installer on line (dá para 32/64 bit).
download Windows (x86,32-bit), MySQL Installer MSI (mysql-installer-web-community-5.7.9.0.msi)

Instalar MySQL

só seguir padrão proposto do instalador
sem alterar pasta de instalação (default)
Develolper Default
type and Networking:
Config Type: Development Machine (default)
TCP/IP port Number: 3306 (default)
digitar 2 vezes senha root, não adicionar usuário agora
Configure MySQL Server as a Windows Service checado (default)
Windows Service Name: MySQL57 (default)
Start the MySQL Server at System Startup checado (default)
Standard System Accout selecionado (default)
clicar Execute

Uso de gerenciador de MySQL

Particularmente uso gerenciador HeidiSQL.
Só baixar e instalar, pode criar uma nova conexão 'local server' e conectar root e senha digitada na instalação MySQL.
Pode utilizar qualquer gerenciador ou não utilizar.

Acessar MySQL do servidor de outro computador remoto na rede privada caseira

liberar firewall

Controle Panel - System and Security - Windows Firewall - Allow a program through Windows Firewall
verificar se está checada MySQL57 da coluna Home/Work(Private), e quando clicar Details... a porta 3306 TCP está aberta

Criar um usuário não root que possa conectar de qualquer computador da rede privada

conectar MySQL root
grant all privileges on *.* to nomeDoUsuario@"192.168.0.%" identified by 'senhaDoUsuario' with grant option;
Precisa MySQL e/ou gerenciador instalado no outro computador remoto.

Acessar serviço web do servidor de outro computador na rede privada

abrir firewall para serviço web da rede privada
Controle Panel - System and Security - Windows Firewall - Allow a program through Windows Firewall
Clicar Change Settings
checar World Wide Web Services (HTTP) e também na coluna Home/Work(Private) -> OK

Testar tudo junto

Criar database e tabela MySQL para teste

CREATE DATABASE jantar;
USE jantar;
CREATE TABLE alimento (
 id INT UNSIGNED NOT NULL,
 nome VARCHAR(20) NOT NULL,
 PRIMARY KEY (id)
);
INSERT INTO alimento (id, nome) VALUES 
 (1, 'arroz'),
 (2, 'feijao');

Criar página PHP para teste

http://php.net/manual/en/pdo.connections.php
mostra código que pode testar conexão.
salvar como teste.php, e colocar na pasta inetpub\wwwroot
<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=jantar', 'root',
        'senhaRoot');
    foreach($dbh->query('SELECT * from alimento') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>

Testar no próprio servidor

acessar http://localhost/test.php no browser e ver se mostra conteúdo da tabela.

Testar da outra máquina da rede privada

verificar endereço IP do servidor
Network and Sharing Center - Local Area Connection - Details... e anotar IPv4 Address (ex. 192.168.0.15)
digitar http://192.168.0.15/test.php no browser e ver se mostra conteúdo da tabela.

PHP com IIS

IIS Internet Information Server 7, incluído no Windows 7
PHP 7.0.0
MySQL 5.7.9

Fiz teste do conjunto IIS, PHP, MySQL num computador Windows 7.
Coloco no público que possa ajudar quem tenta sozinho o mesmo trilho, alem de me servir como anotação de instalação quando preciso lembrar.

Ativar IIS

IIS Internet Information Server 7 vem com Windows 7, só precisa ativar.

Passos

Control Panel - Programs and Features - Turn Windows features on or off
Na janela Windows Features:
checar Internet Information Services -> tornar quadrado azul
clicar sinal plus para chegar e checar World Wide Web Services - Application Development Features - CGI

Teste

Entrar o endereço http://localhost no browser e ver a tela IIS7, está OK

Instalar PHP

Baixar PHP

http://windows.php.net/download/
download VC14 x64 Non Thread Safe (2015-Dec-03 20:07:24) Zip [22.79MB]
Escolhi dentro de muitas opções por ser 64bis e usar IIS.

Instalar PHP

só criar uma nova pasta c:\php70 e extrair dentro o arquivo .zip
copiar php.ini-production com novo nome php.ini na mesma pasta c:\php70

editar php.ini

editar o conteúdo de php.ini utilizando o próprio modelo
fastcgi.impersonate = 1 (tirat ; )
fastcgi.logging = 0 (tirat ; )
cgi.fix_pathinfo = 1 (tirat ; )
cgi.force_redirect = 0 (tirat ; e mudar valor)

extension_dir = "ext" (tirar ; )
extension=php_mysqli.dll (tirar ; )
extension=php_pdo_mysql.dll (tirar ; )
doc_root = C:\inetpub\wwwroot (lugar padrão IIS)

Teste

rodar php-cgi.exe na pasta c:\php70
Apareceu uma mensagem de erro que acusa falta VCRUNTIME140.dll
observar http://stackoverflow.com/questions/30811668/php7-missing-vcruntime140-dll
chegar a página https://www.microsoft.com/en-us/download/details.aspx?id=48145
e download Visual C++ Redistributable for Visual Studio 2015 e instalar
rodar php-cgi.exe na pasta c:\php70
Se abrir uma janela terminal prompt, o teste está OK, pode fechar apertando Ctrl + C

Configuração permissão de acesso

abrir propriedade da pasta php70
php70 Properties - aba Security
clicar Edit
clicar Add...
location = nome deste computador
digitar iis_iusrs e clicar Check Names -> aprarecer nome do objeto -> clicar OK
clicar OK sem alterar permissões padrão propostas

Cadastrar PHP runtime no IIS

Win + R -> digitar inetmgr -> clicar OK
clicar duplo Handler Mappings na janela [nomeDoComputador] Home, Features View
clicar Add Module Mapping... na janela Actions
Request path: *.php
Module: FastCgiModule
Executable: C:\php70\php-cgi.exe
Name: PHP_via_FastCGI
clicar Request Restrictions...
checar Invoke handler only if request is mapped to: na aba Mapping
selecionar File or folder
clicar OK -> OK -> Yes

Teste PHP com IIS

criar um novo arquivo com o conteúdo:
<?php  phpinfo();  ?>
e salvar como info.php
copiar este na pasta C:\inetpub\wwwroot
acessar http://localhost/info.php e se aparecer a tela da PHP está OK