From 4b1af5f2c67e77604fe2df4542120a761840a78d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rcio=20Almada?= Date: Wed, 5 Nov 2014 02:23:44 -0300 Subject: [PATCH 1/5] add json_encode()ded endpoint to PHP releases list + content type adjustments We usually warn PHP users to avoid unserialize remote or untrusted data but at the same time php.net only offers a serialized endpoint for PHP releases. This commit: - adds a JSON endpoint that can be an option to avoid the serialized endpoint - sets a proper Content-Type response header for both serialized - `text/plain` - and json - `application/json` - endpoints - simplifies URLs exchanging `&serialize=1` and `&json=1` for `&serialize` and `&json` respectively --- releases/index.php | 70 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/releases/index.php b/releases/index.php index fcdd67d011..c5eb3f754e 100644 --- a/releases/index.php +++ b/releases/index.php @@ -5,6 +5,7 @@ include_once $_SERVER["DOCUMENT_ROOT"] . "/include/branches.inc"; if (isset($_GET["serialize"])) { + header('Content-type: text/plain'); $RELEASES[5][$PHP_5_4_VERSION]["date"] = $PHP_5_4_DATE; $RELEASES[5][$PHP_5_3_VERSION]["date"] = $PHP_5_3_DATE; $RELEASES = $RELEASES + $OLDRELEASES; @@ -57,6 +58,60 @@ return; } +if (isset($_GET["json"])) { + header('Content-Type: application/json'); + $RELEASES[5][$PHP_5_4_VERSION]["date"] = $PHP_5_4_DATE; + $RELEASES[5][$PHP_5_3_VERSION]["date"] = $PHP_5_3_DATE; + $RELEASES = $RELEASES + $OLDRELEASES; + + if (isset($_GET["version"])) { + $ver = (int)$_GET["version"]; + + if (isset($RELEASES[$ver])) { + list($version, $r) = each($RELEASES[$ver]); + + if (isset($_GET["max"])) { + $max = (int)$_GET["max"]; + if ($max == -1) { $max = PHP_INT_MAX; } + + $return = array($version => $r); + + $count = 1; + + /* check if other $RELEASES[$ver] are there */ + /* e.g., 5_3, 5_4, and 5_5 all exist and have a release */ + while(($z = each($RELEASES[$ver])) && $count++ < $max) { + $return[$z[0]] = $z[1]; + } + + foreach($OLDRELEASES[$ver] as $version => $release) { + if ($max <= $count++) { + break; + } + + $return[$version] = $release; + } + echo json_encode($return); + } else { + $r["version"] = $version; + + echo json_encode($r); + } + } else { + echo json_encode(array("error" => "Unknown version")); + } + } else { + $array = array(); + foreach($RELEASES as $major => $release) { + list($version, $r) = each($release); + $r["version"] = $version; + $array[$major] = $r; + } + echo json_encode($array); + } + return; +} + // Tarball list generated with: // cvs status -v php[34]/INSTALL |grep 'php_'|awk '{print $1}'|grep -Ev '(RC[0-9]*|rc[_0-9]*|REL|[ab][a0-9-]+|b..rc.|b.pl.|bazaar|pre|[ab])$'|sed -e 's,php_,,' -e 's,_,.,g'|sort -n|while read ver; do echo " "; done @@ -102,9 +157,18 @@
Want a PHP serialize()d list of the PHP releases?
-

Add ?serialize=1 to the url

-

Only want PHP 5 releases? &version=5

-

The last 3? &max=3

+

Add ?serialize to the url

+

Only want PHP 5 releases? &version=5

+

The last 3? &max=3

+
+
+ +
+
Want a json_encode()ded list of the PHP releases?
+
+

Add ?json to the url

+

Only want PHP 5 releases? &version=5

+

The last 3? &max=3

