Instalando Lamp Apache, MySQL, PHP

Para qualquer programador Web o eixo Apache, PHP, MySQL no Linux é essencial para  o bom desenvolvimento.

Essa instalação é focada em sistemas como Debian e Ubuntu.

Sugiro também que utilizem Netbeans com os plugins php+html para desenvolvimento.

Instalando no Debian e derivados:

Apache2:

# apt-get install apache2

PHP5 + Módulo Apache:

# apt-get install libapache2-mod-php5 php5-cli php5-common php5-cgi

MySQL5:

# apt-get install mysql-server

PhpMyAdmin:

# apt-get -y install phpmyadmin

Caso algum dia queira trocar senha do MySQL:

# mysqladmin -u root -p password UmaBoaSenha

Fontes:

http://www.vivaolinux.com.br/artigo/Apache2-PHP5-MySQL5-e-PhpMyAdmin-com-certificacao-SSL-no-Debian-Etch/?pagina=1

Upload de arquivos PHP

Formulário de envio de arquivos

A primeira coisa a fazer é criar um formulário HTML que, ao abrir uma janela, permitará a escolha do arquivo a enviar:

FORM method="POST" action="[seu arquivo PHP para fazer upload.php]" ENCTYPE="multipart/form-data">
          <INPUT type=hidden name=MAX_FILE_SIZE  VALUE=2048>
          <INPUT type=file name="nome do arquivo">
          <INPUT type=submit value="enviar">
</FORM>

É fundamental não esquecer a ENCTYPE=”multipart/form-data” ! Caso contrário, o formulário não terá nenhum efeito.

Além disso, o campo MAX_FILE_SIZE indica o tamanho máximo do arquivo a ser enviado pelo navegador mas, isto não é o bastante para garantir que os arquivos enviados não ultrapassarão um determinado tamanho na medida em que nem todos os navegadores levam em conta este tamanho. O valor do tamanho máximo do arquivo enviado é ajustável no disco rígido dentro a pasta de configuração “php.ini”.

Configuração do PHP para fazer upload

O arquivo de configuração « php.ini » contém diretivas que ajustam e que autorizam ou não o envio de arquivos através de um formulário:

file_uploads= On/Off autoriza ou não o envio de arquivos.
upload_tmp_dir = diretório define temporáriamente o diretório, possibilitando a recepção do arquivo enviado.
upload_max_filesize = 2M define o tamanho máximo permitido do arquivo. Se este limite for ultrapassado, o servidor enviará um alerta de erro.
post_max_size indica o tamanho máximo de dados enviados por formulário. Esta diretiva tem primazia sobre o upload_max_filesize ; assim, certifique-se que você tem post_max_size superior a upload_max_filesize

Se você não tiver acesso à configuração (no caso de um site hospedado em um servidor do provedor de acesso ou de uma hospedagem compartilhada), pode-se verificar a configuração graças à função phpinfo() :

<?
  phpinfo();
?>

Recuperação do arquivo com PHP

O arquivo e suas informações podem ser encontrados através da variável superglobal $_FILES[].
Para afixar o seu conteúdo, utilize o seguinte script:
<pre><? print_r($_FILES); ?></pre>

A saída deste código será da seguinte forma :

Array
(
    [nome_do_arquivo] => Array
        (
            [name] => MaBelleImage.jpg
            [type] => image/jpg
            [tmp_name] => chemin_complet_du_fichier_uploadé
            [error] => 0
            [size] => 1000
        )
)

No caso acima, trata-se de uma imagem JPEG pesando 1 Mo.

Os campos $_FILES[name], $_FILES[type], $_FILES|error], $_FILES[size] permitem testar o tipo de arquivo, seu tamanho , seu nome e verificar se houve erros.

Assim, você pode corrigir os erros da seguinte maneira:

<?
if ($_FILES['nome do arquivo']['error']) {
          switch ($_FILES['nome_do_arquivo']['error']){
                   caso 1: // UPLOAD_ERR_INI_SIZE
                   echo"O arquivo ultrapassa o limite autorizado pelo servidor(arquivo php.ini) !";
                   break;
                   caso 2: // UPLOAD_ERR_FORM_SIZE
                   echo " O arquivo ultrapassa o limite autorizado no formulário HTML !");
                   break;
                   caso 3: // UPLOAD_ERR_PARTIAL
                   echo "O envio do arquivo foi interrompido durante a transferência!";
                   break;
                   caso 4: // UPLOAD_ERR_NO_FILE
                   echo "O arquivo que você enviou tem um tamanho zero !");
                   break;
          }
}
else {
 // $_FILES['nome_do arquivo']['error'] vale 0 ou seja UPLOAD_ERR_OK
 // o que significa que não houve erro
}
?>

