Manipulação de Arquivos PHP

O módulo de manipulação de arquivos PHP fornece a capacidade de criar , ler , gravar e excluir arquivos em um servidor com uma variedade de anexos.

É essencial usar esse recurso ao criar aplicativos da Web que precisam armazenar ou manipular dados em arquivos.

O objetivo aqui é fornecer a você uma compreensão clara da manipulação de arquivos PHP em seu aplicativo da Web para gerenciar arquivos da maneira mais eficiente e eficaz.



Manipulação de Arquivos PHP

Você pode criar, ler, carregar, editar e modificar arquivos em PHP usando várias funções.

Manipule arquivos com cuidado!

Você deve ter muito cuidado ao manipular arquivos.

Um erro pode causar muitos danos.

Os erros mais comuns são:

  • Editando o arquivo errado.
  • Criando um HDD cheio de dados inúteis.
  • Excluir acidentalmente o conteúdo de um arquivo por engano.

Função Readfile() do PHP

Readfile() é uma função usada para ler arquivos do buffer de entrada e escrevê-los no buffer de saída.

Vamos supor que temos um arquivo de texto chamado acronym.txt  armazenado no servidor, que possui o seguinte conteúdo:

PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
HTML = HyperText Markup Language
CSS = Cascading Style Sheets
JS = JavaScript
JSON = JavaScript Object Notation
AJAX = Asynchronous JavaScript and XML
ASP = Active Server Page
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language

O código PHP abaixo é usado para ler o arquivo do disco e gravá-lo no buffer (a função readfile() retorna o valor de quantos bytes foram lidos após o sucesso):

Example: 

1
2
3
4
5
6
7
8
9
<?php
echo readfile("acronym.txt");
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Podemos ler arquivos de diferentes locais de arquivo no computador usando a função readfile() :

Example: 

1
2
3
4
5
6
7
8
9
<?php
echo readfile("/downloads/data/acronym.txt");
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Exemplo de Explicação

O exemplo acima lê o conteúdo de um arquivo chamado acronym.txt localizado no diretório /downloads/data/  no servidor usando a função readfile() .

  • A função readfile() é uma função PHP integrada que lê o conteúdo de um arquivo e o envia diretamente para o navegador sem armazená-lo em uma variável. Neste caso, o conteúdo do arquivo “acronym.txt” será enviado diretamente para o navegador como texto.
  • A função readfile() recebe um único parâmetro, que é o caminho para o arquivo a ser lido. Neste caso, o caminho é “ /downloads/data/acronym.txt “. O caminho é relativo ao diretório raiz do servidor, o que significa que o arquivo está localizado em um diretório chamado “ downloads ” dentro de um diretório chamado “ dados ”.
  • A instrução echo é usada para enviar o conteúdo do arquivo para o navegador. A função readfile() retorna o número de bytes lidos do arquivo, o que não é importante neste caso, pois estamos interessados ​​apenas em enviar o conteúdo do arquivo para o navegador.
A saída deste código será o conteúdo do arquivo “acronym.txt” localizado no caminho especificado.

Usar readfile() é útil se tudo o que você precisa fazer é ler o conteúdo de um arquivo.


Abrir Arquivo PHP – fopen()

Se você deseja abrir um arquivo usando um método melhor, pode usar a função fopen() .

Você obterá mais opções com esta função do que com a função readfile() .

Durante esta lição, abriremos um arquivo de texto conhecido como acronym.txt  que criamos acima.

fopen() tem dois parâmetros, o primeiro dos quais especifica o nome do arquivo a ser aberto e o segundo dos quais identifica o modo no qual o arquivo deve ser aberto.

Conforme o exemplo abaixo, também é exibida uma mensagem caso a função fopen() não consiga abrir o arquivo especificado, indicando o erro:

Example: 

1
2
3
4
5
6
7
8
9
10
11
<?php
$file = fopen("acronym.txt", "r") or die("The file could not be opened!");
echo fread($file,filesize("acronym.txt"));
fclose($file);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Dica : Você poderá aprender sobre as funções fread() e fclose() na seção a seguir.