'; From f051345e2bb5eb64b33590967ab11f7e4e8a2fc1 Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Mon, 6 Apr 2015 09:41:27 -0500 Subject: [PATCH 2/5] Remove $PHP_5_3_* variables causing notices These variables were removed in 470fc09f31, since 5.3 is no longer an active release. --- releases/index.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/releases/index.php b/releases/index.php index c5eb3f754e..617204663d 100644 --- a/releases/index.php +++ b/releases/index.php @@ -7,7 +7,6 @@ if (isset($_GET["serialize"])) { header('Content-type: text/plain'); $RELEASES[5][$PHP_5_4_VERSION]["date"] = $PHP_5_4_DATE; - $RELEASES[5][$PHP_5_3_VERSION]["date"] = $PHP_5_3_DATE; $RELEASES = $RELEASES + $OLDRELEASES; if (isset($_GET["version"])) { @@ -61,7 +60,6 @@ if (isset($_GET["json"])) { header('Content-Type: application/json'); $RELEASES[5][$PHP_5_4_VERSION]["date"] = $PHP_5_4_DATE; - $RELEASES[5][$PHP_5_3_VERSION]["date"] = $PHP_5_3_DATE; $RELEASES = $RELEASES + $OLDRELEASES; if (isset($_GET["version"])) { From bbb58d9d6cab1f9a70cc820ad54535cf50caa553 Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Mon, 6 Apr 2015 10:00:44 -0500 Subject: [PATCH 3/5] Simplify code according to @bjori's comment See https://github.com/php/web-php/pull/53#discussion-diff-24725253 --- releases/index.php | 69 ++++++++-------------------------------------- 1 file changed, 12 insertions(+), 57 deletions(-) diff --git a/releases/index.php b/releases/index.php index 617204663d..635d69c206 100644 --- a/releases/index.php +++ b/releases/index.php @@ -4,11 +4,12 @@ include_once $_SERVER['DOCUMENT_ROOT'] . '/include/prepend.inc'; include_once $_SERVER["DOCUMENT_ROOT"] . "/include/branches.inc"; -if (isset($_GET["serialize"])) { - header('Content-type: text/plain'); +if (isset($_GET["serialize"]) || isset($_GET["json"])) { $RELEASES[5][$PHP_5_4_VERSION]["date"] = $PHP_5_4_DATE; $RELEASES = $RELEASES + $OLDRELEASES; + $return = array(); + if (isset($_GET["version"])) { $ver = (int)$_GET["version"]; @@ -36,14 +37,13 @@ $return[$version] = $release; } - echo serialize($return); } else { $r["version"] = $version; - echo serialize($r); + $return = $r; } } else { - echo serialize(array("error" => "Unknown version")); + $return = array("error" => "Unknown version"); } } else { $array = array(); @@ -52,60 +52,15 @@ $r["version"] = $version; $array[$major] = $r; } - echo serialize($array); + $return = $array; } - return; -} - -if (isset($_GET["json"])) { - header('Content-Type: application/json'); - $RELEASES[5][$PHP_5_4_VERSION]["date"] = $PHP_5_4_DATE; - $RELEASES = $RELEASES + $OLDRELEASES; - - if (isset($_GET["version"])) { - $ver = (int)$_GET["version"]; - - if (isset($RELEASES[$ver])) { - list($version, $r) = each($RELEASES[$ver]); - - if (isset($_GET["max"])) { - $max = (int)$_GET["max"]; - if ($max == -1) { $max = PHP_INT_MAX; } - - $return = array($version => $r); - - $count = 1; - - /* check if other $RELEASES[$ver] are there */ - /* e.g., 5_3, 5_4, and 5_5 all exist and have a release */ - while(($z = each($RELEASES[$ver])) && $count++ < $max) { - $return[$z[0]] = $z[1]; - } - - foreach($OLDRELEASES[$ver] as $version => $release) { - if ($max <= $count++) { - break; - } - $return[$version] = $release; - } - echo json_encode($return); - } else { - $r["version"] = $version; - - echo json_encode($r); - } - } else { - echo json_encode(array("error" => "Unknown version")); - } - } else { - $array = array(); - foreach($RELEASES as $major => $release) { - list($version, $r) = each($release); - $r["version"] = $version; - $array[$major] = $r; - } - echo json_encode($array); + if (isset($_GET["serialize"])) { + header('Content-type: text/plain'); + echo serialize($return); + } elseif (isset($_GET["json"])) { + header('Content-Type: application/json'); + echo json_encode($return); } return; } From a2106dccfb40ec7443650617632c37b3c853102a Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Mon, 6 Apr 2015 10:08:42 -0500 Subject: [PATCH 4/5] Adding clarity to the variable names for the JSON/serialized output --- releases/index.php | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/releases/index.php b/releases/index.php index 635d69c206..3a43919908 100644 --- a/releases/index.php +++ b/releases/index.php @@ -8,7 +8,7 @@ $RELEASES[5][$PHP_5_4_VERSION]["date"] = $PHP_5_4_DATE; $RELEASES = $RELEASES + $OLDRELEASES; - $return = array(); + $machineReadable = array(); if (isset($_GET["version"])) { $ver = (int)$_GET["version"]; @@ -20,14 +20,14 @@ $max = (int)$_GET["max"]; if ($max == -1) { $max = PHP_INT_MAX; } - $return = array($version => $r); + $machineReadable = array($version => $r); $count = 1; /* check if other $RELEASES[$ver] are there */ /* e.g., 5_3, 5_4, and 5_5 all exist and have a release */ while(($z = each($RELEASES[$ver])) && $count++ < $max) { - $return[$z[0]] = $z[1]; + $machineReadable[$z[0]] = $z[1]; } foreach($OLDRELEASES[$ver] as $version => $release) { @@ -35,32 +35,31 @@ break; } - $return[$version] = $release; + $machineReadable[$version] = $release; } } else { $r["version"] = $version; - $return = $r; + $machineReadable = $r; } } else { - $return = array("error" => "Unknown version"); + $machineReadable = array("error" => "Unknown version"); } } else { - $array = array(); + $machineReadable = array(); foreach($RELEASES as $major => $release) { list($version, $r) = each($release); $r["version"] = $version; - $array[$major] = $r; + $machineReadable[$major] = $r; } - $return = $array; } if (isset($_GET["serialize"])) { header('Content-type: text/plain'); - echo serialize($return); + echo serialize($machineReadable); } elseif (isset($_GET["json"])) { header('Content-Type: application/json'); - echo json_encode($return); + echo json_encode($machineReadable); } return; } From cd20519de7c4f0ae9faa74dd6f677667023b53fe Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Mon, 6 Apr 2015 10:25:58 -0500 Subject: [PATCH 5/5] Change the paragraphs in the sidebar to a list. --- releases/index.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/releases/index.php b/releases/index.php index 3a43919908..324938d182 100644 --- a/releases/index.php +++ b/releases/index.php @@ -107,20 +107,24 @@
-
Want a PHP serialize()d list of the PHP releases?
+
Want a PHP serialized list of the PHP releases?
-

Add ?serialize to the url

-

Only want PHP 5 releases? &version=5

-

The last 3? &max=3

+
-
Want a json_encode()ded list of the PHP releases?
+
Want a JSON list of the PHP releases?
-

Add ?json to the url

-

Only want PHP 5 releases? &version=5

-

The last 3? &max=3

+
';