Saltar al contenido principal

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.