Existem várias maneiras de abrir o arquivo, incluindo:

Modos Visão geral
r Arquivo somente leitura. Inicialmente, o ponteiro do arquivo é colocado no início.
c Arquivo somente para gravação. Cria um novo arquivo se não existir ou apaga o conteúdo do arquivo existente se não existir. Inicialmente, o ponteiro do arquivo é colocado no início.
a Arquivo somente para gravação. Os dados no arquivo são preservados. Inicialmente, o ponteiro do arquivo é colocado no final. Se o arquivo não existir, crie outro
x Escreva apenas em um novo arquivo . O valor de retorno é FALSE e um erro será lançado se o arquivo já existir
r+ Arquivo de leitura/gravação . Inicialmente, o ponteiro do arquivo é colocado no início.
w+ Ler/escrever arquivo. Cria um novo arquivo se não existir ou apaga o conteúdo do arquivo existente se não existir. Inicialmente, o ponteiro do arquivo é colocado no início.
a+ Ler/escrever arquivo. Os dados no arquivo são preservados. Inicialmente, o ponteiro do arquivo é colocado no final. Se o arquivo não existir, crie outro
x+ Ler/escrever em um novo arquivo. Os dados no arquivo são preservados. Inicialmente, o ponteiro do arquivo é colocado no final. Se o arquivo não existir, crie outro

Arquivo PHP – fread()

Quando fread() é chamado, ele lê o conteúdo de um arquivo que já está aberto.

PHP fread() recebe dois parâmetros, o primeiro dos quais é o nome do arquivo que deve ser lido e o segundo especifica quantos bytes serão lidos de uma vez.

Aqui está o código PHP que lê todo o conteúdo de um arquivo acronym.txt da seguinte forma:

fread($file,filesize(“acronym.txt”));

Arquivo PHP – fclose()

Para fechar um arquivo aberto, usamos a função fclose() .

Sempre que você terminar de trabalhar em um arquivo, é uma boa prática de programação fechá-lo.

Você não deseja que um arquivo aberto ocupe espaço em seu servidor e consuma recursos enquanto está em execução.

Para usar o método fclose() , precisamos passar para ele o nome do arquivo que estamos tentando fechar (ou uma variável que contenha o nome do arquivo):

<?php
$file = fopen(“acronym.txt”, “r”);
// There is a code that needs to be executed….
fclose($file);
?>

Arquivo PHP - Ler Linha Única

Fgets() é uma função que lê uma linha de um arquivo por vez do disco.

Aqui está um exemplo de saída da primeira linha do arquivo acronym.txt a seguir:

Example: 

1
2
3
4
5
6
7
8
9
10
11
<?php
$file = fopen("acronym.txt", "r") or die("The file could not be opened!");
echo fgets($file);
fclose($file);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lembre-se : o ponteiro do arquivo foi movido para a próxima linha após uma chamada para a função fgets() .

Verificar Fim do Arquivo – feof()

Uma função feof() é usada para verificar se um arquivo atingiu o final do arquivo ( EOF ).

O uso da função feof() permite que você percorra os dados com comprimento desconhecido de maneira eficiente.

Segue um exemplo de leitura do arquivo acronym.txt linha por linha, até chegar ao final do arquivo:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$file = fopen("acronym.txt", "r") or die("The file could not be opened!");// Until file ends, output one line
while(!feof($file)) {
echo fgets($file) . "<br>";
}
fclose($file);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Arquivo PHP - Ler um único caractere

Usamos a função fgetc() quando queremos ler um único caractere de um arquivo.

Aqui está um exemplo de como o arquivo acronym.txt é lido caractere por caractere até chegar ao final do arquivo:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$file = fopen("acronym.txt", "r") or die("The file could not be opened!");// Until file ends, output one character
while(!feof($file)) {
echo fgetc($file);
}
fclose($file);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Exemplo de Explicação

