php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-08-2009, 22:29
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard msnp9.class.php: Nachricht versenden

Hallo ihr PHP-Gurus

Ich habe mich mal ein bisschen umgeschaut, wie man wohl MSN über ein PHP-Script verwenden kann und bin auf die zwei Klassen hier gestossen: PHP MSN Messenger Class : flumpCakes

Da ist auch ein sample dabei, allerdings beinhaltet dies nur das einloggen (msnp9.class.php). Für das senden der Message braucht mann dann die andere Klasse (msn_sb.class.php).

Ich habe jedoch keine Ahnung, wie ich nun eine Nachricht senden kann, da ich irgendwie noch die Daten der anderen Klasse brauch, nur welche?

Ich kann OO und auch PHP, aber mit den klassen komme ich nicht zurecht.

Kann vielleicht jemand ein ganz kleines Beispiel machen, wie man da erfolgreich eine Nachricht senden kann ?
Das wäre super !

sample.php (Verbindung aufbauen, funktioniert)
PHP-Code:
<?php
    error_reporting
(E_ALL);
    
ob_implicit_flush();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>MSN Protocol 9 Class Example Usage</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript"></script>
    <style type="text/css" media="screen" title="default">
    body {
        font: 76%/1.4 tahoma, verdana, arial, helvetica, sans-serif;
    }
    .r {
        color: red;
    }
    .g {
        color: green;
    }
    </style>
  </head>
  <body>



<?php


    
require_once('msnp9.class.php');
    require_once(
'msn_sb.class.php');

    
$msn = new msn;

    if (
$msn->connect('mail''xxx'))
    {
        
// we're connected
        // run rx_data function to 'idle' on the network
        // rx_state will loop until the connection is dropped

        
$msn->rx_data();

        echo 
'<p>Connection dropped</p>';
    }
    else
    {
        
// wrong username and password?
        
echo '<p>Error Connecting to the MSN Network</p>';
    }
?>
</body>
</html>
msn_sb.class.php (hier wird wohl die Methode tx_im() gebraucht... nur wie?)
PHP-Code:
<?php

class switchboard
{
    
// font colours/styles
    
var $font_fn 'Arial';
    var 
$font_co '333333';
    var 
$font_ef '';


    
// other
    
var $debug 1;
    var 
$trID 1;
    var 
$email '';


    function 
switchboard()
    {
        
$this->session_start_time time();
    }


    
/**
     *
     * desc    :    send IM message
     *
     * in    :    $ns        =    notification server connection
     *        $msg        =    message to send
     *        $passport    =    current logged in user
     *        $email        =    user to send message to
     *
     * out    :    true on success else return false
     *
     */

    
function tx_im($ns$msg$passport$email)
    {
        
$message "MIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\nX-MMS-IM-Format: FN=$this->font_fn; EF=$this->font_ef; CO=$this->font_co; CS=0; PF=22\r\n\r\n$msg";
        
$message "MSG 20 N ".strlen($message)."\r\n$message";

        if (@
is_resource($this->sb))
        {
            
// switchboard session already open
            
$this->_put($message);

            return 
true;
        }
        else
        {
            
// open switchboard session through NS
            
fputs($ns"XFR $this->trID SB\r\n");


            
$ns_data fgets($ns4096);

            @list(
$xfr,,, $server,, $as) = explode(' '$ns_data);

            if (
$xfr != 'XFR')
            {
                echo 
'unable to read NS info. last message: ';
                echo 
$ns_data;

                return 
false;
            }



            list(
$server$port) = explode(':'$server);

            if (
$this->sb = @fsockopen($server$port$errno$errstr5))
            {
                
$this->_put("USR $this->trID $passport $as\r\n");
                
$this->_get();

                if (
is_array($email))
                {
                    foreach(
$email as $key => $value)
                    {
                        
$this->_put("CAL $this->trID $value\r\n");

                        if (
strstr($this->_get(), 'CAL'))
                        {
                            
$this->_get(); // should be JOI...
                        
}
                    }
                }
                else
                {
                    
$this->_put("CAL $this->trID $email\r\n");

                    if (
strstr($this->_get(), 'CAL'))
                    {
                        
$this->_get(); // should be JOI...
                    
}
                }



                
$this->_put($message);

                return 
true;
            }
        }

        return 
false;
    }


    
/**
     *
     * desc    :    recieve an IM from the switchboard
     *
     * in    :    none
     * out    :    a. null on fail/no message
     *        b. message string
     *
     */

    
function rx_im()
    {
        
$message null;
        
$msglen null;

        
stream_set_timeout($this->sb1);

        while (!
feof($this->sb))
        {
            
$data = ($msglen) ? $this->_get($msglen) : $this->_get();


            switch (
substr($data03))
            {
                default:
                    
//if (empty($msglen)) continue;

                    
$message.= $data;

                    if (
strlen($message) >= $msglen && !empty($msglen))
                    {
                        
$mesg explode("\n"trim($message));

                        
$last end($mesg);


                        
//if (@substr($last, 0, 10) != 'TypingUser')
                        
if (!strstr($message'TypingUser'))
                        {
                            
// this isn't a notification that the user is typing a message
                            
return $last;
                        }


                        
$msglen null;
                        
$message null;
                    }

                    if (
$this->session_start_time 10 time())
                    {
                        
// looks like we've been idle for a while
                        
echo 'IM timed out';
                        
$this->im_close();
                        return 
null;
                    }
                break;
                case 
'MSG':
                    list(,,, 
$msglen) = explode (' '$data);
                break;
                case 
'BYE':
                    return 
null;
                break;
            }
        }

        return 
null;
    }


    
/**
     *
     * desc    :    authorise with switchboard from an IM invitation
     *
     * in    :    $server        =    switchboard server ip
     *        $port        =    switchboard server port
     *        $passport    =    logged in users passport email
     *        $sID        =    session id
     *        $as        =    auth string
     *
     * out    :    true on success else return false
     *
     */

    
function auth($server$port$passport$sID$as)
    {
        if (
$this->sb = @fsockopen($server$port$errno$errstr5))
        {
            
$this->_put("ANS $this->trID $passport $as $sID\r\n");

            if (!
$this->rx_iro()) return false;

            return 
true;
        }

        return 
false;
    }


    
/**
     *
     * desc    :    recieve IRO commands from IM session
     *
     * in    :    none
     * out    :    true on success else return false
     *
     */

    
function rx_iro()
    {
        if (
$data $this->_get())
        {
            @list(
$iro, , $cur_num$tot$email$name) = explode(' '$data);

            
$sbsess->email $email;

            if (
$iro != 'IRO')
            {
                echo 
"** BAD data in rx_iro(): see line above **\n";
                return 
false;
            }

            
// recieve names/list of others connected
            
for ($i=1$i<$tot$i++)
            {
                if (!
$data $this->_get())
                {
                    echo 
"** BAD data in rx_iro(): see line above **\n";
                    return 
false;
                }

            }

            @list(
$ans) = explode(' '$this->_get());

            if (
$ans != 'ANS') return false;

            return 
true;
        }

        return 
false;
    }


    
/**
     *
     * desc    :    close switchboard connection
     *
     * in    :    none
     * out    :    none
     *
     */

    
function im_close()
    {
        
$this->_put("OUT\r\n");
        @
fclose($this->sb);
    }

[...]
}

