Como transferir arquivos para servidor remoto em PHP
Armazenar arquivos ou imagens em um servidor externo é um comportamento comum hoje em dia. As pessoas usam armazenamento em nuvem como AWS, Azure, Google Cloud, Backblaze ou seu próprio servidor remoto para armazenar os arquivos. Nesse cenário, o usuário armazena arquivos em outro servidor e o chama por meio do link em seu servidor de aplicativos. A vantagem de fazer isso é economizar largura de banda em um servidor, o que resulta em melhor desempenho do servidor.
No passado, ao trabalhar em um projeto de cliente, seguíamos essa técnica para armazenar imagens em um servidor remoto. O que o cliente queria era enviar imagens para seu próprio servidor externo e chamá-lo de um aplicativo sempre que necessário. Nesse caso, precisávamos armazenar o caminho da imagem remota no banco de dados após carregá-lo em um servidor remoto.
Neste artigo, mostraremos como transferir arquivos para um servidor remoto em PHP através de FTP. Por causa deste tutorial, usamos imagens para fazer upload. O usuário pode escolher qualquer tipo de arquivo de acordo com sua necessidade.
Começando
Para prosseguir, você deve ter as credenciais de FTP do seu servidor. Outro requisito é o Composer. Certifique-se de ter instalado o Composer em seu sistema. Você usará um pacote chamado Flysystem que requer o Composer para instalação.
Abra o terminal no diretório raiz do seu projeto e execute o comando abaixo.
composer require league/flysystem
Após a instalação, crie um formulário HTML com entrada de arquivo e botão de envio. Este formulário será usado para navegar pela imagem e enviá-la ao servidor.
<form method="post" action="upload.php" enctype="multipart/form-data">
<input type="file" name="image" /><br>
<input type="submit" name="submit" value="Submit">
</form>
Transferir arquivos para servidor remoto
Você instalou a biblioteca Flysystem e também criou um formulário HTML. A próxima coisa que precisa fazer é pegar a imagem da entrada do arquivo e enviá-la a um servidor remoto. Seu upload.php
conterá o código abaixo.
<?php
require_once "vendor/autoload.php";
use LeagueFlysystemFilesystem;
use LeagueFlysystemAdapterFtp as Adapter;
if(isset($_POST['submit'])) {
if(isset($_FILES['image']['name']) && !empty($_FILES['image']['name'])) {
try {
$filesystem = new Filesystem(new Adapter([
'host' => 'HOST_NAME_HERE',
'username' => 'USERNAME_HERE',
'password' => 'PASSWORD_HERE',
]));
$stream = fopen($_FILES['image']['tmp_name'], 'r+');
$filesystem->putStream('public_html/images/'.$_FILES['image']['name'], $stream);
if (is_resource($stream)) {
fclose($stream);
}
echo "Image uploaded on external server successfully.";
} catch(Exception $e) {
echo $e->getMessage();
}
}
}
Substitua os marcadores de posição pelos valores reais. Aqui estamos armazenando imagens dentro do public_html/images
diretório. Você pode ajustar este caminho de acordo com sua necessidade. No código acima, Flysystem se conecta ao seu servidor através de FTP, lê o conteúdo da imagem e coloca a imagem no caminho especificado.
Esperamos que você saiba como transferir arquivos para o servidor remoto em PHP. Usando Flysystem, você também pode transferir arquivos no AWS S3, Azure, Dropbox, etc. Você pode aprender mais sobre este pacote em sua documentação oficial.
Artigos relacionados
- Como fazer upload de imagens para outro servidor através de FTP no Laravel
- Carregar arquivos para Amazon S3 usando AWS PHP SDK