PHP e MySQL no Linux

Módulo I - Infraestrutura

Módulo I - Infraestrutura

  • Debian/Linux
    • Gerenciamento de pacotes
    • Diretórios e arquivos de configuração
    • Usuários e permissões
  • Apache2
    • Instalação
    • Administração
  • MySQL
    • Instalação
    • Administração
    • Backup
  • PHP
    • Instalação
    • Integração com Apache2

Debian

Por que?

  • Dpkg
  • Segurança
  • Estabilidade
  • Atualizações
  • Comunidade
  • Mais 43 mil pacotes

Diretórios

  • / - Diretório raiz
  • /etc - Configurações do sistema
  • /home - Arquivos pessoais
  • /var - Arquivos variáveis
  • /tmp - Arquivos temporários
  • /root - Diretório pessoal do root

Comandos básicos

  • ls - Exibe os arquivos de um diretório
  • cd - Altera entre diretórios
  • cp - Copia arquivos/diretórios
  • mv - Move/renomeia arquivos/diretórios
  • rm - Remove arquivos/diretórios
  • mkdir - Cria um diretório

Editores de texto

  • vi / vim
  • nano
  • emacs (não vem instalado)

Permissões


$ ls -l
-rw-rw-r--  1 rogerio rogerio       991 Jul  9  2015 teste.txt
drwxr-xr-x  3 rogerio rogerio      4096 Jul  9  2015 Desktop
drwxrwxr-x 10 rogerio rogerio      4096 Jun  9  2015 outrodir
  • d diretório
  • l link
  • -  arquivo "normal"

Primeiro char

  • Primeira: Permissão do usuário
  • Segunda: Permissão do grupo do usuário
  • Terceira: Permissão dos demais usuários

Sequências de 3

  • r Leitura
  • w Escrita
  • x Execução
  • - Desabilitada

Cada sequência

Permissões

chmod change mode

  • u usuário
  • g grupo
  • O outros
  • a todos

Método simbólico

  • r leitura
  • w escrita
  • x execução
  • + adicionar
  • - remover
  • = definir

$ chmod u+w teste.txt
$ chmod g+rw teste.txt

Método numérico

Permissão Binário Decimal
- - - 000 0
- - x 001 1
- w - 010 2
- w x 011 3
r - - 100 4
r - x 101 5
r w - 110 6
r w x 111 7

$ chmod 600 teste.txt
$ chmod 755 teste.txt

Permissões

chown change owner/group


$ chown usuario:grupo teste.txt

$ chown :grupo teste.txt

Gerenciador de pacotes


# apt-get update

# apt-get upgrade

# apt-get dist-upgrade

Gerenciador de pacotes


# apt-get install <nomes-dos-pacotes>

# apt-get remove <nomes-dos-pacotes>

# apt-get purge <nomes-dos-pacotes>

MySQL

Instalação


# apt-get install mysql-server

Conectando


$ mysql -uroot -p

mysqladmin


$ mysqladmin -uroot -p create <database>

$ mysqladmin -uroot -p drop <database>

$ mysqladmin -uroot -p status

$ mysqladmin -uroot -p shutdown

Alguns comandos


> show databases;

> show tables;

> use <database> [;]

> desc <table>;

> show create table <table>;

> quit [;]

SQL - DDL


> CREATE DATABASE treinamento;

DDL (Data Definition Language) refers to the CREATE, ALTER and DROP statements


> CREATE TABLE alunos (
    id INT AUTO_INCREMENT,
    nome VARCHAR(180) NOT NULL,
    PRIMARY KEY (id)
);

> DROP TABLE alunos;

SQL - DML


> INSERT INTO alunos (nome) VALUES ('Rogério');

DML (Data Manipulation Language) refers to the INSERT, UPDATE and DELETE statements


> UPDATE alunos SET nome = 'Rogério Lino' WHERE nome = 'Rogério';

> DELETE FROM alunos WHERE id = 1;

SQL - DQL


> SELECT 
      id, nome 
  FROM 
      alunos 
  WHERE
      nome LIKE 'Rogério%'
  ORDER BY
      nome ASC
  LIMIT 20
  OFFSET 10

DQL (Data Query Language) refers to the SELECT, SHOW and HELP statements (queries)

Segurança


# mysql_secure_installation

> CREATE USER 'rogerio'@'localhost' IDENTIFIED BY '123456';

Permissão - GRANT


> GRANT ALL ON treinamento.* TO 'rogerio'@'localhost';

> GRANT SELECT ON outrobanco.tabela TO 'rogerio'@'%';

> SHOW GRANTS FOR 'root'@'localhost';

Permissão - REVOKE


> REVOKE INSERT ON *.* FROM 'rogerio'@'localhost';

> REVOKE INSERT ON *.* FROM 'rogerio'@'%';

Conexão Remota


# nano /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address = 0.0.0.0

Backup


$ mysqldump -uroot -p <database> > database-backup.sql

$ mysqldump -uroot -p --all-databases > all-databases-backup.sql

$ mysqldump -uroot -p --no-data <database> > only-database-schema.sql

$ mysqldump -uroot -p --no-create-info <database> > only-data-backup.sql

Restore


$ mysql -uroot -p <database> < database-backup.sql

$ mysql -uroot -p < all-databases-backup.sql

Apache2

Instalação


# apt-get install apache2

O serviço


# service apache2 start

# service apache2 stop

# service apache2 reload

# service apache2 status

Configuração

Sites disponíveis

/etc/apache2/sites-available/<arquivo>.conf

Sites habilitados

/etc/apache2/sites-enabled/<link>

VirtualHost

# /etc/apache2/sites-available/000-default.conf


<VirtualHost *:80>

    #ServerName localhost
    
    DocumentRoot /var/www/example

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

.htaccess

Arquivos .htaccess oferecem um meio de fazer mudanças nas configurações por-diretório.

# /etc/apache2/sites-available/000-default.conf

# ...

    <Directory /var/www/html>
        AllowOverride All
    </Directory>

# ...

.htaccess


# Protegendo com Basic Authentication
AuthType Basic
AuthName "My Protected Area"
AuthUserFile /path/to/.htpasswd
Require valid-user

# Desabilitando listagem do diretório
Options -Indexes

PHP

Instalação


# apt-get install php5

Testando


$ php --version

$ php -i

$ php -S 127.0.0.1:8000

$ php -a

Driver MySQL


# apt-get install php5-mysql

PDO

<?php

$dsn  = 'mysql:host=hostname;dbname=treinamento';
$user = 'rogerio';
$pass = '123456';

try {
    $conn = new PDO($dsn, $user, $pass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->prepare('SELECT * FROM alunos');
    $stmt->execute();

    $rs = $stmt->fetchAll();
    print_r($rs);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

Integração Apache2


# apt-get install libapache2-mod-php5

Testando


# nano /var/www/html/info.php
<?php

phpinfo();

http://127.0.0.1/info.php

PHP e MySQL no Linux I

By Rogério Alencar Lino Filho