quinta-feira, 3 de janeiro de 2013

Upload de arquivos com AJAX e PHP

Simples tutorial de upload de arquivos com AJAX e PHP
O conceito
- Criar um formulário HTML simples para upload de arquivos
- Definir o target para um iFrame invisível que está na página. (logo veremos sobre e porque disso)
- Chamar uma função JavaSript para exibir uma animação enquanto o PHP rola nos bastidores.
- Após o PHP terminar o upload, esconder a animação
Criando o arquivo HTML
O arquivo HTML que usaremos neste artigo é bem simples. Ele tem apenas um formulário  com um campo do tipo FILE e um botão SUBMIT. No entanto, não podemos esquecer de definirmos o parâmetro enctype. Na verdade, além do que mencionei, precisamos adicionar um pouco mais de código nesse HTML do que um simples formulário. Primeiro precisamos de um bloco onde nós vamos mostrar a animação que ilustrará o progresso do upload. Precisamos também de um outro bloco onde informamos ao visitante se o upload foi sucesso ou não. Além disso, precisamos adicionar um iFrame oculto para a página que é utilizada como target do  formulário. Também adicionaremos um evento 'onsubmit' no formulário.
Enfim, o 'body' de nosso arquivo HTML ficará assim:
pegue o arquivo loader.gif aqui
<body>
    <p id="upload_process">Loading...<br/><img src="loader.gif" /></p>
    <p id="result"></p>
    <form action="upload.php" method="post" enctype="multipart/form-data" target="upload_target" onsubmit="startUpload();" >
        File: <input name="myfile" type="file" />
        <input type="submit" name="submitBtn" value="Upload" />
    </form>
    <iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
</body>
Por padrão, o conteúdo do bloco da animação de progresso do upload estará oculto. Precisaremos de uma função JavaScript que faz com que este bloco fique visível caso o botão submit for pressionado. É um código muito simples, que apenas alterará o parâmetro de visibilidade.
function startUpload(){
     document.getElementById('upload_process').style.visibility = 'visible';
    return true;
}
E tem mais. Precisaremos de uma outra função, onde à chamaremos ao final do processo de upload. A finalidade desta função será imprimir uma mensagem de resultado que dependendo do valor de um devido parâmetro, esconderá o bloco da animação ilustrativa de progresso do upload novamente.
function stopUpload(success){
     var result = '';
     if (success == 1){
        document.getElementById('result').innerHTML ='<span>O upload do arquivo foi executado com sucesso!<\/span><br/><br/>';
    }
    else{
        document.getElementById('result').innerHTML = '<span>Ocorreu um erro durante o upload do arquivo!<\/span><br/><br/>';
    }
     document.getElementById('upload_process').style.visibility = 'hidden';
    return true;
 }
Bom, antes de criarmos o código PHP, vamos criar um style CSS para caracterizar visualmente o bloco de progresso do upload. O estilo para usarmos no formulário é muito simples, mas o estilo do bloco de progresso e upload iremos definir o z-index e o parâmetro de visibilidade também.
#upload_process{
    z-index:100;
    position:absolute;
    visibility:hidden;
    text-align:center;
    width:400px;
    margin:0px;
    padding:0px;
    background-color:#fff;
    border:1px solid #ccc;
}
form{
    text-align:center;
    width:390px;
    margin:0px;
    padding:5px;
    background-color:#fff;
    border:1px solid #ccc;
}


Agora podemos focalizar no lado servidor e no responsável pela mágica do upload.
O código do lado servidor é escrito em PHP e é muito curto e simples. Primeiro precisamos definir
o caminho de destino do arquivo. Neste caso, vamos utilizar o diretório que já estamos trabalhando. 
Depois introduzimos uma variável que mostrará se houve um erro ou não durante o processo de upload
Em seguida, movemos o arquivo carregado no diretório tmp para o diretório que mencionei um pouco antes.
Continuando...
Definimos uma variável para lidar com o resultado do upload, ou seja,  se foi sucesso ou falha e ao final
do código inserimos um comando 'sleep()' para fazer a animação demorar um pouco mais no caso de uploads 
muito rápidos.
Enfim, o código PHP completo fica assim
<?php
$destination_path = getcwd().DIRECTORY_SEPARATOR;
$result = 0;
$target_path = $destination_path . basename( $_FILES['myfile']['name']);
if (@move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path))
{
    $result = 1;
}
sleep(1);
?>
Para concluir vamos dar uma olhada naquele iFrame que falamos no início:
A saída do código PHP será exibido/executado dentro do iFrame. Como você se lembra, o iFrame não estará visível, no entanto, podemos chamar uma função JavaScript nele. Na verdade é exatamente esse o ponto em que podemos chamar a função JavaScriptdefinida no código HTML para esconder a animação de progresso e exibir o resultado de upload de arquivos na página principal.
Nós podemos fazê-lo com o seguinte código JavaScript:
<script language="javascript" type="text/javascript">
window.top.window.stopUpload(<?php echo $result; ?>);
</script>


