Problemen functie fwrite
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)
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
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" );
}
}
?>
$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" );
}
}
?>
En wat gaat er "mis"? Op welke regel, enz?
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)
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
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
}
?>
$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:
Gewijzigd op 08/11/2017 21:17:14 door Frank Nietbelangrijk
Het probleem is inmiddels opgelost.