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