Author: Derick Rethans (derickr)
Date: 2025-08-18T11:02:41+01:00

Commit: 
https://github.com/php/web-php/commit/ec526f8aa69d5cd3816e19b62f940c9494566b93
Raw diff: 
https://github.com/php/web-php/commit/ec526f8aa69d5cd3816e19b62f940c9494566b93.diff

Use backend code to fetch the file, fix some precedence, and tweak coding 
standards with PSR

Changed paths:
  A  include/download-instructions/win-releases.json
  M  .gitignore
  M  include/download-instructions/windows-downloads.php


Diff:

diff --git a/.gitignore b/.gitignore
index 68e6dab8a5..5fa5cd36ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,6 @@ backend/mirror.gif
 backend/mirror.png
 backend/mirror.jpg
 backend/GeoIP.dat
-include/download-instructions/releases.json
 node_modules/
 /test-results/
 /playwright-report/
diff --git a/include/download-instructions/win-releases.json 
b/include/download-instructions/win-releases.json
new file mode 100644
index 0000000000..f57a775849
--- /dev/null
+++ b/include/download-instructions/win-releases.json
@@ -0,0 +1,513 @@
+{
+       "comment": "DO NOT EDIT. This file is here for demonstration purposes 
only, and gets overwritten by the backend generation code",
+    "7.4": {
+        "version": "7.4.33",
+        "ts-vc15-x64": {
+            "mtime": "2024-07-10T21:09:08+00:00",
+            "zip": {
+                "path": "php-7.4.33-Win32-vc15-x64.zip",
+                "size": "25.02MB",
+                "sha256": 
"cdbb85b45f38f282f05764ca08648b5f92db99c75b2fb3848eb4a559f6553b48"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-7.4.33-Win32-vc15-x64.zip",
+                "size": "22MB",
+                "sha256": 
"4d6f92447195f6bf70ed214c65f6ca0f9b299e0af109de56b8d284f66d287703"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-7.4.33-Win32-vc15-x64.zip",
+                "size": "1.08MB",
+                "sha256": 
"e7a2b5770be98f0d40da8be9d1c6b58738f1bad66832dd0b98e7a7d1231376bd"
+            }
+        },
+        "source": {
+            "path": "php-7.4.33-src.zip",
+            "size": "22.85MB",
+            "sha256": 
"a217295f01c82ab54b8744f16f857b8ef0b64b2a60c8bc964f1caf8851b022c2"
+        },
+        "test_pack": {
+            "path": "php-test-pack-7.4.33.zip",
+            "size": "13.54MB",
+            "sha256": 
"1526db56eb6d8052ca4902da12fb1dc9c255dbf2c8daac44869540e5c12072b0"
+        },
+        "ts-vc15-x86": {
+            "mtime": "2024-07-10T21:09:10+00:00",
+            "zip": {
+                "path": "php-7.4.33-Win32-vc15-x86.zip",
+                "size": "23.18MB",
+                "sha256": 
"6adcf02c02634f258f6b6b2bb666f22916c9bd986db2ccae05acb9868a35f847"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-7.4.33-Win32-vc15-x86.zip",
+                "size": "22.6MB",
+                "sha256": 
"fee55643a1ca1b2111649e2abd10ca29776f48d824993c62153528e0574d8fa1"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-7.4.33-Win32-vc15-x86.zip",
+                "size": "1.08MB",
+                "sha256": 
"e5ef2f8559be689dca4134d84a27368bc90829b3a3e9861b77733850ac1378ec"
+            }
+        },
+        "nts-vc15-x64": {
+            "mtime": "2024-07-10T21:09:01+00:00",
+            "zip": {
+                "path": "php-7.4.33-nts-Win32-vc15-x64.zip",
+                "size": "24.92MB",
+                "sha256": 
"14ae3250d4447c8ccfc4c45a70d90adfbcd61e728d85f0be56a7ddf8f9c8aace"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-7.4.33-nts-Win32-vc15-x64.zip",
+                "size": "22MB",
+                "sha256": 
"922f3338102601736c465b9815a254e0cadcd873d963c17671ace86b135b54b0"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-7.4.33-nts-Win32-vc15-x64.zip",
+                "size": "1.08MB",
+                "sha256": 
"70bd4e0770d36c6470ce159c3eb6425226de00248ed5eb63476c43705e6f4b7a"
+            }
+        },
+        "nts-vc15-x86": {
+            "mtime": "2024-07-10T21:09:03+00:00",
+            "zip": {
+                "path": "php-7.4.33-nts-Win32-vc15-x86.zip",
+                "size": "23.2MB",
+                "sha256": 
"3719efc430c3b82cf809ff1b4bb7d720e388f793b1e1857e4d892c62fa950b68"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-7.4.33-nts-Win32-vc15-x86.zip",
+                "size": "22.93MB",
+                "sha256": 
"ba5b7833916dc21fa61e0eae8fae6a396c631b3c9249920e554905821442b37d"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-7.4.33-nts-Win32-vc15-x86.zip",
+                "size": "1.08MB",
+                "sha256": 
"7c4eeecdb1fe4ac3df66eb4851930defea1e773a3174b7e7a33223beb570c627"
+            }
+        }
+    },
+    "8.0": {
+        "version": "8.0.30",
+        "ts-vs16-x64": {
+            "mtime": "2024-07-10T21:09:20+00:00",
+            "zip": {
+                "path": "php-8.0.30-Win32-vs16-x64.zip",
+                "size": "25.63MB",
+                "sha256": 
"8697972b5f704885e3444422ede2b5c25d025f614ea96dc67de74dc582471562"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.0.30-Win32-vs16-x64.zip",
+                "size": "23.23MB",
+                "sha256": 
"8d872df1ff623b64b5152451c2e86de58c9aebf2131db7cee6496b1527027e73"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.0.30-Win32-vs16-x64.zip",
+                "size": "1.16MB",
+                "sha256": 
"d15960def77f340b868767840fc5406b5a86822e634df7e96c130f91bc28499a"
+            }
+        },
+        "source": {
+            "path": "php-8.0.30-src.zip",
+            "size": "23.48MB",
+            "sha256": 
"2ed0ab20f4eff69367c71df86a8504d2ab91de297b5e8b8fd496779134f1bcc0"
+        },
+        "test_pack": {
+            "path": "php-test-pack-8.0.30.zip",
+            "size": "13.56MB",
+            "sha256": 
"553ee09e6a773f6dc940ba662346c07304bdbe40ee212ef4336f50a7a86adf35"
+        },
+        "ts-vs16-x86": {
+            "mtime": "2024-07-10T21:09:22+00:00",
+            "zip": {
+                "path": "php-8.0.30-Win32-vs16-x86.zip",
+                "size": "23.64MB",
+                "sha256": 
"8dec05f39e6618ee20e252b180d69f8cd0162a3dd2545321593d8f4f44f4af52"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.0.30-Win32-vs16-x86.zip",
+                "size": "23.52MB",
+                "sha256": 
"3de68c50c6dc674993860cd6a05f56b20e0c11e909af5c71ffcb9f48010a120b"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.0.30-Win32-vs16-x86.zip",
+                "size": "1.16MB",
+                "sha256": 
"d84e35170de73cf5e0240b81fb38bb1af461b508e7f1ec0aec4686351249b672"
+            }
+        },
+        "nts-vs16-x64": {
+            "mtime": "2024-07-10T21:09:12+00:00",
+            "zip": {
+                "path": "php-8.0.30-nts-Win32-vs16-x64.zip",
+                "size": "25.53MB",
+                "sha256": 
"dfb70498ffa2c617f2f655a155564697e3c9cca41709938fd1a5997d1d5b0785"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.0.30-nts-Win32-vs16-x64.zip",
+                "size": "23.21MB",
+                "sha256": 
"6d54cc8d92a65c8a6bdd61591badd6a15c921271245402691591500230416aae"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.0.30-nts-Win32-vs16-x64.zip",
+                "size": "1.16MB",
+                "sha256": 
"85e9eafbdf7a18acb646eaa0abee33204151297fba95392976f38c49c0a91524"
+            }
+        },
+        "nts-vs16-x86": {
+            "mtime": "2024-07-10T21:09:15+00:00",
+            "zip": {
+                "path": "php-8.0.30-nts-Win32-vs16-x86.zip",
+                "size": "23.65MB",
+                "sha256": 
"b649889ac73add91c02ec7f6fdb9182f148cfa3181761e32a1be02a3b1d85100"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.0.30-nts-Win32-vs16-x86.zip",
+                "size": "23.86MB",
+                "sha256": 
"bdc62ed306636b42857a2c6fb9685663a389b0a83c88a1cf6c19b201444ff19b"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.0.30-nts-Win32-vs16-x86.zip",
+                "size": "1.16MB",
+                "sha256": 
"a7dba1b187b06371a1f6e4f2eeddf6c938c286ce6eb70ee52393eadb2d8c9277"
+            }
+        }
+    },
+    "8.1": {
+        "version": "8.1.33",
+        "ts-vs16-x64": {
+            "mtime": "2025-07-01T21:49:54+00:00",
+            "zip": {
+                "path": "php-8.1.33-Win32-vs16-x64.zip",
+                "size": "29.46MB",
+                "sha256": 
"41a2b8f980a3f502062d29f9442a98cf703c98dd4b8c770feb3dde013535db7a"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.1.33-Win32-vs16-x64.zip",
+                "size": "24.95MB",
+                "sha256": 
"93cee65a518722ca8218b653c90e889c67b2fcaf2cdc473979c9ca65e8409c88"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.1.33-Win32-vs16-x64.zip",
+                "size": "1.21MB",
+                "sha256": 
"cd5a85d46f6b3737d1e6c77caf2fb8fc676952bc84fab8c5adbd4e7324a8ca3c"
+            }
+        },
+        "source": {
+            "path": "php-8.1.33-src.zip",
+            "size": "25.07MB",
+            "sha256": 
"175bcd5b847eb51bae037075a0c6feee6ec9dc3d1e0f50f0d35b07903437e41b"
+        },
+        "test_pack": {
+            "path": "php-test-pack-8.1.33.zip",
+            "size": "15.43MB",
+            "sha256": 
"19a66cc4bd64a855a2675352a94b3dd984005a7c92f5dab5a96e35d603ffea91"
+        },
+        "ts-vs16-x86": {
+            "mtime": "2025-07-01T21:49:54+00:00",
+            "zip": {
+                "path": "php-8.1.33-Win32-vs16-x86.zip",
+                "size": "26.38MB",
+                "sha256": 
"c8180a98d7c179cf1cbc31fda916741bfbd8c850f4a5cd4de1f40f73631d7825"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.1.33-Win32-vs16-x86.zip",
+                "size": "24.72MB",
+                "sha256": 
"8850b46847106910f9035465ae94049898baeeeaae4bb42ced65b7716734ddce"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.1.33-Win32-vs16-x86.zip",
+                "size": "1.21MB",
+                "sha256": 
"c84f0462646deb8ca922d99b7089ef57052b360b2245de9164a98ac2c24741d0"
+            }
+        },
+        "nts-vs16-x64": {
+            "mtime": "2025-07-01T21:49:54+00:00",
+            "zip": {
+                "path": "php-8.1.33-nts-Win32-vs16-x64.zip",
+                "size": "29.35MB",
+                "sha256": 
"da7b4209072731b6099858030f7db98bc040ed670758a288a0a6208bc691feb2"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.1.33-nts-Win32-vs16-x64.zip",
+                "size": "24.98MB",
+                "sha256": 
"e8cfbc304fd0d2a675956a0b7964655372f27fdb2560409ff23dc4efc240a7d4"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.1.33-nts-Win32-vs16-x64.zip",
+                "size": "1.21MB",
+                "sha256": 
"cbe1a997239dccea3bd3ee44324c84ac18a9cf597f37c87c8dc56e82ce741be1"
+            }
+        },
+        "nts-vs16-x86": {
+            "mtime": "2025-07-01T21:49:54+00:00",
+            "zip": {
+                "path": "php-8.1.33-nts-Win32-vs16-x86.zip",
+                "size": "26.4MB",
+                "sha256": 
"2d63bf6bf5e87e78b249b825efc8079416c75170be3437c466727b124ece1ae0"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.1.33-nts-Win32-vs16-x86.zip",
+                "size": "25.06MB",
+                "sha256": 
"6b2b5b36e16ae57bf18edb822a824ee59b48f36bd38a8c8d5713cc87ac145c39"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.1.33-nts-Win32-vs16-x86.zip",
+                "size": "1.21MB",
+                "sha256": 
"87c11c0015887014cea90aa4804281acbfbeea0ddfec4760517834dd8faebb96"
+            }
+        }
+    },
+    "8.2": {
+        "version": "8.2.29",
+        "ts-vs16-x64": {
+            "mtime": "2025-07-01T18:54:34+00:00",
+            "zip": {
+                "path": "php-8.2.29-Win32-vs16-x64.zip",
+                "size": "30.45MB",
+                "sha256": 
"5f96961e6d77dd4130e58a304715a1b12050b6e92f9ddba2fc4ca0a5b1dafaf0"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.2.29-Win32-vs16-x64.zip",
+                "size": "25.47MB",
+                "sha256": 
"54258b2fa3be53f00ccf76146b85a05990ba10b5861b63d58fdd8fbc9da0e9ad"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.2.29-Win32-vs16-x64.zip",
+                "size": "1.24MB",
+                "sha256": 
"afd855d307a81ac82ffa4be520b7e4eb38575953dfaa11e77ebd22c4bf25ce3f"
+            }
+        },
+        "source": {
+            "path": "php-8.2.29-src.zip",
+            "size": "25.8MB",
+            "sha256": 
"cbe2305e516533f2bcb3bd9df59751df4b246a02eec9c901f6af5512f738c9c7"
+        },
+        "test_pack": {
+            "path": "php-test-pack-8.2.29.zip",
+            "size": "15.89MB",
+            "sha256": 
"1947843bd20cc3d8de2e1043eb8d6cd6bcdd1c4bf1dae46a69cfa16fd83439ea"
+        },
+        "ts-vs16-x86": {
+            "mtime": "2025-07-01T18:54:34+00:00",
+            "zip": {
+                "path": "php-8.2.29-Win32-vs16-x86.zip",
+                "size": "27.21MB",
+                "sha256": 
"862c98b3c0ea5b40d15f6df1dc65eb9a1b7d3f115a88351e507f7c868cc57323"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.2.29-Win32-vs16-x86.zip",
+                "size": "25.35MB",
+                "sha256": 
"2a7397eaea7dae49e15b80f155e3239dd8c3a741a8c3e7114976ef7c6f0ece5d"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.2.29-Win32-vs16-x86.zip",
+                "size": "1.24MB",
+                "sha256": 
"3bf7520968c6d48370c0fac8fe6c64a1f12a669be444d43a4864a412c2383315"
+            }
+        },
+        "nts-vs16-x64": {
+            "mtime": "2025-07-01T18:54:34+00:00",
+            "zip": {
+                "path": "php-8.2.29-nts-Win32-vs16-x64.zip",
+                "size": "30.34MB",
+                "sha256": 
"00ce01ef2d2b4245354ac7cd0cc94e202a908479da4f288b1aa3354176077c44"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.2.29-nts-Win32-vs16-x64.zip",
+                "size": "25.5MB",
+                "sha256": 
"a35863767536e13d7a1f27115ca9492166e57957d282e5d029a8c67cb95742bf"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.2.29-nts-Win32-vs16-x64.zip",
+                "size": "1.24MB",
+                "sha256": 
"d9b5c0709851ba624d3aa21e1504482238411460a87e488d09ec7ecd37ea4521"
+            }
+        },
+        "nts-vs16-x86": {
+            "mtime": "2025-07-01T18:54:34+00:00",
+            "zip": {
+                "path": "php-8.2.29-nts-Win32-vs16-x86.zip",
+                "size": "27.24MB",
+                "sha256": 
"07611b1c7691ad02fb0ffb323db9f4e065ff53070b62726c5941618941e35f56"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.2.29-nts-Win32-vs16-x86.zip",
+                "size": "25.7MB",
+                "sha256": 
"580c4fe75d04bd2c9f200cc732c7b9e71f1ea67c7900b3123e2fde96ff3d75a1"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.2.29-nts-Win32-vs16-x86.zip",
+                "size": "1.24MB",
+                "sha256": 
"6332f6b7f680dbd62901cefe672679943d360698133a2f260c1cd614018d42f6"
+            }
+        }
+    },
+    "8.3": {
+        "version": "8.3.24",
+        "ts-vs16-x64": {
+            "mtime": "2025-07-29T16:33:00+00:00",
+            "zip": {
+                "path": "php-8.3.24-Win32-vs16-x64.zip",
+                "size": "30.86MB",
+                "sha256": 
"db1b23a64856eb60baae91e7757db3b5ab7bbf9927aba7fd95b5441f84be86f6"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.3.24-Win32-vs16-x64.zip",
+                "size": "30.26MB",
+                "sha256": 
"47c7d0613ed28b6b718c257efa5aa18dd41f20a48fdfd350e6e11397b205ebdd"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.3.24-Win32-vs16-x64.zip",
+                "size": "1.26MB",
+                "sha256": 
"f3972a8643747ea9c28f34d016e464bcca57b251602a0252983c1d7d7cdb3072"
+            }
+        },
+        "source": {
+            "path": "php-8.3.24-src.zip",
+            "size": "26.67MB",
+            "sha256": 
"6df12807479ff3f39b5457ff1c3753ecf5221d6e2ab9c5ba36de69f41457b25a"
+        },
+        "test_pack": {
+            "path": "php-test-pack-8.3.24.zip",
+            "size": "16.63MB",
+            "sha256": 
"fa89133b4b51c543c4b38b01dccb6001d36c47c38cf332edbc20161b5dce676d"
+        },
+        "ts-vs16-x86": {
+            "mtime": "2025-07-29T16:33:00+00:00",
+            "zip": {
+                "path": "php-8.3.24-Win32-vs16-x86.zip",
+                "size": "27.57MB",
+                "sha256": 
"c285a48339f31744021197705742a9968608f2767ef2f603e8361e6eee485067"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.3.24-Win32-vs16-x86.zip",
+                "size": "30MB",
+                "sha256": 
"2047e73776db8901fb8a3875d1363d6492ec2c6ca84349db434e3ab043049b74"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.3.24-Win32-vs16-x86.zip",
+                "size": "1.26MB",
+                "sha256": 
"59d05ed424eeb680e54746d875a4f02b6786554f3e99c4c160775654383e10de"
+            }
+        },
+        "nts-vs16-x64": {
+            "mtime": "2025-07-29T16:32:58+00:00",
+            "zip": {
+                "path": "php-8.3.24-nts-Win32-vs16-x64.zip",
+                "size": "30.72MB",
+                "sha256": 
"f48d7f9b43197768c81bd4bfea3f5d246aed059e8aeb7f8b9ff9474fa5e9ec12"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.3.24-nts-Win32-vs16-x64.zip",
+                "size": "30.25MB",
+                "sha256": 
"281ab5e2bd529f3c66c3688b869398e2417d3f013d04314f212af6e2f0482fb3"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.3.24-nts-Win32-vs16-x64.zip",
+                "size": "1.26MB",
+                "sha256": 
"10a5f3eef0c8b1c52420748e7aba06140050eeb86d6faaa46b1c656d96c103aa"
+            }
+        },
+        "nts-vs16-x86": {
+            "mtime": "2025-07-29T16:32:58+00:00",
+            "zip": {
+                "path": "php-8.3.24-nts-Win32-vs16-x86.zip",
+                "size": "27.59MB",
+                "sha256": 
"1321bee6601818facd99143042a223b6bbf648614d8cded992b36f00667ff8ce"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.3.24-nts-Win32-vs16-x86.zip",
+                "size": "30.39MB",
+                "sha256": 
"8967c1163faa8947d7280197fd4da43087611f8816714adfb324c1d4d5cf3db9"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.3.24-nts-Win32-vs16-x86.zip",
+                "size": "1.26MB",
+                "sha256": 
"7ce6f7fdcc5aaf442de0d01b2aaac10fcb241ce1fa7336e2c1f16667ccc8a0c1"
+            }
+        }
+    },
+    "8.4": {
+        "version": "8.4.11",
+        "ts-vs17-x64": {
+            "mtime": "2025-07-29T16:17:56+00:00",
+            "zip": {
+                "path": "php-8.4.11-Win32-vs17-x64.zip",
+                "size": "32.39MB",
+                "sha256": 
"ffaa48fc95df820f6a374aa8b6d9bf718be8e9b4bd190cddb2d1d377fa2a24b7"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.4.11-Win32-vs17-x64.zip",
+                "size": "36.92MB",
+                "sha256": 
"8bc1578338e2a43f6e1732054a0d4942f72a2651db95156badce4a1144b0928a"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.4.11-Win32-vs17-x64.zip",
+                "size": "1.36MB",
+                "sha256": 
"a7f2c3f18d4b5c2e2168bb21d5fd393fdfac8959740bfc6ca1d1239785f9c92a"
+            }
+        },
+        "source": {
+            "path": "php-8.4.11-src.zip",
+            "size": "28.93MB",
+            "sha256": 
"5f7077f98928cf68fe5c9be713b9cdfdd141f071ef14a2509acb6ca1d2685d5a"
+        },
+        "test_pack": {
+            "path": "php-test-pack-8.4.11.zip",
+            "size": "17.37MB",
+            "sha256": 
"7f816b3b6934c464d827fcd9dd6d965c2613351c721502b1a8b0d6ef30c20f7b"
+        },
+        "ts-vs17-x86": {
+            "mtime": "2025-07-29T16:17:54+00:00",
+            "zip": {
+                "path": "php-8.4.11-Win32-vs17-x86.zip",
+                "size": "29.03MB",
+                "sha256": 
"f86610f16b8c5983ae65397219eedc3ef773657bea036f5fe3969e8adeb680d5"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.4.11-Win32-vs17-x86.zip",
+                "size": "37.52MB",
+                "sha256": 
"912a0028bb9e50cb1e0930a09a4ab2249b7b1e522553aa9df8278b3dd5d5e7dc"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.4.11-Win32-vs17-x86.zip",
+                "size": "1.36MB",
+                "sha256": 
"683b46720c5a31187b1e42fb556a2f619930e196f7be88cc9a8a4f54f94c9379"
+            }
+        },
+        "nts-vs17-x64": {
+            "mtime": "2025-07-29T16:17:54+00:00",
+            "zip": {
+                "path": "php-8.4.11-nts-Win32-vs17-x64.zip",
+                "size": "32.24MB",
+                "sha256": 
"8e5fc5a247087d01a415799001c45e2690ddae1310cee2e60fa63a5d78244356"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.4.11-nts-Win32-vs17-x64.zip",
+                "size": "36.83MB",
+                "sha256": 
"52d1dfd591bc2a78b43c4ef41f3f1096193a7ac9af3b96869001e36d7a410784"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.4.11-nts-Win32-vs17-x64.zip",
+                "size": "1.35MB",
+                "sha256": 
"dfe9760865924a4eb61ec64fed3d74c4bbd9b7dec4295704ea91f6d47f17fdda"
+            }
+        },
+        "nts-vs17-x86": {
+            "mtime": "2025-07-29T16:17:54+00:00",
+            "zip": {
+                "path": "php-8.4.11-nts-Win32-vs17-x86.zip",
+                "size": "28.92MB",
+                "sha256": 
"5a535d8f1c9adf486652f13ee9405e31177642875d563f2dbdcbee400005d15f"
+            },
+            "debug_pack": {
+                "path": "php-debug-pack-8.4.11-nts-Win32-vs17-x86.zip",
+                "size": "37.28MB",
+                "sha256": 
"40560f125763c0c97c6cf471ad127e0783c821f2f26d377a52f313fd8c3119e7"
+            },
+            "devel_pack": {
+                "path": "php-devel-pack-8.4.11-nts-Win32-vs17-x86.zip",
+                "size": "1.35MB",
+                "sha256": 
"d9163622d3fc675181d8e529ad475774bab7ef5ed6d34cac33cac48d872fc80b"
+            }
+        }
+    }
+}
diff --git a/include/download-instructions/windows-downloads.php 
b/include/download-instructions/windows-downloads.php
index ea014e2d30..6f006e2ad0 100644
--- a/include/download-instructions/windows-downloads.php
+++ b/include/download-instructions/windows-downloads.php
@@ -1,69 +1,35 @@
 <?php
