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 :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
echo get_resource_type($this->ressource)
// renvoie bien stream

Puis lorsque j'utilise
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
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.

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
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.