com web/php: add json_encode()ded endpoint to PHP releases list + content type adjustments: rele ases/index.php
| From: | Hannes Magnusson | Date: | Mon, 06 Apr 2015 15:17:00 +0000 |
| Subject: | com web/php: add json_encode()ded endpoint to PHP releases list + content type adjustments: rele ases/index.php | ||
| Groups: | php.webmaster | ||
| Request: | Send a blank email to php-webmaster+get-21022@lists.php.net to get a copy of this message | ||
Commit: 4b1af5f2c67e77604fe2df4542120a761840a78d
Author: Márcio Almada <marcio3w@gmail.com> Wed, 5 Nov 2014 02:23:44 -0300
Committer: Ben Ramsey <ben@benramsey.com> Mon, 6 Apr 2015 10:17:00 -0500
Parents: 0d85fc1d0670f73d7fee5b9b2f0e5d5f145f7ac3
Branches: master
Link: http://git.php.net/?p=web/php.git;a=commitdiff;h=4b1af5f2c67e77604fe2df4542120a761840a78d
Log:
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
Changed paths:
M releases/index.php
Diff:
diff --git a/releases/index.php b/releases/index.php
index fcdd67d..c5eb3f7 100644
--- a/releases/index.php
+++ b/releases/index.php
@@ -5,6 +5,7 @@ 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');
$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 @@ if (isset($_GET["serialize"])) {
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 " <option
value=\"php-${ver}.tar.gz\">$ver</option>"; done
@@ -102,9 +157,18 @@ $SIDEBAR_DATA = '
<div class="panel">
<div class="headline">Want a PHP serialize()d list of the PHP
releases?</div>
<div class="body">
- <p>Add <a href="?serialize=1">?serialize=1</a> to the url</p>
- <p>Only want PHP 5 releases? <a
href="?serialize=1&version=5">&version=5</a></p>
- <p>The last 3? <a
href="?serialize=1&version=5&max=3">&max=3</a></p>
+ <p>Add <a href="?serialize">?serialize</a> to the url</p>
+ <p>Only want PHP 5 releases? <a
href="?serialize&version=5">&version=5</a></p>
+ <p>The last 3? <a
href="?serialize&version=5&max=3">&max=3</a></p>
+ </div>
+</div>
+
+<div class="panel">
+ <div class="headline">Want a json_encode()ded list of the PHP
releases?</div>
+ <div class="body">
+ <p>Add <a href="?json">?json</a> to the url</p>
+ <p>Only want PHP 5 releases? <a
href="?json&version=5">&version=5</a></p>
+ <p>The last 3? <a
href="?json&version=5&max=3">&max=3</a></p>
</div>
</div>
';