PHP Akış Bildirim Geri çağrılan değil

1 Cevap php

Ben PHP akışları ile oynamak oldum ve burada gösterilen sınıf yazmak başlayarak deneme olmuştur. PHP dokümanlar az söylemek, bu alanda biraz yalın.

Ben geri arama yöntemi belirtilen çağırmak benim akışı içerik almak ile zor bir zaman yaşıyorum. I file_get_contents veya fopen geri çağrılan bir sokete bağlanmayı gibi bir işlevi kullanın, ama ben kullanırsanız stream_socket_client bunu yapmazsa.

I stream_socket_client için içerik geçiyorum çünkü olması gerektiği üstlenecek ve ben kullanırsanız fgets dönecekti gibi stream_socket_recvfrom Ben prizden geri aynı dizeyi olsun.

İlgili PHP docs yazının sonunda bağlantılıdır.

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

Ben de bu biraz ilgili PHP hata raporu bulunan, ancak rapor anlamsız gibi görünüyor:

http://bugs.php.net/bug.php?id=42387&edit=1

1 Cevap

Bu php 5.3.0 olarak soket akımları tarafından desteklenmiyor gibi görünüyor.

(C kodu) bildirim işlevini çağırır ben bulabildiğim tek işlevi ana / akımları / streams.c de php_stream_notification_notify olduğunu. Bazı # tanımlar da vardır

#define php_stream_notify_info
#define php_stream_notify_progress
#define php_stream_notify_progress_init
#define php_stream_notify_progress_increment
#define php_stream_notify_file_size
#define php_stream_notify_error

php_stream_notification_notify bir çağrı haşlayın hangi. Ftp sarıcı örneğin aramalar

php_stream_notify_info(context, PHP_STREAM_NOTIFY_CONNECT, NULL, 0);

php_ftp_fopen_connect içinde. Kıvrılma ve http sarıcı ile aynı. Ama stream_socket_client için çağrı () veya ilgili fonksiyonlar var. Ve de örnekler http://php.net/function.stream-notification-callback Eğer tcp gibi bir taşıma ile protokol sargıyı değiştirin eğer işe yaramazsa: (hatta :) dosyası.