O exemplo acima lê o conteúdo de um arquivo chamado acronym.txt usando a função fopen() .

  • A função fopen() retorna um identificador de arquivo, que é armazenado na variável $file – Se o arquivo não puder ser aberto, a função die() é chamada, que gera uma mensagem de erro para o navegador e encerra o script.
  • O parâmetro “ r ” passado para a função fopen() especifica que o arquivo deve ser aberto em modo somente leitura.
  • O loop while é usado para ler o arquivo caractere por caractere até que o final do arquivo seja alcançado.
  • A função feof() é usada para determinar se o fim do arquivo foi alcançado.
  • A função fgetc() é usada para ler um caractere do identificador de arquivo e a instrução echo envia o caractere para o navegador.
  • Por fim, a função fclose() é usada para fechar o identificador de arquivo.
Lembre-se : quando a função fgetc() é chamada, o ponteiro do arquivo é movido para o próximo caractere no arquivo.

Gravação de arquivo PHP

Nesta seção do artigo, vamos criar um arquivo PHP e gravar dados nele.

Veremos algumas das diferentes funções e parâmetros que são usados ​​ao criar e gravar dados em arquivos PHP.

A primeira coisa que você deve verificar ao tentar executar este código é se seu arquivo PHP recebeu acesso para gravar informações em um disco rígido.


Arquivo de gravação do PHP – fwrite ()

Para gravar em um arquivo, você pode usar a função fwrite() em seu programa.

fwrite() aceita dois parâmetros.

  • O primeiro contém o nome do arquivo a ser gravado.
  • o segundo contém a string a ser gravada.

O exemplo a seguir cria um novo arquivo chamado names.txt com os nomes de algumas pessoas:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$file = fopen("names.txt", "w") or die("The file could not be opened!");
$text = "Bill Gates";
fwrite($file, $text);
$text = "Jeff Bezos";
fwrite($file, $text);
fclose($file);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

O arquivo names.txt foi gravado duas vezes durante esse processo. Enviamos a string $txt toda vez que tentamos gravar no arquivo, que continha primeiro a string “ Bill Gates ” e depois a string “ Jeff Bezos “.

Assim que terminamos de escrever, usamos a função fclose() para fechar o arquivo.

Aqui está a aparência do arquivo names.txt se o abrirmos:

Bill Gates
Jeff Bezos

PHP Criar Arquivo – fopen()

O arquivo PHP fopen() é usado para criar um novo arquivo – Pode parecer confuso para você, mas no PHP é possível criar um arquivo usando a mesma função usada para abri-lo.

Quando você usa fopen() para abrir um arquivo que não existe, se o arquivo estiver sendo aberto para escrever ( w ) ou anexar ( a ), ele criará o arquivo para você.

Aqui está um exemplo de como criar um novo arquivo chamado newfile.txt seguindo as instruções abaixo.

Ele será criado no mesmo diretório onde está localizado o código PHP e terá o seguinte nome:

Example: 

1
2
3
4
5
6
7
8
9
<?php
$file = fopen("newfile.txt", "w");
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Atualização/Substituição de Arquivo PHP

Como nomes.txt contém alguns dados, pode-se mostrar o que acontece quando um arquivo é aberto para acesso à escrita enquanto já estamos escrevendo outros dados nele.

Os dados do arquivo existente serão apagados e um novo arquivo será criado do zero.

Vamos abrir nosso arquivo existente names.txt e vamos gravar alguns dados nele da seguinte forma:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$file = fopen("names.txt", "w") or die("The file could not be opened!");
$text = "Bernard Arnault";
fwrite($file, $text);
$text = "Elon Musk";
fwrite($file, $text);
fclose($file);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Agora, se abríssemos o arquivo names.txt , tanto Bill Gates  quanto Jeff Bezos  teriam desaparecido, e apenas os dados que acabamos de escrever permaneceriam:

Bernard Arnault
Elon Musk

Upload de arquivo PHP

