Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

PF2G

move_upload_file não funciona

Mensagens Recomendadas

PF2G    0
PF2G

Boa tarde,

Eu estou a tentar fazer o upload de uma imagem, mas está-me a dar problemas no 'move_upload_file'.

form.php

<form role="form" method="POST" enctype="multipart/form-data" action="/administrador/includes/projectValidations.php/'.$action.'">

[...]

<div class="form-group">
	   <label for="projectLogo">Logotipo</label>

	   <input type="file" id="projectLogo" name="projectLogo" placeholder=""
								   data-val="true" data-val-required="Deve escolher a imagem do projecto." />

	    <p class="field-validation-valid" data-valmsg-for="projectLogo" data-valmsg-replace="true"></p>
</div>

projectValidations.php

if(isset($_POST['formValid']))
{
 $error = array();
 //Nome do Projecto
 if($_POST['projectNome']=='')
 {
  $error['nome']='Nome é obrigatório.';
 }
 else
  $nome=$_POST['projectNome'];

 //Website do Projecto
 if($_POST['projectUrl']=='')
 {
  $error['url']='URL é obrigatório.';
 }
 else
  $website=$_POST['projectUrl'];

 //Logo do Projecto
 include('uploadImage.php');

 if(count($error) != 0)
 {
  echo '<pre style="float:left; width:100%; margin-top:100px;">'.print_r($error, true).'</pre>';
 }
 else
 {
  echo '<pre style="float:left; width:100%; margin-top:100px;">YEAHH</pre>';
 }

uploadImage.php

if(isset($_FILES['projectLogo']['name']))
{
 /*
  Nome: $_FILES['nomeInput']['name'] (imagem1.jpg)
  Tipo: $_FILES['nomeInput']['type'] (image/jpeg)
  Nome Temporário: $_FILES['nomeInput']['tmp_name'] (/var/tmp/php6jqBHz)
  Tamanho: $_FILES['nomeInput']['size'] (1048576 Bytes - 1Mb)
 */
 $arquivo_tmp = $_FILES['projectLogo']['tmp_name'];
 $nome = $_FILES['projectLogo']['name'];
 $tamanho = $_FILES['projectLogo']['size'];
 $maxSize = '2097152'; //2Mb
 // Verificar extensão da imagem
 $extensao = strrchr($nome, '.');
 // Converte a extensão para minúsculo
 $extensao = strtolower($extensao);
 // Somente imagens, .jpg .jpeg .png
 // Separar extensões, pretendidas, por ';'
 if(strstr('.jpg;.jpeg;.gif;.png', $extensao))
 {
  // Criar um nome único para a imagem
  // Evitar imagens duplicadas no servidor.
  $novoNome = md5(microtime()) . $extensao;
  // Pasta para onde enviamos a imagem
  $destino = '/administrador/images/projects/' . $novoNome;
  if($tamanho <= $maxSize )
  {
   // Run the move_uploaded_file() function here
   $moveResult = @move_uploaded_file($arquivo_tmp, $destino);

   if ($moveResult == true)
   {
 echo "File has been moved from " . $arquivo_tmp . " to" . $destino;
 die;
   }
   else
   {
 echo $error['logo']='Erro ao salvar o arquivo. Verifique as permissões de escrita.';
   }

   die;
  }
  else
   $error['logo']='Tamanho máximo é de 2Mb.';
 }
}
else
{
 // $error - Array de validação do ficheiro '/administrador/includes/projectValidations.php'
 $error['logo']='A imagem é obrigatória.';
}

O erro que me está a dar é o : "Erro ao salvar o arquivo. Verifique as permissões de escrita."

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    169
bioshock

Como é que sabes se o erro que estás a ter é realmente de escrita? :D

$moveResult = @move_uploaded_file($arquivo_tmp, $destino);

Ao colocares o arroba (@) estás a omitir os erros que possam advir dessa função, o que não é aconselhável.

A resposta da função move_uploaded_file pode retornar-te dois tipos de output:

  1. FALSE - se o nome do ficheiro for inválido
  2. FALSE - e a mensagem de warning/error associado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
PF2G    0
PF2G

Não resultou :/

$destino = 'http://localhost/administrador/images/projects/' . $novoNome;

Quando tiro o @ aparece-me estes erros:

Warning: move_uploaded_file(http://localhost/administrador/images/projects/54031d9e94d63a24dba816ddacbf315e.jpg): failed to open stream: HTTP wrapper does not support writeable connections in C:\wamp\www\administrador\includes\uploadImage.php on line 38
Warning: move_uploaded_file(): Unable to move 'C:\wamp\tmp\php5E59.tmp' to 'http://localhost/administrador/images/projects/54031d9e94d63a24dba816ddacbf315e.jpg' in C:\wamp\www\administrador\includes\uploadImage.php on line 38
Editado por PF2G

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

quando te disseram para tirar o @ não foi para corrigir mas para dar a mensagem de erro que te foi apresentada.

segundo, apresenta o código que tens, e não digas que já foi apresentado porque sei que o código que produziu essa mensagem de erro não e o código que se encontra no primeiro post.

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
PF2G    0
PF2G

Primeiro: Eu sei que ao tirar o @ apresentaria os erros, daí ter apresentado que erros me aparacem.

Segundo: o código é o mesmo, a única coisa que alterei foi pôr o caminho completo no $destino.

Agradecia que ajudasses a resolver o problema e não criticar ;-) *peace*

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

Primeiro: Eu sei que ao tirar o @ apresentaria os erros, daí ter apresentado que erros me aparacem.

então porque disseste:

Não resultou :/

Segundo: o código é o mesmo, a única coisa que alterei foi pôr o caminho completo no $destino.

como disse, não é o mesmo ...

coloca como tens no post inicial pois a recomendação para colocar o full path (e não patch) é para ser ignorada


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
PF2G    0
PF2G

Quando disse que não tinha resultado era a parte do full path.

Mas a pedido de várias famílias, aí vai o código:

form

<form role="form" method="POST" enctype="multipart/form-data" action="/administrador/includes/projectValidations.php/'.$action.'">
<div class="form-group">
						    <label for="projectLogo">Logotipo</label>

						    <input type="file" id="projectLogo" name="projectLogo" placeholder=""
								   data-val="true" data-val-required="Deve escolher a imagem do projecto." />

						    <p class="field-validation-valid" data-valmsg-for="projectLogo" data-valmsg-replace="true"></p>
					    </div>

projectValidations.php

   if(isset($_POST['formValid']))
{
 $error = array();
 //Nome do Projecto
 if($_POST['projectNome']=='')
 {
  $error['nome']='Nome é obrigatório.';
 }
 else
  $nome=$_POST['projectNome'];

 //Website do Projecto
 if($_POST['projectUrl']=='')
 {
  $error['url']='URL é obrigatório.';
 }
 else
  $website=$_POST['projectUrl'];

 //Logo do Projecto
 include('uploadImage.php');

 if(count($error) != 0)
 {
  echo '<pre style="float:left; width:100%; margin-top:100px;">'.print_r($error, true).'</pre>';
 }
 else
 {
  echo '<pre style="float:left; width:100%; margin-top:100px;">YEAHH</pre>';
 }
 die;

uploadImage.php

<?php
echo '<pre style="float:left; width:100%; margin-top:100px;">';
if(isset($_FILES['projectLogo']['name']))
{
 /*
  Nome: $_FILES['nomeInput']['name'] (imagem1.jpg)
  Tipo: $_FILES['nomeInput']['type'] (image/jpeg)
  Nome Temporário: $_FILES['nomeInput']['tmp_name'] (/var/tmp/php6jqBHz)
  Tamanho: $_FILES['nomeInput']['size'] (1048576 Bytes - 1Mb)
 */
 $arquivo_tmp = $_FILES['projectLogo']['tmp_name'];
 $nome = $_FILES['projectLogo']['name'];
 $tamanho = $_FILES['projectLogo']['size'];
 $maxSize = '2097152'; //2Mb
 // Verificar extensão da imagem
 $extensao = strrchr($nome, '.');
 // Converte a extensão para minúsculo
 $extensao = strtolower($extensao);
 // Somente imagens, .jpg .jpeg .png
 // Separar extensões, pretendidas, por ';'
 if(strstr('.jpg;.jpeg;.gif;.png', $extensao))
 {
  // Criar um nome único para a imagem
  // Evitar imagens duplicadas no servidor.
  $novoNome = md5(microtime()) . $extensao;
  // Pasta para onde enviamos a imagem
  $destino = 'http://localhost/administrador/images/projects/' . $novoNome;
  if($tamanho <= $maxSize )
  {
   // Run the move_uploaded_file() function here
   $moveResult = move_uploaded_file($arquivo_tmp, $destino);

   if ($moveResult == true)
   {
 echo "File has been moved from " . $arquivo_tmp . " to" . $destino;
 die;
   }
   else
   {
 echo $error['logo']='Erro ao salvar o arquivo.';
   }

   die;
  }
  else
   $error['logo']='Tamanho máximo é de 2Mb.';
 }
}
else
{
 // $error - Array de validação do ficheiro '/administrador/includes/projectValidations.php'
 $error['logo']='A imagem é obrigatória.';
}
echo '</pre>';
?>

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

o pedido de várias famílias é o seguinte :

coloca como tens no post inicial pois a recomendação para colocar o full path (e não patch) é para ser ignorada


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.