Exercio PHP Orientado a Objeto

4 respostas Resolvido
htmlphp
V

Tenho um formulário simples onde o usuário deve escolher um arquivo txt e então o formulario é enviado para uma classe.php onde é criado o objeto texto.

porem o que é enviado é somente o nome do arquivo, fazendo com que só se seja possível abrir o arquivo txt, se o mesmo estiver na mesma pasta da classe.

gostaria da ajuda de vcs para poder poder abrir o arquivo de qualquer diretório que o usuário escolher, mesmo que seja necessário sempre realizar um copia do arquivo e enviar para a pasta.

segue formulario:

<body>
    <form name="arquivoTXT" action="classe.php" method="post">
    <label>Escolha um arquivo de texto</label>
    <input name="arquivo" type="file" />
    <input type="submit" value="Enviar" />
    </form>
    </body>

e a Classe.php

<?php
    	class Texto{
    		private $conteudo;		
    		
    		function Pegar_Arquivo($texto){
    		 $this->conteudo = $texto;
    			}
    	
    		function Mostra_Texto(){
    			foreach($this->conteudo as $texto) {
    			echo $texto."<br/>" ;
    			}
    		}	
    	}
    		
    	$t1 = new Texto;	
    	$texto= $_POST['arquivo'];
    	$texto=file("$texto");
    	$t1->Pegar_Arquivo($texto);
    	
    	$t1->Mostra_Texto();
    ?>

4 Respostas

javaflex
V

segui o exemplo do link, criei um arquivo pra receber o upload e salvar na pasta “arquivos” porem ao executar diz que não foi definido a variável ‘arquivo’.
segue os arquivos:
forme Princiapal

<body>
<form name="arquivoTXT" action="upload.php" method="post">
<label>Escolha um arquivo de texto</label>
<input name="arquivo" type="file" />
<input type="submit" value="Enviar" />
</form>
</body>

upload.php que deveria fazer a transferência de pasta:

<?php
	$diretorio = "/arquivos";
	$arquivo = $_FILES["arquivo"];
	
	if (move_uploaded_file($arquivo["tmp_name"], "$diretorio/".$arquivo["name"])) { 
    echo "Arquivo enviado com sucesso!"; 
} 
else { 
    echo "Erro, o arquivo n&atilde;o pode ser enviado."; 
}
?>

<form action="classe.php" method="post">
<input type="hidden" name="arquivo" value="<?php $arquivo["name"]; ?>" >
<input type="submit" value="Ver">
</form>

e o classe.php

<?php
	class Texto{
		private $conteudo;		
		
		function Pegar_Arquivo($texto){
		 $this->conteudo = $texto;
			}
	
		function Mostra_Texto(){
			foreach($this->conteudo as $texto) {
			echo $texto."<br/>" ;
			}
		}	
	}
		
	$t1 = new Texto;	
	$texto= $_POST['arquivo'];
	$texto=file("$texto");
	$t1->Pegar_Arquivo($texto);
	
	$t1->Mostra_Texto();
?>

Agradeço qualquer ajuda, Obrigado!

Jothar_Aleksander
Solucao aceita

O form tem que estar ‘habilitado’ para manipular arquivos:

9.5 Superglobal $FILES

É um array associativo que permite recuperar um arquivo do servidor, ou seja, fazer um upload . Essa variável requer que o método de requisição/resposta seja o HTTP POST o que equivale a dizer que essa superglobal sempre trabalhará junto com a superglobal $_POST. Também exige que o formulário esteja habilitado para requisições multipartes (enctype=“multipart/form-data”).

enctype : esse atributo só se torna válido quando o valor do atributo method for post . Define o tipo de codificação (padrão MIME) que o formulário aplica aos dados dos campos quando do envio das informações ao servidor.
Os valores padrão são:

1 – application /x-www-form-urlencoded : é a codificação padrão dos formulários HTML, o que significa que se o atributo enctype for omitido, essa codificação será usada.

2 – multipart / form-data : é a codificação que define que as mensagens são formadas por tipos de mídia compostos (formados por muitas partes).

3 – text / plain : é a codificação em que os dados são enviados como texto simples, ou seja, sem codificação.

Ou seja, o seu form deve estar parecido com isso:

<!DOCTYPE html>
<html lang="pt-BR">
	<head>
		<meta charset="UTF-8">
		<title>Upload de Arquivos</title>
	</head>
	<body>
		<form enctype="multipart/form-data" action="upload.php" method="post">
			<fieldset>
				<legend>Upload</legend>
				<input type="hidden" name="MAX_FILE_SIZE" value="99999999"/>
				<input name="arquivo" type="file"/>
				<input name="btnCadastro" type="submit" value="Enviar Arquivo"/>
			</fieldset>
		</form>
	</body>
</html>

No arquivo upload.php, pode ter algo como:

<?php
	$uploaddir = 'Arquivos/Docs/';
	$uploadfile = $uploaddir . basename($_FILES['arquivo']['name']);

	echo '<pre>';
	if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploadfile)) {
		echo "Arquivo válido e enviado com sucesso.\n";
	} else {
		echo "Possível ataque de upload de arquivo!\n";
	}

	echo 'Aqui está mais informações de debug:';
	print_r($_FILES);

	print "</pre>";

?>

No link que o @javaflex passou (muito bom, por sinal) tem tudo bem explicado.

javaflex

Não seguiu. No exemplo usa enctype=“multipart/form-data” e voce nao fez igual.

Criado 23 de agosto de 2019
Ultima resposta 24 de ago. de 2019
Respostas 4
Participantes 3