Problemen functie fwrite

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

I vd Bos

I vd Bos

08/11/2017 19:30:53
Quote Anchor link
Goedenavond,

Ik zit al een tijdje met het volgende probleem.
Ik heb onderstaande link (href) in HMTL.
Bij het aanklikken van de link wordt tcp.php aangeroep en wordt de parameter message=51 meegegeven.

In het PHP-script wordt als eerste de parameter gelinkt aan een variabele $message.
Vervolgens probeer ik een fsockopen te doen van een bepaald IP-adres met een bepaalde poort.
Vervolgens als de socket geopend is wil ik er een berichtje heen sturen met fwrite.
Deze functie gaat goed op het moment dat het een vast bericht; fwrite($fp, "message").
Als ik het bericht "message" vervang door de variabele $message zoals hier onder, dan gaat het mis.

Zou iemand mij hier verder mee kunnen helpen?

HTML
<a href="tcp.php?message=51">PHP File</a>



PHP
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
22
23
24
25
26
<?php       
   $message
= $_GET['message'];
    echo $message;
  
   LampAan();
  
   function
LampAan() {
     $fp = fsockopen("xxx.xxx.xxx.xxx", 10000, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    }

    
    else {
    fwrite($fp, $message);
    while (!feof($fp))
    {

        echo fgets($fp, 128);
    }

   fclose($fp);
  
   $url = 'verlichting.php'; // this can be set based on whatever
   no redirect
   header( "Location: $url" );
    }
}

?>
 
PHP hulp

PHP hulp

04/05/2024 03:23:27
 
Rob Doemaarwat

Rob Doemaarwat

08/11/2017 21:09:29
Quote Anchor link
En wat gaat er "mis"? Op welke regel, enz?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

08/11/2017 21:15:50
Quote Anchor link
Het komt omdat functies variabelen van buiten de functie niet "zien". Zie een functie maar als een apart script. Je moet alle variabelen opnieuw aanmaken of je geeft ze mee als parameter. In dit geval is het simpel op te lossen door $message als parameter mee te geven.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
LampAan($message);
?>


Maar er zijn nog een paar problemen..
- een $_GET variabele is nooit gegarandeerd aanwezig. Test dus of deze bestaat!
- $errno en $errstr bestaan niet. Beter even initialiseren.
- no direct is geen geldig PHP syntax.
- na een echo op regel drie en zeventien kun je een redirect op regel 23 wel vergeten.

Zo zou het wel moeten werken:
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
$url
= 'verlichting.php'; // this can be set based on whatever

if(isset($_GET['message']))
{

    $message = $_GET['message'];

    LampAan($message);
  
    header( "Location: $url" );
    exit; // altijd een exit na een redirect anders loopt je script gewoon door.
}

echo 'Geen message in URL. Gebruik: tcp.php?message=<message>.';
  
function
LampAan($message)
{

    $errno = 0;
    $errstr = null;

    $fp = fsockopen("xxx.xxx.xxx.xxx", 10000, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
        return false; // verlaat de functie en vertel iig dat er iets fout gegaan is.
    }
    
    fwrite($fp, $message);
/*
    while (!feof($fp))
    {
        echo fgets($fp, 128); // alleen voor debugging anders werkt de redirect niet.
    }
*/

    fclose($fp);

    return true; // verlaat de functie en vertel dat de operatie geslaagd is
}
?>


Toevoeging op 08/11/2017 21:21:09:

P.S. als je dit op je pc test zet dan foutmeldingen aan want dan had je waarschijnlijk allang gezien wat er mis ging. Foutmeldingen kun je aanzetten door dit boven in je script te zetten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
Gewijzigd op 08/11/2017 21:17:14 door Frank Nietbelangrijk
 
I vd Bos

I vd Bos

08/11/2017 21:41:58
Quote Anchor link
Bedankt voor de snelle reacties.
Het probleem is inmiddels opgelost.
 



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.