O upload de arquivos tornou-se parte integrante de muitos aplicativos da Web na era digital atual, permitindo que os usuários compartilhem, armazenem e acessem arquivos pela Internet.

Nesta seção, você aprenderá como criar sistemas de upload de arquivos PHP eficientes e seguros, seja você iniciante em PHP ou um desenvolvedor experiente.

Examinaremos como criar um formulário HTML para entrada de arquivos, como processar os arquivos no lado do servidor e como validar e proteger os arquivos após o upload.


Configurar Arquivo PHP.ini

A primeira coisa que você deve fazer é certificar-se de que o PHP está configurado para permitir uploads de arquivos.

A diretiva file_uploads pode ser encontrada em seu arquivo php.ini . Certifique-se de que esteja definido como Ligado.

file_uploads = On

Criar formulário HTML

Para o formulário HTML existem algumas regras que precisam ser seguidas:

  • O método deve ser definido para postar  no formulário.
  • Também é necessário incluir o seguinte atributo no formulário: enctype=”multipart/form-data” . Especifica que tipo de conteúdo deve ser usado ao enviar o formulário.
  • Se você não atender aos requisitos acima, não poderá fazer upload de arquivos.
  • Campos de entrada com atributos type=”file” são exibidos como controles de seleção de arquivo com um botão “ Browse ” próximo a eles.
  • Estamos enviando os dados para um arquivo chamado imageUpload.php , que criaremos na próxima etapa.

Agora, você precisará criar um formulário HTML que permitirá aos visitantes selecionar o arquivo de imagem que gostariam de enviar.

Abaixo está o código de exemplo:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<body>
<form action="imageUpload.php" method="post" enctype="multipart/form-data"> Select image to upload:
<input type="file" name="imageToUpload" id="imageToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Script de upload de arquivos PHP

O arquivo imageUpload.php  contém o código que será usado para enviar um arquivo para o servidor:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$dir = "uploads/";
$file = $dir . basename($_FILES["imageToUpload"]["name"]);
$upload_status = 1;
$imgFileType = strtolower(pathinfo($file, PATHINFO_EXTENSION)); // Check if image file is a actual image or fake image
if (isset($_POST["submit"])) {
$check = getimagesize($_FILES["imageToUpload"]["tmp_name"]);
if ($check !== false) {
echo "File is an image – " . $check["mime"] . ".";
$upload_status = 1;
} else {
echo "This file is not an image.";
$upload_status = 0;
}
}
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

A seguir está uma explicação do script PHP:

  1. $dir = “uploads/” – especifica o local de onde o arquivo será carregado.
  2. O parâmetro $file especifica a localização do arquivo que será carregado.
  3. $upload_status = 1 ainda não foi usado (será usado no futuro).
  4. $imgFileType consiste em uma string que contém a extensão do arquivo da imagem (em letras minúsculas).

A próxima coisa que você deve fazer é determinar se o arquivo de imagem é uma imagem real ou se é uma imagem falsa.

Lembre-se : Para fazer isso, você precisará criar um diretório chamado “uploads” dentro do diretório em que o arquivo “imageUpload.php” está localizado. Haverá uma pasta na qual você pode salvar os arquivos que você enviar.

Verifique se o arquivo já existe

Agora podemos adicionar algumas restrições.

Nosso primeiro passo será verificar se o arquivo já existe na pasta “ uploads ” do servidor.

Se isso acontecer, uma mensagem de erro será exibida e o valor de $upload_status será definido como 0 como resultado:

Example: 

