#31090 [NEW]: fwrite (supposed to be binary safe) sends string regardless of variable type

From: Date: Tue, 14 Dec 2004 16:18:07 +0000
Subject: #31090 [NEW]: fwrite (supposed to be binary safe) sends string regardless of variable type
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-70215@lists.php.net to get a copy of this message
From: ifirla at aegissrl dot it Operating system: Debian GNU/Linux 3.0 PHP version: 4.3.9 PHP Bug Type: Sockets related Bug description: fwrite (supposed to be binary safe) sends string regardless of variable type Description: ------------ an array holds elements of various types: ascii|integer|integer|integer|integer in a foreach loop, sending each element to a socket opened with fsockopen sends the elements as strings, not as the character type. gettype within the foreach loop shows that I'm sending dealing with the correct types: 16:39:54 SENT 'K' of type string 16:39:54 SENT '0' of type integer 16:39:54 SENT '0' of type integer 16:39:54 SENT '65' of type integer 16:39:54 SENT '31' of type integer fwrite is, according to the documentation, supposed to be binary safe. I think there's a bug in fwrite that has it send all elements as strings. Reproduce code: --------------- function send_back($sock, $msg, $ip, $port) { $fp = fsockopen("udp://$ip", "$port"); foreach ($msg as $msg_to_send) { fwrite($fp, $msg_to_send); echo date("H:i:s")." SENT '$msg_to_send' of type ".gettype($msg_to_send)." \n"; //seen server side } fclose($fp); } Expected result: ---------------- running a packet sniffer, I can see that what's being sent are strings: 15:46:10 192.168.0.101:32778 --> 192.168.0.84:32896 | UDP | 0000: 4b K 15:46:10 192.168.0.101:32778 --> 192.168.0.84:32896 | UDP | 0000: 30 0 15:46:10 192.168.0.101:32778 --> 192.168.0.84:32896 | UDP | 0000: 30 0 15:46:10 192.168.0.101:32778 --> 192.168.0.84:32896 | UDP | 0000: 3635 65 15:46:10 192.168.0.101:32778 --> 192.168.0.84:32896 | UDP | 0000: 3331 31 Actual result: -------------- Those last two (65 and 31) should be represented by single bytes, not two bytes. -- Edit bug report at http://bugs.php.net/?id=31090&edit=1 -- Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=31090&r=trysnapshot4 Try a CVS snapshot (php5.0): http://bugs.php.net/fix.php?id=31090&r=trysnapshot50 Try a CVS snapshot (php5.1): http://bugs.php.net/fix.php?id=31090&r=trysnapshot51 Fixed in CVS: http://bugs.php.net/fix.php?id=31090&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=31090&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=31090&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=31090&r=needscript Try newer version: http://bugs.php.net/fix.php?id=31090&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=31090&r=support Expected behavior: http://bugs.php.net/fix.php?id=31090&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=31090&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=31090&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=31090&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=31090&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=31090&r=dst IIS Stability: http://bugs.php.net/fix.php?id=31090&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=31090&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=31090&r=float MySQL Configuration Error: http://bugs.php.net/fix.php?id=31090&r=mysqlcfg

« previous php.bugs (#70215) next »