[PHP] Functie wordt niet aangeroepen

Pagina: 1
Acties:
  • 178 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
Ik ben bezig om met behulp van sockets te communiceren met 'n POP3 server.
Maar ik krijg 1 van de functies uit m'n class niet aangeroepen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
class pop3_mail
{
        # Constructor void pop3_mail ( string server address, string username, string password )
    function pop3_mail( $sServer, $sUsername, $sPassword )
    {
        # Hier nog wat blaat
            
        # Run class
        $this->vConnect( ); # connectie & socket maken. Werkt zoals het hoort
        $this->vMain( ); # loopje die het socket uitleest. Werkt zoals het hoort
        $this->vDisconnect( ); # verbinding verbreken. Werkt niet.
    }

        # Void disconnect ( void )
    private function vDisconnect( )
    {
        # Close the socket
        @socket_close( $this->rSocket );
        
        # Tell the user that the connection has been closed
        echo 'Disconnected.';
    }
?>

Zoals je ziet worden alle drie de functies aangeroepen op volgorde en uitgevoerd.
Eerst wordt dus vConnect uitgevoerd, de verbinding wordt gemaakt.
Als die klaar is, ga ik de loop in om alles uit te lezen.
Zodra ik de loop beeindig zou hij dus naar de vDisconnect moeten gaan, maar dat doet ie niet.
In vMain staat enkel de loop.

Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 08-09 13:47
Maw vMain() eindigt nooit :)

Acties:
  • 0 Henk 'm!

  • -krekel-
  • Registratie: Mei 2002
  • Laatst online: 09-09 12:16
edit:
bullshit

[ Voor 86% gewijzigd door -krekel- op 25-05-2005 11:10 ]


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
# Void main ( void )
    private function vMain( )
    {
        # Read from the socket as long as there is data and the continue char is set to 'Y'
        while( @socket_recv( $this->rSocket, $this->sBuffer, 512, 0 ) && ( $this->cContinue == 'Y' ) )
        {
            # Show buffers contents
            echo $this->sBuffer . "\n";
            
            # Debug
            $this->cContinue = 'N';
        }
    }
?>


De comment klopt niet helemaal, daar socket_recv alleen false teruggeeft als er 'n fout optreed.
Maar dat is dan ook de bedoeling.

De continue var is er om de loop te stoppen, en ja die stopt.
Dat heb ik nl al getest door
if( $this->cContinue == 'N' )
die( 'Loop error!' );

Erin te proppen :)

[ Voor 36% gewijzigd door SH4D3H op 25-05-2005 11:12 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Haal eens wat @'s weg. Een @ onderdrukt errors, terwijl je die nu juist wel wil zien. Of wordt ook de tekst "Disconnected." niet weergegeven?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
Jup, daar zie ik dus dat het niet werkt.
En ik heb de @ voor socket_close al eens verwijdert, maar niets gevonden.
Toen nog maar eens een echo boven die socket_close gezet, ook dat werkte niet.

Edit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
# Void main ( void )
private function vMain( )
{
    # Read from the socket as long as there is data and the continue boolean is set to true
    while( @socket_recv( $this->rSocket, $this->sBuffer, 512, 0 ) && ( $this->cContinue == 'Y' ) )
    {
        # Show buffers contents
        echo $this->sBuffer . "\n";
        
        echo $this->cContinue;          
        $this->cContinue = 'N';
        echo $this->cContinue;
    }
    echo 'Debug!';
}
?>


Output:
code:
1
2
3
4
Connected to pop3.tiscali.nl (195.241.76.56:110)...
+OK Tiscali POP server (v.3.1.0) started

YN


Hij komt dus niet eens tot debug, maar gaat ook niet nog een keer de loop in :?

[ Voor 63% gewijzigd door SH4D3H op 25-05-2005 11:21 ]


Acties:
  • 0 Henk 'm!

  • dev icey
  • Registratie: Augustus 2003
  • Laatst online: 22-04 11:21
Volgens mij mis je een } om de class af te sluiten of klopt het wel in het origineel?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

echo onder de while in vMain dan eens een debugtekst om te kijken of hij daar wel uit komt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
dev icey schreef op woensdag 25 mei 2005 @ 11:21:
Volgens mij mis je een } om de class af te sluiten of klopt het wel in het origineel?
Jup, maar 200 regels plaatsen is wat veel, en bovendien onnodig.
-NMe- schreef op woensdag 25 mei 2005 @ 11:22:
echo onder de while in vMain dan eens een debugtekst om te kijken of hij daar wel uit komt.
Zie m'n edit.
Nee dus.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:26

crisp

Devver

Pixelated

zet sowieso je check op de continue-flag voor de socket_recv; het heeft natuurlijk geen zin om nog een keer een socket_recv te doen als je er toch niets meer mee doet:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Void main ( void )
private function vMain( )
{
    # Read from the socket as long as there is data and the continue boolean is set to true
    while( $this->cContinue == 'Y' && socket_recv( $this->rSocket, $this->sBuffer, 512, 0 ) )
    {
        # Show buffers contents
        echo $this->sBuffer . "\n";
        
        echo $this->cContinue;            
        $this->cContinue = 'N';
        echo $this->cContinue;
    }
    echo 'Debug!';
}

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • grizzlybear
  • Registratie: Oktober 2001
  • Laatst online: 20-09 14:39
Overbodig, want ik was weer eens te laat.


Blijft hij in de
PHP:
1
socket_recv( $this->rSocket, $this->sBuffer, 512, 0 )
niet wachten?

Draai de beide voorwaarden eens om?

[ Voor 27% gewijzigd door grizzlybear op 25-05-2005 11:31 ]


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
Mijn dank is groot.
Dat het zoiets simpels is, ik had daar niet eens aan gedacht :X

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Je weet dat socket-read functies blokkeren (blocking) totdat ze daadwerkelijk wat uit gelezen hebben?

edit:

Daarom dus dat hij na het omdraaien van de voorwaarden het wel deed. Maar let hier op.

[ Voor 35% gewijzigd door GX op 25-05-2005 11:38 ]


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
GX schreef op woensdag 25 mei 2005 @ 11:38:
Je weet dat socket-read functies blokkeren (blocking) totdat ze daadwerkelijk wat uit gelezen hebben?

edit:

Daarom dus dat hij na het omdraaien van de voorwaarden het wel deed. Maar let hier op.
Dank voor het advies :)
Dat had ik dan idd uit moeten zetten.
Pagina: 1