Fwrite notice bij socket stream

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jaws

Jaws

22/11/2007 21:49:00
Quote Anchor link
Ik ben bezig met een classe die gameserver informatie moet uitlezen.
Ik heb ff wat relevantie stukken uit de classe samengepakt naar een procedurele versie.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$ip
= x.x.x.x;
$port = x;
$command = "\\status\\";
$fp = fsockopen("udp://".$ip, $port, $errno, $errstr, 5);
fwrite($fp, $command);
?>


Script werkt goed onder PHP5. Dat wil zeggen goed op mijn Zend DE 'run' optie die op PHP5 draait. Een andere hoster ook met PHP5 en onder UNIX geeft telkens deze notice:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Notice: fwrite() [function.fwrite]: send of 8 bytes failed with errno=1 Operation not permitted in /home/..............file.php on line 28


Ik zie deze fout vaker voorkomen bij scripts die deze informatie van gameserver uitlezen maar ik heb nog niet kunnen ontdekken waarom? En waarom op bepaalde servers wel en andere niet? Zou het een ini-setting kunnen zijn?
 
PHP hulp

PHP hulp

21/11/2024 13:39:08
 
Winston Smith

Winston Smith

22/11/2007 23:20:00
Quote Anchor link
Quote:
/home/..............file.php
Dat ziet er raar uit. Controleer het pad even. Anders zou het een rechtenprobleem kunnen zijn. In dat geval moet je file.php chmodden naar 755 bijvoorbeeld.
 
Jaws

Jaws

22/11/2007 23:23:00
Quote Anchor link
Nee, dat heb ik zelf zo gedaan. Pad is gewoon in orde en rechten ook.
hele scripts werkt overigens goed alleen op bepaalde servers niet. En krijg ik die fwrite notice en werkt het script dus niet.
 
Winston Smith

Winston Smith

23/11/2007 09:17:00
Quote Anchor link
En op wat voor servers gaat het dan wel goed? Als dat alleen op Windows servers is, dan zou het ermee te maken kunnen hebben dat linux een / gebruikt in paden, in plaats van een \. Ziet er echter goed uit bij jou. Wat staat er op en voor regel 28 in file.php?
 
TJVB tvb

TJVB tvb

23/11/2007 09:42:00
Quote Anchor link
Als je er eens wat controle inzet?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$ip
= x.x.x.x;
$port = x;
$command = "\\status\\";
$fp = fsockopen("udp://".$ip, $port, $errno, $errstr, 5);
if($fp){
     fwrite($fp, $command);
}
else{
     echo 'Connection failed (nr:'.$errno.' -message:'.$errstr.')';
}

?>

Je controleert nu namelijk niet of de verbinding klopt.
 
Jaws

Jaws

23/11/2007 11:31:00
Quote Anchor link
@Kasper: Nou die $command is niet zo zeer OS gevoelig maar meer een soort query syntax voor data op die gameservers uit te lezen.

@TJVB: Ik deed wel de verbinding controleren overigens maar had dat stukje weggelaten dus kon je niet weten. Maar ik heb je code geprobeerd en dan geeft hij niet de notice bij fwrite().

Maar ik heb nu weer wat meer van mijn class script erbij gevoegd en dan gaat het weer mis. Dit is wat ik nu heb:
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
39
<?php
error_reporting(E_ALL);
$ip = "85.25.143.91";
$port = 23000;
$command = "\\status\\";
$fp = fsockopen("udp://".$ip, $port, $errno, $errstr, 5);
if($fp){
     fwrite($fp, $command);
     //Junk bytes
     fread($fp,24);
     $bytes = 1;
        while ($bytes) {
            //concatenate all read characters to one string
            $InfoString .= fgetc($fp);
            $status = socket_get_status($fp);
            //check if end of socket data is reached
            if ($status["unread_bytes"]  == 0) {
                $bytes = 0;
            }
        }

        //seperate data string into an array
        $Array = explode('\\', $InfoString);
        $i = 1;
        foreach ($Array as $key=>$value) {
            //check if line is even, due to data presentation
            if ($i % 2) {
                $even_value = $value;
            }

            else {
                //associative array is created from the temporary array
                $InfoArray[$even_value] = $value;
            }

            $i++;
        }
}
else{
     echo 'Connection failed (nr:'.$errno.' -message:'.$errstr.')';
}

print_r($InfoArray);
?>


Dit script is ontiegelijk langzaam bij de webhost en lokaal op mijn ZEND DE heel snel. Ik krijg dus weer gewoon die frwrite error met dit script zoals bovenaan beschreven.

@Kasper: Oh ja, en op die regel 28 staat de fwrite.
Gewijzigd op 01/01/1970 01:00:00 door Jaws
 
TJVB tvb

TJVB tvb

23/11/2007 11:43:00
Quote Anchor link
fwrite($fp, $command);
vervangen met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if(fwrite($fp, $command)){
   //de code
}else{
     echo 'probleem met wegschrijven';
}

?>


while ($bytes) kans als while(!feof($fp) dan hoeft die apparte status met socket_get_status en die if in de while niet.
En wat is de error, nog steeds hetzelfde? of een andere?
Gewijzigd op 01/01/1970 01:00:00 door TJVB tvb
 
Jaws

Jaws

23/11/2007 11:59:00
Quote Anchor link
met die feof had ik al geprobeerd maar dat werkt niet. Dan hangt het script zich op en krijg je na 1,5 minuut 0 output.

Maar ik krijg idd de melding: "probleem met wegschrijven" op de webhost server.

Terwijl ik bij deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$ip
= x.x.x.x;
$port = x;
$command = "\\status\\";
$fp = fsockopen("udp://".$ip, $port, $errno, $errstr, 5);
if($fp){
     fwrite($fp, $command);
}
else{
     echo 'Connection failed (nr:'.$errno.' -message:'.$errstr.')';
}

?>

geen frwite notice kreeg :/
 
Jaws

Jaws

24/11/2007 15:19:00
Quote Anchor link
*bump*
 
Jaws

Jaws

26/11/2007 18:18:00
Quote Anchor link
Volgend voorbeeld van PHP.net werkt ook bij de hosting provider:
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
$fp
= fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
}
else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";

    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }

    fclose($fp);
}

?>

Dus het schrijven naar streams opzich is geen probleem. Misschien heeft het met de UDP te maken? Volgens phpinf() is dit wel enabled.

Ik heb mijn eigen script ook nog op een andere host getest en daar werkt het script wel naar behoren. Het moet dus een bepaalde instelling of zo zijn maar ik weet niet welke dus kan ik de host er ook niet op aanspreken of een check inbouwen in mijn code.
 



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.