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
PHP e MySQL no Linux I
- 700