Com o move_uploaded_files() é possível transferir uma imagem do diretório temporário a um diretório de destino :

<?

if ((isset($_FILES['nom_du_fichier']['arquivo'])&&($_FILES['nome_do arquivo']['error'] == UPLOAD_ERR_OK)) {
$caminho_destino = '/var/www/arquivos/';
move_uploaded_file($_FILES['nome_do_arquivo']['tmp_name'], $caminho_destino.$_FILES['nome_do_arquivo']['name']);
}
?>

Fonte:
http://pt.kioskea.net/faq/111-php-atualizar-arquivos

PHP, MySQL e UTF-8 (o guia)

Trabalhar com UTF-8 no PHP pode dar algumas dores de cabeça pra quem é novo, e até mesmo para alguns mais velhinhos… O PHP trabalha por padrão com ISO-8859-1, que são os caracteres latinos que estamos acostumados. Entretanto, o UTF-8 tem uma abrangência maior de caracteres e o ideal seria que nos acostumássemos a usar este charset nas páginas.
Este pequeno tutorial tem como objetivo deixar bem claro quais os passos a se tomar para construir uma aplicação totalmente baseada no charset UTF-8, desde as páginas HTML, passando pelo PHP e por fim no MySQL.
Antes de tudo, aconselho que aprenda a criar os seus arquivos utilizando o UTF-8 sem BOM, que evitará dores de cabeça futuras quando estiver trabalhando com cookies, sessões e headers.
O segundo passo é definir, no PHP que o charset dos arquivos que serão gerados terão a codificação UTF-8, com o seguinte código:
<?php
ini_set('default_charset','UTF-8');
?>

Só setar o charset no PHP não adianta muito, pois alguns navegadores usam a codificação padrão da região do usuário, a não ser que o seguinte código esteja entre as tags <head> e </head>:
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
Com isso, você já pode trabalhar tranquilamente com UTF-8 e PHP sem ter problemas com os caracteres.
Alguns cuidados são necessários quando for trabalhar com o MySQL, entretanto. Vou ensinar como se faz pelo PHPMyAdmin, que acredito que todos que começaram a trabalhar com MySQL estão acostumados.
Em primeiro lugar, ao criar o seu banco de dados, já crie usando o collation utf8_general_ci. Se o banco de dados já tiver um collation definido, não é necessário definir o collation das tabelas, pois elas herdarão o do banco. Mas mesmo assim é bom especificar o charset e collation de cada tabela. Como? Assim:
CREATE TABLE Clientes (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
nome VARCHAR(60) NOT NULL,
PRIMARY KEY(id)
)
TYPE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

Ok. Nossa tabela está trabalhando com UTF-8 agora. Podemos começar a programar e relaxar porque nossos problemas com charset estão resolvidos, certo?
A resposta é não.
Se você continuar a programar com o sistema assim, os dados do banco serão inseridos e consultados de maneira correta, mas você vai perceber problemas quando tentar fazer buscas com palavras acentuadas insensível a maiúsculas, por exemplo: Água, água e agua serão palavras totalmente diferentes, sem contar que a ordenação de resultados com palavras que começam com letras acentuadas sairá bem bagunçada, coma letra Ó vindo antes de B, por exemplo.
Esse é o problema que eu tive e que demorei eras pra descobrir. O banco estava OK, o PHP também, o mesmo com as páginas HTML… e quando eu inseria algum dado pelo PHPMyAdmin, este era inserido corretamente, o que significava que o problema não era no banco e sim na aplicação.
Depois de meses na verdade foram apenas algumas horas de pesquisa, desconfiei que havia algo na conexão com o MySQL que estava dando esse problema. Fui fuçar no Manual do PHP e encontrei a seguinte solução:
<?php
ini_set('default_charset','UTF-8'); // Para o charset das páginas e
mysql_set_charset('utf8'); // para a conexão com o MySQL
?>

Com isso todos os meus problemas foram resolvidos. Na verdade não, pois tive que alterar todos os campos acentuados da tabela…
Dá para usar a função mysql_client_encoding para identificar o charset da conexão com o MySQL, mas não acho necessário pra quem quer trabalhar diretamente com UTF-8 e não com vários charsets.

Fonte:

http://alessandrosantos.com.br/?p=214