Ich habe mit PHP-Streams gespielt und experimentiert, indem ich angefangen habe, die hier gezeigte Klasse zu schreiben. Die PHP-Dokumente sind etwas mager in diesem Bereich, um es gelinde auszudrücken.PHP Stream Notification Callback nicht aufgerufen
Ich habe eine schwierige Zeit mit meinem Stream-Kontext, um die angegebene Callback-Methode aufzurufen. Wenn ich eine Funktion wie file_get_contents
oder fopen
verwende, um eine Verbindung zu einem Socket herzustellen, wird der Rückruf aufgerufen, aber wenn ich stream_socket_client
verwende, tut es das nicht.
Ich nehme an, es sollte, weil ich den Kontext an stream_socket_client
übergeben und wenn ich stream_socket_recvfrom
verwenden, bekomme ich die gleiche Zeichenfolge zurück aus dem Socket als fgets zurückgeben würde.
Relevante PHP-Dokumente sind am Ende des Posts verknüpft.
class IMAP {
// Connection Parameters
private $host;
private $port;
private $timeout;
// Credentials
private $email;
private $password;
private $client;
private $transcript;
function __construct($connection, $credentials) {
// Set Connection Settings
$this->host = $connection['host'];
$this->port = $connection['port'];
$this->timeout = $connection['timeout'];
// Set Credentials
$this->email = $credentials['email'];
$this->password = $credentials['password'];
// Connect to the IMAP server
$params = array('notification'=>array($this, 'getLine'));
$ctx = stream_context_create();
stream_context_set_params($ctx, $params);
$this->client = stream_socket_client("tcp://$this->host:$this->port",$errno, $errstr, $this->timeout, STREAM_CLIENT_CONNECT, $ctx);
stream_socket_sendto($this->client, "a001 NOOP\r\n");
}
function getLine($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
$args = func_get_args();
var_dump($args);
}
}
$connection = array(
'host' => 'somehost',
'port' => 143,
'timeout' => 10
);
$credentails = array(
'email' => 'someemail',
'password' => 'somepassword'
);
$imap = new IMAP($connection, $credentails);
?>
http://us3.php.net/manual/en/function.stream-context-set-params.php http://us3.php.net/manual/en/context.params.php
fand ich diesen etwas entsprechenden Berichts PHP Fehler auch, aber es sieht aus wie der Bericht sinnlos war:
http://bugs.php.net/bug.php?id=42387&edit=1
Danke für die Info. Glauben Sie, dass es sinnvoll wäre, wenn stream_socket_client() den Callback auslöst? Vielleicht werde ich einen Fehlerbericht einreichen. – macinjosh
Ich weiß nicht genug über die Anmelder, um Ihnen eine definitive Antwort zu geben. Vielleicht sind sie (aus irgendeinem Grund) nur für die Protokoll-Wrapper gedacht. Aber zumindest php_stream_notify_info und php_stream_notify_error wäre nett. – VolkerK