1
2
3
4
5
6
7
8
9
10
11
// Check if file already exists
if (file_exists($file)) {
echo "File already exists.";
$upload_status = 0;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Limite de tamanho dos arquivos PHP

No formulário HTML acima, há um campo denominado imageToUpload que permite aos visitantes fazer upload de arquivos.

A próxima coisa que queremos fazer é verificar o tamanho do arquivo.

Uma mensagem de erro será exibida se o tamanho do arquivo exceder 500 KB e um status de 0 for definido como upload_status se o tamanho do arquivo exceder 500 KB:

Example: 

1
2
3
4
5
6
7
8
9
10
11
// Check file size
if ($_FILES["imageToUpload"]["size"] > 500000) {
echo "File size must be up to 500KB";
$upload_status = 0;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Limite de tipo de arquivo PHP

No código abaixo, os visitantes só poderão fazer upload de arquivos JPG, JPEG, PNG e GIF.
A mensagem de erro será exibida antes de definir $upload_status como 0 para todos os outros tipos de arquivos:

Example: 

1
2
3
4
5
6
7
8
9
10
11
// Allow certain file formats
if($imgFileType != "jpg" & $imgFileType != "png" && $imgFileType != "jpeg" && $imgFileType != "gif" ) {
echo "Only JPG, JPEG, PNG & GIF files are allowed!";
$upload_status = 0;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Aqui está o arquivo “imageUpload.php” completo, que agora se parece com isto:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
$dir = "uploads/";
$file = $dir . basename($_FILES["imageToUpload"]["name"]);
$upload_status = 1;
$imgFileType = strtolower(pathinfo($file, PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if (isset($_POST["submit"])) {
$check = getimagesize($_FILES["imageToUpload"]["tmp_name"]);
if ($check !== false) {
echo "File is an image – " . $check["mime"] . ".";
$upload_status = 1;
} else {
echo "This file is not an image.";
$upload_status = 0;
}
}
// Check if file already exists
if (file_exists($file)) {
echo "File already exists.";
$upload_status = 0;
}
// Check file size
if ($_FILES["imgFileType"]["size"] > 500000) {
echo "File size must be up to 500KB";
$upload_status = 0;
}
// Allow certain file formats
if ($imgFileType != "jpg" & $imgFileType != "png" && $imgFileType != "jpeg" && $imgFileType != "gif") {
echo "Only JPG, JPEG, PNG & GIF files are allowed!";
$upload_status = 0;
}
// Check if $upload_status is set to 0 by an error
if ($upload_status == 0) {
echo "Your file was not uploaded.";
// if everything is ok, try to upload file} else {
if (move_uploaded_file($_FILES["imgFileType"]["tmp_name"], $target_file)) {
echo "The file " . htmlspecialchars(basename($_FILES["imgFileType"]["name"])) . " has been uploaded.";
} else {
echo "There was an error uploading your file.";
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Exemplo de Explicação

No exemplo acima, primeiro definimos o diretório onde o arquivo carregado será armazenado e construímos o caminho do arquivo concatenando o caminho do diretório e o nome base do arquivo carregado.

Em seguida, o script verifica se o formulário enviado possui um botão “ enviar ” e se o arquivo carregado é uma imagem real, chamando a função “ getimagesize() ” no nome do arquivo temporário.

Se o arquivo for uma imagem, o tipo MIME é repetido para o usuário e a variável “ upload_status ” é definida como 1. Caso contrário, uma mensagem de erro é exibida e a variável “upload_status” é definida como 0.

Em seguida, o script verifica se o arquivo já existe no diretório de destino. Em caso afirmativo, uma mensagem de erro é exibida e a variável “upload_status” é definida como 0.

O script também verifica se o tamanho do arquivo é maior que 500 KB e permite apenas o upload de determinados formatos de arquivo (JPG, JPEG, PNG e GIF).

Se o tamanho ou formato do arquivo for inválido, uma mensagem de erro é exibida e a variável “upload_status” é definida como 0.

Por fim, verificamos se a variável upload_status está definida como 0 por um erro. Se for, uma mensagem de erro é exibida. Se tudo estiver bem, o script tentará mover o arquivo carregado para o diretório de destino usando a função move_uploaded_file()  .

Se o arquivo for movido com sucesso, uma mensagem de sucesso será exibida, caso contrário, uma mensagem de erro será exibida.
Nós valorizamos o seu feedback.
+1
1
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone