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;
}
}
-
?>