|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2021-02-08 02:57 UTC] danack@php.net
[2021-02-08 06:24 UTC] bugs-a17 at moonlit-rail dot com
[2021-02-16 11:26 UTC] nikic@php.net
-Assigned To:
+Assigned To: nikic
[2021-02-16 11:34 UTC] nikic@php.net
[2021-02-16 11:34 UTC] nikic@php.net
-Status: Assigned
+Status: Closed
[2021-02-16 11:36 UTC] nikic@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 09 21:00:01 2025 UTC |
Description: ------------ In PHP 8.0, two different sockets compare as equal. This is a regression versus PHP 7.x. I use PHP for writing internet servers, and upgrading to 8.0 sees most of them failing. Simple constructs such as, $socknum = array_search($sock, $sockets) no longer function as they intuitively ought to. As an aside, it used to be convenient to do, $array[(int)$socket] = $socket; But in 8.0, (int) $socket bombs, and var_export($socket, true) returns the same value regardless of what's in the socket. Test script: --------------- #!/usr/bin/php <?php $socket_1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $socket_2 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $vector = array(1 => $socket_1, 2 => $socket_2); $IDX_1 = array_search($socket_1, $vector); $IDX_2 = array_search($socket_2, $vector); $V = substr(PHP_VERSION, 0, 3); echo "In PHP {$V}:\n". "\tSocket 1 was found at array index {$IDX_1}, and\n". "\tSocket 2 was found at array index {$IDX_2}.\n"; socket_close($socket_1); socket_close($socket_2); ?> Expected result: ---------------- ~$ /tmp/socket-compare-test.php In PHP 7.3: Socket 1 was found at array index 1, and Socket 2 was found at array index 2. Actual result: -------------- ~$ /tmp/socket-compare-test.php In PHP 8.0: Socket 1 was found at array index 1, and Socket 2 was found at array index 1.