Fwrite notice bij socket stream
Ik heb ff wat relevantie stukken uit de classe samengepakt naar een procedurele versie.
Code (php)
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)
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?
Quote:
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./home/..............file.php
hele scripts werkt overigens goed alleen op bepaalde servers niet. En krijg ik die fwrite notice en werkt het script dus niet.
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?
Code (php)
Je controleert nu namelijk niet of de verbinding klopt.
@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)
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
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);
?>
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
vervangen met
Code (php)
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
Maar ik krijg idd de melding: "probleem met wegschrijven" op de webhost server.
Terwijl ik bij deze code:
Code (php)
geen frwite notice kreeg :/
*bump*
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
}
?>
$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.