2011-05-15 20 views
8

No entiendo cuál es la diferencia entre¿Qué significa curlopt_binarytranfer exactamente?

CURLOPT_RETURNTRANSFER AND 
CURLOPT_BINARYTRANSFER 

Escribí un guión para comprobarlo

<?php 
$image_url = "http://localhost/curl/img1.png"; 
$ch = curl_init(); 
$timeout = 0; 
curl_setopt ($ch, CURLOPT_URL, $image_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
$image = curl_exec($ch); 
curl_close($ch); 
header("Content-type: image/jpeg"); 
print $image; 
?> 

en este caso me sale la imagen que aparece en el navegador Si quito la línea

curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 

sigo obteniendo la imagen que se muestra en el navegador.

y ahora si me quito la línea

header("Content-type: image/jpeg"); 

continuación iGet visualización de datos binarios en el navegador (se parece a la basura) en ambos casos si quito curl_setopt ($ ch, CURLOPT_BINARYTRANSFER, 1); o no lo elimino. entonces, ¿qué diferencia hace esta opción CURLOPT_BINARYTRANSFER?

Respuesta

3

Con este tipo de rizo estamos ante dos transferencias:

  1. datos viajan desde el host de destino a nuestro anfitrión PHP
  2. que se envía desde nuestro anfitrión PHP en nuestro navegador.

Al eliminar header("Content-type: image/jpeg");, le niega al navegador la pista de cómo debe interpretarse el contenido que sigue. Esto no tiene nada que ver con CURLOPT_BINARYTRANSFER que afecta la primera transferencia.

+0

entonces, ¿qué efecto puede CURLOPT_BINARYTRANSFER hacer? ¿Puede dar un ejemplo? – lovesh

+0

Algo que pude entender por su enlace es que las personas han intentado muchas más cosas para comprender CURLOPT_BINARYTRANSFER. – lovesh

+1

@lovesh, cierto. En realidad, es necesario para el bien de PHP, por lo que sabe cómo tratar el resultado devuelto. Pero la responsabilidad recae en Curl. Entonces, básicamente, PHP dice curl: * cada vez que vas a buscar datos binarios, dime para no estropearlo *. Pero, la inteligencia y sofisticación de PHP para descubrir, por sí solo, si los datos devueltos deben tratarse como binarios o el texto ha fluctuado con el tiempo (algunas versiones han introducido errores que lo empeoran y otros lo han mejorado). Entonces, con algunas compilaciones puedes obtener el resultado sin usar la opción. Pero para estar seguro, será mejor que siempre avises a PHP. –

8

Parece que CURLOPT_BINARYTRANSFER ya no es utilizado por PHP, si estoy entendiendo correctamente este informe de error de PHP y su resolución.

https://bugs.php.net/bug.php?id=55635

+0

Lo está entendiendo correctamente, [diff de archivo NEWS] (http://git.php.net/?p=php-src.git;a=blobdiff;f=NEWS;h=7028faf2500381b61bada2c9f1ac50c4a25339c5;hp=2e83f29921f180ae55382f061e1fd48a1a664626; hb = 33d3eb1e43134deb3e108108f62febdabc8a0aa1; hpb = aeaa4b3da6261b87bae2f80b8507f9081ca4cd55) en la confirmación dice "CURLOPT_BINARYTRANSFER ya no se usa. La constante todavía existe para compatibilidad con versiones anteriores pero no está haciendo nada" – user

Cuestiones relacionadas