Jump to content
cheires

Upload de ficheiro [Resolvido]

Recommended Posts

cheires

Olá a todos,

Estou a tentar implementar, num backofice um upload de ficheiros para o servidor, nomeadamente de fotografias.

Mas não ,me está a copiar o ficheiro para a directoria pretendida.

tenho o seguinte código dentro de um form com method POST:

HTML

<input name="ficheiro" id="ficheiro" type="file">

PHP

$path = "uploads/"; //directoria para onde serão copiadas as imagens
$nomeficheiro = $_FILES['ficheiro']['name']; //para ir buscar o nome do ficheiro
copy($_FILES['ficheiro']['name'],$path); //copia o ficheiro para a directoria, ou pelo menos devia copiar

Apenas consigo ir buscar o nome do ficheiro através do NAME, e deveria ser através do TMP_NAME

Usei o $HTML_POST_FILE, e também não funciona;

Usei a função move_uploaded_file e também não funciona.

Onde posso estar a errar?

Obrigado a todos

Abraço

--

Edit(brunoais):

  • Identificação da linguagem das tags code

Share this post


Link to post
Share on other sites
HappyHippyHippo

$path = "uploads/"; //directoria para onde serão copiadas as imagens
$nomeficheiro = $_FILES['fiheiro']['name']; //para ir buscar o nome do ficheiro
copy($_FILES['fiheiro']['name'],$path); //copia o ficheiro para a directoria, ou pelo menos devia copiar

1º - usa o move_uploaded_file porque o ficheiro encontrasse dentro de uma pasta de ficheiros temporários, logo nem sequer sabes onde se encontra, logo não tens o path do ficheiro temporário no servidor

2º - tens mesmo de usar o tmp_name porque o ficheiro temporário tem esse nome, caso contrário não é possivel saber que ficheiro a guardar

3º - estas a usar um caminho relativo para o local de gravação, aconselho a usar um absoluto e a verificares se o directório tem permissões de gravação

4º - não estás a dar o nome do ficheiro destino

exemplo:

$nome_ficheiro_destino = "ficheiro1";
$path = dirname(__FILE__)."/uploads/".$nome_ficheiro_destino;
move_uploaded_file($_FILES['ficheiro']['tmp_name'], $path);

--

Edit(brunoais):

  • Identificação da linguagem das tags code
  • Arranjar BBCode mal usado


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

Share this post


Link to post
Share on other sites
cheires

1º - usa o move_uploaded_file porque o ficheiro encontrasse dentro de uma pasta de ficheiros temporários, logo nem sequer sabes onde se encontra, logo não tens o path do ficheiro temporário no servidor

2º - tens mesmo de usar o tmp_name porque o ficheiro temporário tem esse nome, caso contrário não é possivel saber que ficheiro a guardar

3º - estas a usar um caminho relativo para o local de gravação, aconselho a usar um absoluto e a verificares se o directório tem permissões de gravação

4º - não estás a dar o nome do ficheiro destino

exemplo:

$nome_ficheiro_destino = "ficheiro1";
$path = dirname(__FILE__)."/uploads/".$nome_ficheiro_destino;
move_uploaded_file($_FILES['ficheiro']['tmp_name'], $path);

--

Edit(brunoais):

  • Identificação da linguagem das tags code
  • Arranjar BBCode mal usado

1º - Eu sei disso. O $_Files['ficheiro']['name'] dá-me o noe desse ficheiro;

2 º - o TMP_NAME não me retorna nome nenhum, e o NAME retorna-me o nome do ficheiro que pretendo faze upload (bem sei que deveria obter esse nome pelo TMP_NAME);

3º - pode passar pelo caminho absoluto o problema, de facto ainda não testei isso, mas, como para fazer o import de ficheiros se pode utilizar o caminho relativo, também deveria ser o mesmo caso para gravar os ficheiros;

4º - não preciso de dar o nome do ficheiro de destino. Usando a função copy ou a função move_uploaded_files só pede o nome do ficheiro a gravar e onde gravar o ficheiro.

Obrigado pelas sugestões

Share this post


Link to post
Share on other sites
AndreLC

Um reparo,

Ali na variável nomeficheiro e na função copy estás a buscar "fiheiro" em vez de "ficheiro".


echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Share this post


Link to post
Share on other sites
cheires

Um reparo,

Ali na variável nomeficheiro e na função copy estás a buscar "fiheiro" em vez de "ficheiro".

Obrigado pelo reparo, mas foi erro ao escrever, não fiz copy/paste.

Já agora o caminho absoluto também não resolveu o problema.

Share this post


Link to post
Share on other sites
HappyHippyHippo

1º - Eu sei disso. O $_Files['ficheiro']['name'] dá-me o noe desse ficheiro;

sim ... da-te o nome do ficheiro original, mas o nome do ficheiro temporário existente no servidor não é esse.

se não usares o tmp_name não existe nenhuma maneira do script php saber que ficheiro ir buscar da pool de ficheiros temporários