-$cacheFile = (sys_get_temp_dir() ?? __DIR__) . '/releases.json';
-$releasesUrl = 'https://downloads.php.net/~windows/releases/releases.json';
-$fallbackReleasesUrl = 
'https://downloads.internal.php.net/~windows/releases/releases.json';
-$maxAge = 3600;
-
-$needFetch = true;
-if (file_exists($cacheFile)) {
-       $mtime = @filemtime($cacheFile) ?: 0;
-       if (time() - $mtime < $maxAge) {
-               $needFetch = false;
-       }
-}
-
-if ($needFetch) {
-       $context = stream_context_create([
-               'http' => [
-                       'header' => "User-Agent: web-php/1.1",
-            'timeout' => 5,
-               ],
-        'ssl' => [
-            'allow_self_signed' => true,
-            'verify_peer_name' => false,
-        ],
-       ]);
-       $json = @file_get_contents($releasesUrl, false, $context);
-       if ($json === false || $json === null) {
-               $json = @file_get_contents($fallbackReleasesUrl, false, 
$context);
-       }
-       if ($json !== false && $json !== null) {
-               $tmp = $cacheFile . '.tmp';
-               if (@file_put_contents($tmp, $json) !== false) {
-                       @rename($tmp, $cacheFile);
-               }
-       }
-}
+$baseDownloads  = 'https://downloads.php.net/~windows/releases/';
 
