Este é um exemplo completo que permitirá que você faça o upload de um arquivo em um formulário local e, em seguida, envie esse arquivo para outro servidor usando cURL. Vamos criar dois arquivos: index.html
para o formulário local e enviaArquivo.php
para receber o arquivo no servidor remoto.
- index.html (Formulário Local)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Enviar Arquivo</title>
</head>
<body>
<h1>Formulário de Envio de Arquivo</h1>
<form method="post" enctype="multipart/form-data" action="enviar.php">
<div>
<label for="arquivo">Selecione um arquivo:</label>
<input type="file" name="arquivo" id="arquivo" required>
</div>
<div>
<label for="descricao">Descrição:</label>
<textarea name="descricao" id="descricao" rows="4" cols="50"></textarea>
</div>
<div>
<input type="submit" value="Enviar">
</div>
</form>
</body>
</html>
- enviar.php (Receber o Arquivo no Servidor Local e Enviar via cURL)
<?php
// Verifica se algum arquivo foi enviado
if (isset($_FILES['arquivo']) && !empty($_FILES['arquivo']['name'])) {
// Define o diretório onde o arquivo será temporariamente armazenado (pode ser ajustado conforme necessário)
$diretorio_temporario = '/caminho/para/diretorio_temporario/';
// Verifica se o diretório temporário existe, se não, cria-o
if (!is_dir($diretorio_temporario)) {
mkdir($diretorio_temporario, 0755, true);
}
// Define o caminho completo para salvar o arquivo temporariamente (diretório temporário + nome do arquivo original)
$caminho_temporario = $diretorio_temporario . $_FILES['arquivo']['name'];
// Move o arquivo para o diretório temporário
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $caminho_temporario)) {
// Arquivo recebido e salvo temporariamente com sucesso
echo 'Arquivo recebido e salvo temporariamente com sucesso!';
// Dados adicionais a serem enviados junto com o arquivo via cURL (pode ser ajustado conforme necessário)
$descricao = $_POST['descricao'];
// URL do servidor remoto que receberá o arquivo (ajuste conforme a URL do seu servidor remoto)
$url_servidor_remoto = 'https://seu_servidor_remoto.com.br/enviaArquivo.php';
// Criação de um arquivo temporário com o CURLFile (necessário para enviar o arquivo via cURL)
$arquivo_curl = new CURLFile($caminho_temporario, $_FILES['arquivo']['type'], $_FILES['arquivo']['name']);
// Dados adicionais que serão enviados junto com o arquivo via cURL (ajuste conforme necessário)
$dados_adicionais = array(
'descricao' => $descricao,
// Você pode adicionar mais dados aqui, se necessário
);
// Inicia a sessão cURL
$ch = curl_init();
// Define as opções para o cURL
curl_setopt($ch, CURLOPT_URL, $url_servidor_remoto);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dados_adicionais + array('arquivo' => $arquivo_curl));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Executa a requisição cURL
$resultado = curl_exec($ch);
// Verifica se houve algum erro na requisição cURL
if (curl_errno($ch)) {
echo 'Erro na requisição cURL: ' . curl_error($ch);
} else {
// Exibe a resposta do servidor remoto
echo 'Resposta do servidor remoto: ' . $resultado;
}
// Fecha a sessão cURL
curl_close($ch);
// Remove o arquivo temporário após o envio
unlink($caminho_temporario);
} else {
// Erro ao salvar o arquivo temporariamente
echo 'Erro ao salvar o arquivo temporariamente!';
}
} else {
// Nenhum arquivo enviado
echo 'Nenhum arquivo foi enviado!';
}
?>
Neste exemplo, o arquivo index.html
contém o formulário que permite ao usuário selecionar um arquivo e inserir uma descrição. Quando o formulário é enviado, o arquivo é temporariamente armazenado em um diretório local temporário.
Em seguida, o arquivo enviar.php
recebe o arquivo temporariamente armazenado, prepara os dados adicionais a serem enviados e envia o arquivo via cURL para o servidor remoto. A resposta do servidor remoto também é exibida na tela para fins de depuração.
Lembre-se de ajustar as URLs dos servidores remotos nas variáveis $url_servidor_remoto
dos arquivos enviar.php
e enviaArquivo.php
de acordo com a configuração do seu ambiente. Além disso, adapte os caminhos dos diretórios de destino e temporários conforme suas necessidades específicas.
No exemplo que forneci, o arquivo que vai para o servidor remoto é enviado usando o método cURL como parte dos dados adicionais. Vou adicionar um exemplo de como você pode tratar esse arquivo no servidor remoto enviaArquivo.php
.
No enviaArquivo.php
no servidor remoto (onde o arquivo será enviado), você pode receber o arquivo enviado via cURL da seguinte maneira:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['arquivo'])) {
// Diretório onde o arquivo será armazenado no servidor remoto (ajuste conforme necessário)
$diretorio_destino = '/caminho/para/diretorio_destino/';
// Verifica se o diretório destino existe, se não, cria-o
if (!is_dir($diretorio_destino)) {
mkdir($diretorio_destino, 0755, true);
}
// Define o caminho completo do arquivo no servidor remoto (diretório destino + nome do arquivo original)
$caminho_destino = $diretorio_destino . $_FILES['arquivo']['name'];
// Move o arquivo enviado para o diretório destino no servidor remoto
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $caminho_destino)) {
// Arquivo recebido e salvo com sucesso no servidor remoto
echo 'Arquivo recebido e salvo com sucesso no servidor remoto!';
} else {
// Erro ao salvar o arquivo no servidor remoto
echo 'Erro ao salvar o arquivo no servidor remoto!';
}
// Outros dados enviados pelo formulário via cURL
$descricao = $_POST['descricao'];
// Você pode adicionar mais dados aqui, se necessário
}
?>
Neste exemplo, o arquivo recebido via cURL é movido para um diretório específico no servidor remoto usando a função move_uploaded_file
. O nome original do arquivo é mantido, mas você pode alterá-lo conforme necessário.
Lembre-se de ajustar o $diretorio_destino
de acordo com o local em que deseja armazenar os arquivos no servidor remoto.
Essa é apenas uma maneira de tratar o arquivo no servidor remoto. Dependendo das suas necessidades, você pode precisar implementar lógica adicional para manipular o arquivo ou armazenar informações sobre ele no banco de dados, por exemplo.