Bonjour,
Je reçois un stream que je souhaiterais convertir en string, seulement l'utilisation de stream_get_contents ne me renvoie pas ce que je veux :
D'abord j'ai vérifier que ma variable est un stream :
1 2 3
|
echo get_resource_type($this->ressource)
// renvoie bien stream |
Puis lorsque j'utilise
echo stream_get_contents($this->ressource , $x)
Si $x est trop petit il me fait télécharger la pages, sinon il ne me renvoie rien ( page introuvable ).
voici le code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public function login() {
$this->ressource = $this->start();
$this->sendRequestXML($this->ressource, self::$xmlLogin);
//echo get_resource_type($this->ressource);
echo stream_get_contents($this->ressource,42);
}
public function start() {
$options = array('ssl'=>array('local_cert'=>self::$cert, 'passphrase'=>self::$passePhrase));
$context = stream_context_create($options);
$this->ressource = stream_socket_client('ssl://'.$this->host.':'.$this->port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
if (!$this->ressource) {
throw new Exception("CANNOT CREATE FLOW SSL: $errno - $errstr");
}
else{
return $this->ressource;
}
} |
J'ai essayé de convertir en string d'une autre façon, elle fonctionne mais seulement dans certains cas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public function toStringResponseXML($flux){
$data = $this->fullread($flux, 4);
$count = unpack('N', $data);
$count = $count[1];
$buffer = $this->fullread($flux, $count - 4);
return $buffer;
}
public function fullread($flux, $count){
$memocount = $count;
$buffer = "";
while ($count > 0) {
$data = fread($flux, $count);
$count -= strlen($data);
$buffer .= $data;
if($memocount==$count) return $buffer; // juste pour eviter que cela rentre dans une boucle infinie.
}
return $buffer;
} |
Si je fait un fread sur $this->ressource , alors il me télécharge aussi la page.
Si quelqu'un à une idée.
Partager