Acceso a recursos externos en PHP
PHP permite acceder a datos y archivos alojados en servidores remotos a través de HTTP, HTTPS, FTP u otros protocolos. Esta funcionalidad es útil para consumir APIs, descargar archivos, obtener feeds o integrar información externa en la aplicación.
Existen varias formas de hacerlo, siendo las más comunes file_get_contents() y cURL.
Usando file_get_contents()
Esta función permite leer el contenido de un recurso remoto de manera sencilla:
<?php
$url = "https://api.example.com/usuarios";
$datos = file_get_contents($url);
if ($datos !== false) {
echo "Datos descargados correctamente:<br>";
echo $datos;
} else {
echo "Error al descargar los datos.";
}
?>
Ventajas:
- Muy simple de usar.
- Ideal para recursos pequeños y solicitudes rápidas.
Desventajas:
- No permite configurar cabeceras HTTP fácilmente.
- Difícil de manejar errores complejos o timeouts.
- No es adecuado para grandes volúmenes de datos.
Uso con JSON
Si el recurso devuelve JSON, podemos decodificarlo directamente:
<?php
$url = "https://api.example.com/usuarios";
$contenido = file_get_contents($url);
$usuarios = json_decode($contenido, true);
foreach ($usuarios as $usuario) {
echo $usuario['nombre'] . " - " . $usuario['email'] . "<br>";
}
?>
Usando cURL
cURL es una librería más potente que permite control total sobre la solicitud, incluyendo cabeceras, métodos HTTP, autenticación, tiempo de espera y manejo de errores.
Ejemplo básico GET
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/usuarios");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$respuesta = curl_exec($ch);
if ($respuesta === false) {
echo "Error cURL: " . curl_error($ch);
} else {
echo "Datos descargados:<br>" . $respuesta;
}
curl_close($ch);
?>
Ejemplo con POST y cabeceras
<?php
$ch = curl_init();
$data = [
"nombre" => "Carlos",
"email" => "carlos@example.com"
];
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/usuarios");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer TU_TOKEN_AQUI"
]);
$respuesta = curl_exec($ch);
if ($respuesta === false) {
echo "Error cURL: " . curl_error($ch);
} else {
echo "Respuesta del servidor: " . $respuesta;
}
curl_close($ch);
?>
Buenas prácticas
- Siempre usar HTTPS para proteger la información en tránsito.
- Configurar timeouts para evitar que la aplicación quede bloqueada.
- Manejar errores de red y respuestas inválidas.
- Evitar descargar archivos muy grandes en memoria. Usar streaming cuando sea necesario.
- Sanitizar los datos recibidos antes de procesarlos.