-$dataStr = @file_get_contents($cacheFile);
+$dataStr = @file_get_contents(__DIR__ . '/win-releases.json');
 $releases = $dataStr ? json_decode($dataStr ?? $json, true) : null;
 
 if (!is_array($releases)) {
        echo '<p>Windows release index is temporarily unavailable.</p>';
-    if (file_exists($cacheFile)) {
-        @unlink($cacheFile);
-    }
        return;
 }
 
 if (!isset($releases[$version]) || !is_array($releases[$version])) {
-       echo '<p>No Windows builds found for PHP ' . htmlspecialchars($version) 
. '.</p>';
+       echo '<p>No Windows builds found for PHP ' . htmlspecialchars($version 
?? '') . '.</p>';
        return;
 }
 
 $verBlock = $releases[$version];
 $fullVersion = isset($verBlock['version']) ? $verBlock['version'] : $version;
 
-$baseDownloads  = 'https://downloads.php.net/~windows/releases/';
-
 function ws_build_label(string $k, array $entry): string {
        $tool = 'VS';
-       if (strpos($k, 'vs17') !== false) { $tool .= '17'; }
-       elseif (strpos($k, 'vs16') !== false) { $tool .= '16'; }
-       elseif (strpos($k, 'vc15') !== false) { $tool = 'VC15'; }
+       if (strpos($k, 'vs17') !== false) {
+               $tool .= '17';
+       } elseif (strpos($k, 'vs16') !== false) {
+               $tool .= '16';
+       } elseif (strpos($k, 'vc15') !== false) {
+               $tool = 'VC15';
+       }
 
        $arch = (strpos($k, 'x64') !== false) ? 'x64' : ((strpos($k, 'x86') !== 
false) ? 'x86' : '');
        $ts = (strpos($k, 'nts') !== false) ? 'Non Thread Safe' : 'Thread Safe';
+
        if (strncmp($k, 'nts-', 4) === 0) {
                $ts = 'Non Thread Safe';
        } elseif (strncmp($k, 'ts-', 3) === 0) {
@@ -72,16 +38,17 @@ function ws_build_label(string $k, array $entry): string {
 
        $mtime = isset($entry['mtime']) ? strtotime($entry['mtime']) : 0;
        $mt = $mtime ? gmdate('Y-M-d H:i:s', $mtime) : '';
+
        return trim(($tool ? $tool . ' ' : '') . ($arch ? $arch . ' ' : '') . 
$ts . ($mt ? ' <span class="time">' . $mt . ' UTC</span>' : ''));
 }
 
 echo '<h3>PHP ' . htmlspecialchars($version) . ' (' . $fullVersion . ')</h3>';
 
 if (!empty($verBlock['source']['path'])) {
-       echo '<p><strong><a href="' . $baseDownloads . 
$verBlock['source']['path'] . '">Download source code</a></strong> <span 
class="size">' . $verBlock['source']['size'] ?? '' . '</span></p>';
+       echo '<p><strong><a href="' . $baseDownloads . 
$verBlock['source']['path'] . '">Download source code</a></strong> <span 
class="size">' . ($verBlock['source']['size'] ?? '') . '</span></p>', PHP_EOL;
 }
 if (!empty($verBlock['test_pack']['path'])) {
-       echo '<p><strong><a href="' . $baseDownloads . 
$verBlock['test_pack']['path'] . '">Download tests package (phpt)</a></strong> 
<span class="size">' . $verBlock['test_pack']['size'] ?? '' . '</span></p>';
+       echo '<p><strong><a href="' . $baseDownloads . 
$verBlock['test_pack']['path'] . '">Download tests package (phpt)</a></strong> 
<span class="size">' . ($verBlock['test_pack']['size'] ?? '') . '</span></p>', 
PHP_EOL;
 }
 
 $buckets = [
@@ -92,40 +59,49 @@ function ws_build_label(string $k, array $entry): string {
 ];
 
 $package_names = [
-    'zip' => 'Zip',
-    'debug_pack' => 'Debug Pack',
-    'devel_pack' => 'Development package (SDK to develop PHP extensions)',
+       'zip' => 'Zip',
+       'debug_pack' => 'Debug Pack',
+       'devel_pack' => 'Development package (SDK to develop PHP extensions)',
 ];
 
 foreach ($verBlock as $k => $entry) {
-       if (!is_array($entry)) { continue; }
-       if (in_array($k, ['version', 'source', 'test_pack'], true)) { continue; 
}
+       if (!is_array($entry)) {
+               continue;
+       }
+       if (in_array($k, ['version', 'source', 'test_pack'], true)) {
+               continue;
+       }
 
        $isNts = (strncmp($k, 'nts-', 4) === 0) || (strpos($k, 'nts') !== 
false);
        $arch = (strpos($k, 'x64') !== false) ? 'x64' : ((strpos($k, 'x86') !== 
false) ? 'x86' : '');
        $bucketKey = ($isNts ? 'nts' : 'ts') . '-' . ($arch !== '' ? $arch : 
'other');
-       if (!isset($buckets[$bucketKey])) { $bucketKey = 'other'; }
+
+       if (!isset($buckets[$bucketKey])) {
+               $bucketKey = 'other';
+       }
        $buckets[$bucketKey][] = [$k, $entry];
 }
 
 foreach (['nts-x64', 'ts-x64', 'nts-x86', 'ts-x86'] as $bk) {
        foreach ($buckets[$bk] as [$k, $entry]) {
                $label = ws_build_label($k, $entry);
-               if ($label === '') { continue; }
+               if ($label === '') {
+                       continue;
+               }
 
-               echo '<div class="win-build">';
-               echo '<h4>' . $label . '</h4>';
+               echo PHP_EOL;
+               echo '<div class="win-build" id="' . $k . '">', PHP_EOL;
+               echo "\t", '<h4>' . $label . '</h4>', PHP_EOL;
 
                foreach(['zip', 'debug_pack', 'devel_pack'] as $type) {
                        if (!empty($entry[$type]['path'])) {
                                $p = $entry[$type]['path'];
-                               echo '<p><strong><a href="' . $baseDownloads . 
$p . '">' . $package_names[$type] . '</a></strong> <span class="size">' . 
$entry[$type]['size'] . '</span><br>';
-                               echo '<span 
class="sha256"><strong>sha256:</strong> ' . $entry[$type]['sha256'] ?? '' . 
'</span></p>';
+                               echo "\t", '<p><strong><a href="' . 
$baseDownloads . $p . '">' . $package_names[$type] . '</a></strong> <span 
class="size">' . $entry[$type]['size'] . '</span><br>', PHP_EOL;
+                               echo "\t", '<span 
class="sha256"><strong>sha256:</strong> ' . $entry[$type]['sha256'] ?? '' . 
'</span></p>', PHP_EOL;
                        }
                }
 
-               echo '</div>';
+               echo '</div>', PHP_EOL;
        }
 }
-
 ?>

Reply via email to