Notice: Undefined offset: 3

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thomas de vries

thomas de vries

07/07/2012 11:59:41
Quote Anchor link
Hallo medeleden,

Ik zit met het volgende script
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$ports
= array('80','80','80');
$i = 0;
while($ports[$i])
{


    $open = @fsockopen("127.0.0.1", $ports[$i], $errno,$errstr, 1);
    if($open)
    {

        $on = "online";
    }

    else
    {
        $on = "offline";    
    }

$i++;
//echo $ports[$i];
}
echo $on.'<br />';

?>


Nu krijg ik de melding Notice: Undefined offset: 3
En het zit in dit stuk
while($ports[$i])

Waar kan dit mee te maken hebben
Want het script blijft aangeven offline.

Met vriendelijke groet,
Thomas de vries
Gewijzigd op 07/07/2012 12:03:27 door Thomas de vries
 
PHP hulp

PHP hulp

21/12/2024 17:40:36
 
Erwin H

Erwin H

07/07/2012 12:03:19
Quote Anchor link
Omdat je while statement niet goed is. Een while blijft doorlopen totdat een situatie gevonden is waarin het while statement naar false evalueert. Jouw whilestament doet dat niet. Wat het wel doet is kijken of $ports[$i] bestaat. Maar bestaat het niet dat krijg je een foutmelding voordat je kan zien of het bestaat of niet.

Wat je zou moeten doen is een for loop gebruiken (waarbij $i over alle elementen van $sports itereert), of een beter while statement waarbij je ECHT controleert of $sports[$i] bestaat, bijvoorbeeld met isset().
 
Crispijn -

Crispijn -

07/07/2012 12:07:03
Quote Anchor link
Waarom maak je er geen nette foreach constructie van?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$ports
= array('80','80','80');
foreach($ports as $p):
    $open = fsockopen("127.0.0.1", $p, $errno,$errstr, 1);
    if($open)
    {

        $on = "online";
    }

    else
    {
        $on = "offline";    
    }

endforeach;

echo $on;
?>


Tevens wordt de variabele $on continu overschreven. Je zal dus alleen maar het resultaat van de laatste poort echo-en.

Oplossing:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$ports
= array('80','80','80');
foreach($ports as $p):
    $open = fsockopen("127.0.0.1", $p, $errno,$errstr, 1);
    if($open)
    {

        $ports[$p] = 'online';
    }

    else
    {
        $ports[$p] = 'offline';
    }

endforeach;

print_r($ports);
?>
Gewijzigd op 07/07/2012 12:07:41 door Crispijn -
 
Thomas de vries

thomas de vries

07/07/2012 12:15:39
Quote Anchor link
Dank je Crispijn dat werkt inderdaad beter.

Maar nu het volgende stell ik heb deze ports

$ports = array('2300','15400','80');

Wat er nu gebeurt is dat het script alsnog zegt dat het online is.
Dit hoort niet als 1 van de poorts niet werkt zou ik graag zien dat het ook weer gegeven wordt als offline.

Zoals het nu gebeurt is dat die alleen kijkt of hij een verbinding kan maken met de laatste poort. Aangezien die werkt geeft het script dus een online melding.
 
- SanThe -

- SanThe -

07/07/2012 12:22:42
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$ports
= array('2300','15400','80');
foreach($ports as $k => $p):
    $open = fsockopen("127.0.0.1", $p, $errno,$errstr, 1);
    if($open)
    {

        $ports[$k] = 'online';
    }

    else
    {
        $ports[$k] = 'offline';
    }

endforeach;

print_r($ports);
?>
 
Crispijn -

Crispijn -

07/07/2012 12:23:43
Quote Anchor link
Dan moet je die controle die je doet met if($open) beter uitvoeren. Je kijkt nu of hij true is maar dit is wat de documentatie zegt:

Return Values
fsockopen() returns a file pointer which may be used together with the other file functions (such as fgets(), fgetss(), fwrite(), fclose(), and feof()). If the call fails, it will return FALSE

Controleer dus of hij gefaald heeft ipv of hij goed is (dat doe je nu namelijk).
 
Thomas de vries

thomas de vries

07/07/2012 12:35:05
Quote Anchor link
Aah zit dat zo.
Oke dan kan ik ermee bezig gaan.

@Santhe ook bedankt voor het meedenken. ik zal er is mee gaan stoeien.
 
Eddy E

Eddy E

07/07/2012 16:00:28
Quote Anchor link
En waarom alles in een array proppen om die direct daarna te tonen?
Dus waarom niet dit?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$ports
= array('2300','15400','80');
foreach($ports as $port)
    {

    if(fsockopen("127.0.0.1", $port, $errno, $errstr, 1) === false)
        {

        echo  'Port '.$port.': offline';
        }

    else
        {
        echo  'Port '.$port.': online';    
        }
    }

?>
 
Crispijn -

Crispijn -

07/07/2012 19:23:29
Quote Anchor link
Ik werk eigenlijk automatisch op een manier zodat je niet direct de output hebt maar die later op een nette flexibele manier op kan maken. Op die manier heb je dus netjes de logica gescheiden van de output.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.