É isso aí. Qualquer dúvida fala aí nos comentários.
Bons estudos.






quinta-feira, 8 de novembro de 2012

Gerando chaves ssh-keygen para servidor Ubuntu no Amazon (AWS)


ssh-keygen é utilitário que faz parte do pacote openssh-client e é utilizado para gerar, gerenciar e converter chaves de autenticação para conexões ssh.
Comando:
ssh-keygen -t rsa
ele irá pedir o nome da chave ex: teste
ele pedirá uma senha deixe em branco
ele pedirá pra confirmar deixe em branco outra vez
Voce perceberá que a chave privada e a publica estão geradas
teste.pub
teste
o arquivo com extensão .pub que no nosso caso é teste.pub tem que subir ou importar para o painel do amazon
Abra o painel do amazon va no menu Key Pairs, e clique em import key pair subirá uma caixa de dialogo e ali escolha o arquivo que no nosso caso é teste.pub, e import para seu painel do Amazon o arquivo, feito isso abra o arquivo teste.pub e copie o conteudo de la para o seu servidor na pasta do ssh.
Comando
cd .ssh
Dentro dessa pasta irá ter uma arquivo chamado authorized_keys abra o:
Comando 
# nano authorized_keys 
copie o conteudo do arquivo teste.pub para esse arquivo, no final do conteudo apague o nome que estiver la e coloque o nome da chave, que no nosso caso é teste 
exemplo:
Mude o que estiver em azul
Como gera
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtpgl7uy1PjMKPOKXnutXv3XqEKCWH1nSqQH+Aj3Z6rcExRhBevobwYjId2iYl7LoL3M6Ktsj8iWwRaJtDyvuEYORWHfjz9Jm5mBEoil1qiVkJYlObc3K/dBCs1PS5hE4vVMh1KEqGo1GQFhZDBWO8LSdzzTb4aPo0iZ429O6sUWcG+EUPTUIP8EMWIq9bpw4B9UZjpCW0i033jUSFL4gp7rlvgJVbDzErz64wyV1Fp2BR7G7RaMSA3FjE5uXOPgXCRcwlHAt5L4YaMV3bjlQxQSFAVumLhoUGvqfiW8OFM66W4NTZM6V0Xb1GWZDIM6cRJf46LNyGSk16HorIF9PZ rodrigo@rodrigo
mude para
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtpgl7uy1PjMKPOKXnutXv3XqEKCWH1nSqQH+Aj3Z6rcExRhBevobwYjId2iYl7LoL3M6Ktsj8iWwRaJtDyvuEYORWHfjz9Jm5mBEoil1qiVkJYlObc3K/dBCs1PS5hE4vVMh1KEqGo1GQFhZDBWO8LSdzzTb4aPo0iZ429O6sUWcG+EUPTUIP8EMWIq9bpw4B9UZjpCW0i033jUSFL4gp7rlvgJVbDzErz64wyV1Fp2BR7G7RaMSA3FjE5uXOPgXCRcwlHAt5L4YaMV3bjlQxQSFAVumLhoUGvqfiW8OFM66W4NTZM6V0Xb1GWZDIM6cRJf46LNyGSk16HorIF9PZ teste

feche o arquivo salvando. 
Renomeie o arquivo teste para teste.pem, pois esse arquivo ficará na sua maquina local, pra que vc possa se conectar ao servidor, e deixe o arquivo teste.pub como está, guarde bem essas chaves pois precisará delas pra se conectar ao seu servidor pelo ssh.
Fazendo esse procedimento aqora é so se conectar pelo ssh.
sudo ssh -i chave nome de usuario@ip
exemplo:
sudo ssh -i teste.pem ubuntu@192.168.0.167
E isso galera !


terça-feira, 6 de novembro de 2012

Perdi a senha ou quero trocar a senha do MySQL no Ubuntu

Não se desespere! Tem jeito pra tudo.

Acesse o Terminal (Aplicativos/Acessórios/Terminal): 

Pare o servidor:
sudo /etc/init.d/mysql stop

Inicie a configuração do mysqld:
sudo mysqld --skip-grant-tables &

Entre no mysql como root:
mysql -u root mysql

Mude a senha do root:
UPDATE user SET Password=PASSWORD('SUANOVASENHA') WHERE User='root'; FLUSH PRIVILEGES; exit;

Pronto. Agora você pode acessar o MySQL normalmente com sua senha nova.