uso do mkdir

Este fórum é para dúvidas onde a base da questão é a linguagem PHP.

Moderador: web

responder a dúvida

uso do mkdir

Mensagem por jesleyNonato Offline » Seg Dez 19, 2011 1:08 pm


Código: Selecionar todos
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php include("restrito.php"); ?>

<?php

//captura o nome de usuário
session_start();
$_SESSION["login"];

$usuario = $_SESSION["login"];

echo "$usuario";

// Pasta onde o arquivo vai ser salvo
$_PASTA['pasta'] = mkdir("uploads/$usuario", 0777);

// Tamanho máximo do arquivo (em Bytes)

$_UP['tamanho'] = 100000 * 100000 * 2; // 2Mb
// Array com as extensões permitidas

$_UP['extensoes'] = array('jpg', 'png', 'gif');
// Renomeia o arquivo? (Se true, o arquivo será salvo como .jpg e um nome único)

$_UP['renomeia'] = false;
            
// Array com os tipos de erros de upload do PHP

$_UP['erros'][0] = 'Não houve erro';

$_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP';

$_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML';

$_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente';

$_UP['erros'][4] = 'Não foi feito o upload do arquivo';

// Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro

if ($_FILES['arquivo']['error'] != 0) {

die("Não foi possível fazer o upload, erro:<br />" . $_UP['erros'][$_FILES['arquivo']['error']]);

exit; // Para a execução do script

}

// Caso script chegue a esse ponto, não houve erro com o upload e o PHP pode continuar

// Faz a verificação da extensão do arquivo

$extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));

if (array_search($extensao, $_UP['extensoes']) === false) {

echo "Por favor, envie arquivos com as seguintes extensões: jpg, png ou gif";

}

// Faz a verificação do tamanho do arquivo

else if ($_UP['tamanho'] < $_FILES['arquivo']['size']) {

echo "O arquivo enviado é muito grande, envie arquivos de até 2Mb.";

}

// O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta

else {

// Primeiro verifica se deve trocar o nome do arquivo

if ($_UP['renomeia'] == true) {

// Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg

$nome_final = time().'.jpg';

} else {

// Mantém o nome original do arquivo

$nome_final = $_FILES['arquivo']['name'];

}

sleep(1);

// Depois verifica se é possível mover o arquivo para a pasta escolhida


if (move_uploaded_file($_FILES['arquivo']['tmp_name'], '../../up_teste/uploads/$nome_final')) {

// Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo

echo "Upload efetuado com sucesso!";

echo '<br /><a href="' . $_UP['pasta'] . $nome_final . '">Clique aqui para acessar o arquivo</a>';

} else {

// Não foi possível fazer o upload, provavelmente a pasta está incorreta

echo "Não foi possível enviar o arquivo, tente novamente";

}

}
?>

Está apresentando os seguintes erros:

Notice: A session had already been started - ignoring session_start() in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\up_teste\teste.php on line 10
jesley
Strict Standards: Only variables should be passed by reference in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\up_teste\teste.php on line 56

Warning: move_uploaded_file(../../up_teste/uploads/$nome_final) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\up_teste\teste.php on line 97

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\Program Files (x86)\EasyPHP-5.3.8.1\tmp\php97D0.tmp' to '../../up_teste/uploads/$nome_final' in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\up_teste\teste.php on line 97
Não foi possível enviar o arquivo, tente novamente



detalhes...


jesleyNonato
MEMBRO
MEMBRO
Mensagens: 21
Registrado em: Seg Dez 05, 2011 5:13 pm


uso do mkdir

Mensagem por web Offline » Seg Dez 19, 2011 1:19 pm

O primeiro erro é porque não pode ter código HTML antes do session_start()

O outro problema é no

$nome_final = $_FILES['arquivo']['name'];

Ele está sendo criado dentro de um if, então, quando você tentar usar aqui

if (move_uploaded_file($_FILES['arquivo']['tmp_name'], '../../up_teste/uploads/$nome_final')) {

Ele não existe. Esse $nome_final tem que ser global.

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb1 [@] gmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 12460
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

uso do mkdir

Mensagem por jesleyNonato Offline » Seg Dez 19, 2011 1:37 pm

$nome_final = $_FILES['arquivo']['name'];

}

$nm_final = $nome_final;

sleep(2);

// Depois verifica se é possível mover o arquivo para a pasta escolhida


if (move_uploaded_file($_FILES['arquivo']['tmp_name'], '../../up_teste/uploads/$nm_final'))

Fiz da forma correta?

----------------------------------------------------------

Apontou estes erros:

Strict Standards: Only variables should be passed by reference in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\up_teste\teste.php on line 52

Warning: move_uploaded_file(../../up_teste/uploads/$usuario/$nm_final) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\up_teste\teste.php on line 95

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\Program Files (x86)\EasyPHP-5.3.8.1\tmp\phpD290.tmp' to '../../up_teste/uploads/$usuario/$nm_final' in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\up_teste\teste.php on line 95
Não foi possível enviar o arquivo, tente novamente

detalhes...