?>

Geändert von pascal007 (18-08-2009 um 23:24 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 18-08-2009, 23:08
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Habs nur mal kurz überflogen, außerdem ist das uraltes PHP4. Da bin ich schon ein wenig draussen. Die Methode tx_im wird übrigens in der msnp9.class.php initialisiert. Wie sieht es mit deinem error_reporting aus?

Peter

Btw: das solltest du sofort unkenntlich machen, ich tue es nicht mehr
PHP-Code:
if ($msn->connect('xxx''xxx')) 
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 18-08-2009, 23:32
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Danke für den Hinweis Ja das error_reporting spuckt nix aus. Das interesante passiert eben in der msnp9.class.php (hab ich nun herausgefunden):

PHP-Code:
    function rx_data()
    {
        
$this->_put("SYN $this->trID 0\r\n");
        
$this->_put("CHG $this->trID NLN\r\n");

        while (! 
feof($this->fp))
        {
            
$data $this->_get();

            if (
$data)
            {
                
//echo $data.'<br />';

                
switch($code substr($data03))
                {
                    default:
                        
// uncommenting this line here would probably give a load of "error code not found" messages.
                        //echo $this->_get_error($code);
                    
break;
                    case 
'RNG':
                        
// someone's trying to talk to us
                        
list(, $sid$server, , $as$email$name) = explode(' '$data);
                        list(
$sb_ip$sb_port) = explode(':'$server);


                        
$sbsess = new switchboard;

                        if (
$sbsess->auth($sb_ip$sb_port$this->passport$sid$as))
                        {
                            
// sb session opened
                            // recieve users message
                            
if ($msg $sbsess->rx_im())
                            {
                                
// send the message straight back!
                                
$sbsess->tx_im($this->fp"KACKEN!"$this->passport$email);

                                
// close IM sessions
                                
$sbsess->im_close();
                            }
                            else
                            {
                                echo 
'No message was received from user.';
                            }
                        }
                        else
                        {
                            echo 
'Unable to authenticate with switchboard.';
                        }
                    break;
                }
            }
        }
    } 
Hier wird diese Klasse initalisiert und danach wieder geschlossen. Nun diese Methode schickt, sollte jemand schreiben das selbe wieder zrück, wie der Kontakt schreibt (was auch funktioniert ).

Die Frage ist nur, wie kann ich das nun in ein Formular auslagern, das ich eine Antwort per formualr senden kann, denn:

- das Script darf nicht beendet werden, sonst ist die verbindung futsch

Ich wollte schon was mit AJAX machen, aber da kann ich ja auch nicht das laufende Script aufrufen... auch an SESSIONS habe ich schon gedacht und die wichtigen Daten für auth() und tx_im() in die Session speichern... aber ja... mir würde auch schon ein fertiger Web Messenger für meinen eigenen Webspace reichen, gibts nicht, also muss ich selber ran.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Script] an ICQ Nachricht Tucker Apps und PHP Script Gesuche 1 01-07-2005 11:24
[OOP] class in anderer class verfügbar machen Creativ PHP Developer Forum 6 28-03-2005 20:55
ICQ Nachricht all4one PHP Developer Forum 1 27-03-2001 13:57

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:03 Uhr.