Pregunta

Estoy tratando de tomar una imagen de un servidor externo con fsockopen en Php. Necesito poner los datos de la imagen en una variable en la codificación Base64 en mi código. La imagen es un tipo de archivo .jpeg y es una imagen pequeña.

No pude encontrar ninguna respuesta en Google después de una búsqueda. Entonces, me pregunto si es incluso posible directamente sin las curvas extrañas.

¡Cualquier ayuda y/o sugerencia es muy apreciada!

Tenga en cuenta que allow_url_fopen está deshabilitado en mi servidor debido a amenazas de seguridad.

Este es mi código actual:

$wn_server = "111.111.111.111";

$url = "GET /webnative/portalDI?action=getimage&filetype=small&path=".$tmp." HTTP/1.1\r\n";

$fp = fsockopen($wn_server,80,$errno,$errstr,15);
stream_set_timeout($fp, 30);

$imageDataStream = "";

if (!$fp) {
    echo "Error " . $errno . "(" . $errstr . ")";
} else {
    $out = $url;
    $out .= "Host: " . $wn_server . "\r\n";
    $out .= "Authorization: Basic " . $_SESSION['USER'] . "\r\n";
    $out .= "Connection: Close\r\n\r\n";
    $out .= "\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        $imageDataStream .= fgets($fp, 128);
    }
    fclose($fp);
}
¿Fue útil?

Solución

Te refieres a algo como esto:

$ch = curl_init();

// Authentication
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, 'username:password'); 

// Fetch content as binary data
curl_setopt($ch, CURLOPT_URL, $urlToImage);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Fetch image data
$imageData = curl_exec($ch);

curl_close($ch);

// Encode returned data with base64
echo base64_encode($imageData);

Otros consejos

Prueba el Follwoing

header('Content-Type: image/png');
echo $imageData;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top