jesleyNonato
MEMBRO
MEMBRO
Mensagens: 21
Registrado em: Seg Dez 05, 2011 5:13 pm


uso do mkdir

Mensagem por web Offline » Seg Dez 19, 2011 1:49 pm

Antes do if que cria o $nome_final, você tem que criar $nome_final vazio

$nome_final = "";

Dentro do if, você atribui o valor

$nome_final.= $_FILES['arquivo']['name'];

Ai você vai obter o valor, lembrando que segundo o script, $nome_final é uma pasta, ou seja, você está tentando enviar algo para uma pasta que tem o nome do arquivo.

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb1 [@] gmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 12460
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

uso do mkdir

Mensagem por jesleyNonato Offline » Seg Dez 19, 2011 2:03 pm

Ok. Vou tentar resolver por partes...

Strict Standards: Only variables should be passed by reference in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\up_teste\teste.php on line 52

Qual o erro apontado pelo php... segue linha:


$extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));

detalhes...


jesleyNonato
MEMBRO
MEMBRO
Mensagens: 21
Registrado em: Seg Dez 05, 2011 5:13 pm


uso do mkdir

Mensagem por web Offline » Seg Dez 19, 2011 2:13 pm

O uso das funções ficou errado. Deve ser assim como nesse exemplo

Código: Selecionar todos
$var = "arq.ext";
$extensao = explode('.', strtolower($var));
echo end($extensao);


detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb1 [@] gmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 12460
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

uso do mkdir

Mensagem por jesleyNonato Offline » Seg Dez 19, 2011 2:24 pm

Código: Selecionar todos
// Verificar se o tipo de arquivo é uma imagem
if(!eregi(“^image\/(pjpeg|jpeg|png|gif|bmp)$”, $arquivo["type"]))
{
$erro[] = “Arquivo em formato inválido! A imagem deve ser jpg, jpeg,
bmp, gif ou png. Envie outro arquivo”;
}

Este seria o modo correto para verificar o tipo de um arquivo?

detalhes...


jesleyNonato
MEMBRO
MEMBRO
Mensagens: 21
Registrado em: Seg Dez 05, 2011 5:13 pm


uso do mkdir

Mensagem por web Offline » Seg Dez 19, 2011 2:33 pm

Sim, pode ser usado.

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb1 [@] gmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 12460
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

uso do mkdir

Mensagem por jesleyNonato Offline » Seg Dez 19, 2011 2:47 pm

Fiz assim:

declarei uma variavel $arquivo
$arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE;

e depois criei este if
if(!eregi(“^image\/(pjpeg|jpeg|png|gif|bmp)$”, $arquivo["type"]))
{
$erro[] = “Arquivo em formato inválido! A imagem deve ser jpg, jpeg,
bmp, gif ou png. Envie outro arquivo”;
}

agora está acusando apenas um erro:
Deprecated: Function eregi() is deprecated in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\up_teste\teste.php on line 56

mais o arquivo não é enviado!!!

detalhes...


jesleyNonato
MEMBRO
MEMBRO
Mensagens: 21
Registrado em: Seg Dez 05, 2011 5:13 pm


uso do mkdir

Mensagem por web Offline » Seg Dez 19, 2011 2:55 pm

O eregi não é mais usado. Tenta só com if, como mostrado nesse post

campo-imagem-obrigatorio_1_3148.html

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb1 [@] gmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 12460
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

uso do mkdir

Mensagem por jesleyNonato Offline » Seg Dez 19, 2011 3:58 pm

Consegui resolver todos os erros... contudo, encalhei aqui

if (move_uploaded_file($_FILES['arquivo']['tmp_name'], 'uploads/' .$nome_final)) {

'uploads/' precisaria que fosse dinamico, tipo no topo do meu código criei a pasta com

$_UP['pasta'] = mkdir("uploads/$usuario/", 0777);

puxando o $usuario da sessão do mysql...

e até o momento tentei tudo... mais ainda não consigo colocar o arquivo na pasta de forma automatica, manual vai tipo : uploads/teste/

detalhes...


jesleyNonato
MEMBRO
MEMBRO
Mensagens: 21
Registrado em: Seg Dez 05, 2011 5:13 pm


uso do mkdir

Mensagem por jesleyNonato Offline » Seg Dez 19, 2011 4:36 pm

Resolvido!!!

O erro estava aqui:

if (move_uploaded_file($_FILES['arquivo']['tmp_name'], 'uploads/$usuario/' .$nome_final)) {

if (move_uploaded_file($_FILES['arquivo']['tmp_name'], "uploads/$usuario/" .$nome_final)) {

Com aspas dupla ele grava sem apresentar nenhum erro!

VLW pelas dicas!

detalhes...


jesleyNonato
MEMBRO
MEMBRO
Mensagens: 21
Registrado em: Seg Dez 05, 2011 5:13 pm


uso do mkdir

Mensagem por web Offline » Seg Dez 19, 2011 4:49 pm

Boa.

detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb1 [@] gmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 12460
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

Anterior

responder a dúvida

Voltar para PHP

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 4 visitantes