2 º - o TMP_NAME não me retorna nome nenhum, e o NAME retorna-me o nome do ficheiro que pretendo faze upload (bem sei que deveria obter esse nome pelo TMP_NAME);

se o tmp_name não te retorna nenhum nome é porque provavelmente terás um erro de transmissão.

verifica o campo error para verificar essa situação : $_FILES['ficheiro']['error']

este valor deverá ser 0 para nenhum erro

3º - pode passar pelo caminho absoluto o problema, de facto ainda não testei isso, mas, como para fazer o import de ficheiros se pode utilizar o caminho relativo, também deveria ser o mesmo caso para gravar os ficheiros;

sim pode ser relativo, mas é relativo ao "current working directory" que pode ser alterado a qualquer momento tornando essa solução muito "volátil"

4º - não preciso de dar o nome do ficheiro de destino. Usando a função copy ou a função move_uploaded_files só pede o nome do ficheiro a gravar e onde gravar o ficheiro.

já te disse para não usares o copy porque não sabes qual o path do ficheiro temporário no servidor !!!!

como o $_FILES['ficheiro']['tmp_name'] (ou o  $_FILES['ficheiro']['name']) só te dá o nome do ficheiro, é a mesma coisa que tentares copiar um ficheiro existente no "current working directory" com esse nome (directório diferente do directório que guarda os ficheiros temporários) para o destino.

usa o move_uploaded_file, a função existe para resolver esse prblema e não inventes, irá dar sempre problema !!!!

a solução já te foi dita. se continuares a bater no ceguinho deixarei de responder a este post ...


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

Share this post


Link to post
Share on other sites
AndreLC

Um exemplo:

function saveUploadedFileToCurrentPHPFolder (){              
	$origin=$_FILES["ficheiro"]['tmp_name'];     //patch absoluta do ficheiro na origem
	$destination="/uploads/".$_FILES["ficheiro"]["name"];  //path relativa do ficheiro, no directório corrente
	move_uploaded_file($origin, $destination); //move o ficheiro
	return $destination;
} //saveUploadedFileToCurrentPHPFolder

$whereIsTheSavedFile = saveUploadedFileToCurrentPHPFolder('ficheiro');

Que é o mesmo que o HappyHippyHippo fez ao teu código só que organizado em função.


echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Share this post


Link to post
Share on other sites
cheires

sim ... da-te o nome do ficheiro original, mas o nome do ficheiro temporário existente no servidor não é esse.

se não usares o tmp_name não existe nenhuma maneira do script php saber que ficheiro ir buscar da pool de ficheiros temporários

se o tmp_name não te retorna nenhum nome é porque provavelmente terás um erro de transmissão.

verifica o campo error para verificar essa situação : $_FILES['ficheiro']['error']

este valor deverá ser 0 para nenhum erro

sim pode ser relativo, mas é relativo ao "current working directory" que pode ser alterado a qualquer momento tornando essa solução muito "volátil"

já te disse para não usares o copy porque não sabes qual o path do ficheiro temporário no servidor !!!!

como o $_FILES['ficheiro']['tmp_name'] (ou o  $_FILES['ficheiro']['name']) só te dá o nome do ficheiro, é a mesma coisa que tentares copiar um ficheiro existente no "current working directory" com esse nome (directório diferente do directório que guarda os ficheiros temporários) para o destino.

usa o move_uploaded_file, a função existe para resolver esse prblema e não inventes, irá dar sempre problema !!!!

a solução já te foi dita. se continuares a bater no ceguinho deixarei de responder a este post ...

Amigo, ninguém aqui está a bater em ceguinho nenhum. Se não pretender ajudar, está no seu direito e vontade.

Apenas já tentei as soluções que apresentou e nenhuma funcionou, no meu caso.

Bem sei que como diz é a forma correcta de fazer as coisas, mas, como disse, no meu caso, não está a funcionar.

Agradeço as suas sugestões.

Share this post


Link to post
Share on other sites
HappyHippyHippo

Um exemplo:

function saveUploadedFileToCurrentPHPFolder (){              
	$origin=$_FILES["ficheiro"]['tmp_name'];     //patch absoluta do ficheiro na origem
	$destination="/uploads/".$_FILES["ficheiro"]["name"];  //path relativa do ficheiro, no directório corrente
	move_uploaded_file($origin, $destination); //move o ficheiro
	return $destination;
} //saveUploadedFileToCurrentPHPFolder

$whereIsTheSavedFile = saveUploadedFileToCurrentPHPFolder('ficheiro');

Que é o mesmo que o HappyHippyHippo fez ao teu código só que organizado em função.

cuidado !!!

tens o directório de destino um caminho absoluto : "/uploads/".$_FILES["ficheiro"]["name"]


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

Share this post


Link to post
Share on other sites
cheires

Bem, obrigado a todos pela ajuda.

Havia uma confusão com a directoria onde iria ser salvo o ficheiro, por isso não estava a funcionar.

Problema resolvido.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.