Upload de arquivo PHP
Com PHP, é fácil fazer upload de arquivos para o servidor.
No entanto, com facilidade vem o perigo, então sempre tenha cuidado ao permitir uploads de arquivos!
Configurar o arquivo "php.ini"
Primeiro, certifique-se de que o PHP esteja configurado para permitir uploads de arquivos.
Em seu arquivo "php.ini", procure a file_uploads
diretiva e defina-a como On:
file_uploads = On
Criar o formulário HTML
Em seguida, crie um formulário HTML que permita aos usuários escolher o arquivo de imagem que desejam enviar:
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post"
enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
Algumas regras a seguir para o formulário HTML acima:
- Certifique-se de que o formulário usa method="post"
- O formulário também precisa do seguinte atributo: enctype="multipart/form-data". Especifica qual tipo de conteúdo usar ao enviar o formulário
Sem os requisitos acima, o upload do arquivo não funcionará.
Outras coisas a serem observadas:
- O atributo type="file" da tag <input> mostra o campo de entrada como um controle de seleção de arquivo, com um botão "Procurar" ao lado do controle de entrada
O formulário acima envia os dados para um arquivo chamado "upload.php", que criaremos a seguir.
Criar o script PHP do arquivo de upload
O arquivo "upload.php" contém o código para fazer upload de um arquivo:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
Explicação do script PHP:
- $target_dir = "uploads/" - especifica o diretório onde o arquivo será colocado
- $target_file especifica o caminho do arquivo a ser carregado
- $uploadOk=1 ainda não é usado (será usado mais tarde)
- $ imageFileType contém a extensão de arquivo do arquivo (em letras minúsculas)
- Em seguida, verifique se o arquivo de imagem é uma imagem real ou uma imagem falsa
Nota: Você precisará criar um novo diretório chamado "uploads" no diretório onde o arquivo "upload.php" reside. Os arquivos enviados serão salvos lá.
Verifique se o arquivo já existe
Agora podemos adicionar algumas restrições.
Primeiro, vamos verificar se o arquivo já existe na pasta "uploads". Se isso acontecer, uma mensagem de erro será exibida e $uploadOk será definido como 0:
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
Limitar tamanho do arquivo
O campo de entrada de arquivo em nosso formulário HTML acima é denominado "fileToUpload".
Agora, queremos verificar o tamanho do arquivo. Se o arquivo for maior que 500 KB, uma mensagem de erro será exibida e $uploadOk será definido como 0:
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
Limitar tipo de arquivo
O código abaixo só permite que os usuários carreguem arquivos JPG, JPEG, PNG e GIF. Todos os outros tipos de arquivo dão uma mensagem de erro antes de definir $uploadOk para 0:
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
Script PHP de arquivo de upload completo
O arquivo "upload.php" completo agora se parece com isso:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])).
" has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Referência completa do sistema de arquivos PHP
Para uma referência completa das funções do sistema de arquivos, acesse nossa Referência completa do sistema de arquivos PHP .