com web/news: Provides ability to run news.php.net locally with the built-in webserver: .router.php README README.md common.php
| From: | Ferenc Kovacs | Date: | Thu, 02 Jul 2015 17:08:09 +0000 |
| Subject: | com web/news: Provides ability to run news.php.net locally with the built-in webserver: .router.php README README.md common.php | ||
| Groups: | php.webmaster | ||
| Request: | Send a blank email to php-webmaster+get-24431@lists.php.net to get a copy of this message | ||
Commit: ab0843889b24fb00d76e08be2eda73db1a499ee5
Author: Ben Ramsey <ben@benramsey.com> Thu, 2 Jul 2015 12:05:44 -0500
Parents: a5f0c304d0b9eb6945305a1e99ef126e6ca1a172
Branches: master
Link: http://git.php.net/?p=web/news.git;a=commitdiff;h=ab0843889b24fb00d76e08be2eda73db1a499ee5
Log:
Provides ability to run news.php.net locally with the built-in webserver
There is an issue with any post that contains references, since the
second NNTP connection to news.php.net times out, even though the first
connection succeeds.
Changed paths:
A .router.php
D README
A README.md
M common.php
Diff:
diff --git a/.router.php b/.router.php
new file mode 100644
index 0000000..22f2c15
--- /dev/null
+++ b/.router.php
@@ -0,0 +1,31 @@
+<?php
+
+error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
+
+$requestUri = $_SERVER['REQUEST_URI'];
+$matches = array();
+
+// Paging through group messages
+if (preg_match('#^/(php|svn|ug.+)/start/([0-9]+)#', $requestUri, $matches)) {
+ $_GET['group'] = $matches[1];
+ $_GET['i'] = $matches[2];
+ include 'group.php';
+ return true;
+}
+
+// Individual post
+if (preg_match('#^/(php|svn|ug.+)/([0-9]+)#', $requestUri, $matches)) {
+ $_GET['group'] = $matches[1];
+ $_GET['article'] = $matches[2];
+ include 'article.php';
+ return true;
+}
+
+// Newsgroup main page
+if (preg_match('#^/(php|svn|ug[^/]+)(/)?$#', $requestUri, $matches)) {
+ $_GET['group'] = $matches[1];
+ include 'group.php';
+ return true;
+}
+
+return false;
diff --git a/README b/README
deleted file mode 100644
index bd0c20e..0000000
--- a/README
+++ /dev/null
@@ -1,49 +0,0 @@
-this is all very ugly. just proof-of-concept, really.
-
-the biggest thing to do would be to do something smart with
-mime-encoded messages. but keeping the current property of <b>not</b>
-slurping the whole damn message into memory just to do so.
-
-another thing to do would be to support posting. to avoid
-completely anonymous posting, this could require confirming the
-email address before allowing posts. to do this without actually
-having to maintain a database of users, we could send an email
-containing md5(md5("email:timestamp").$secret) (where $secret is
-some value that is kept secret. duh.) and then let the user "log
-in" by supplying their email address and this code, and storing
-that in a cookie. depends on a secret for 'security', but like i
-said, it avoids having to maintain any sort of state on the server
-side. blocking email addresses for posting will be easy enough
-if anyone ever abuses the system.
-
-should also probably protect email addresses from harvesters.
-then again, anyone who wanted to harvest email addresses could just
-crawl the nntp server directly. or they can crawl any of the other
-mail archives that don't protect the addresses.
-
-keeping track of a .newsrc-like state for users would be cool,
-too. too bad there's no Set::IntSpan for php.
-
-perhaps chasing up the references: chain to display the
-thread when displaying an article would be interesting. i
-have a feeling that building some sort of index is going
-to be desirable at some point. should use jwz's threading
-algorithm. http://www.jwz.org/doc/threading.html
-
-ftp://ftp.isi.edu/in-notes/rfc2047.txt
explains how to decode encoded
-header fields. handling utf-8 and iso-8859-1 should be pretty easy.
-could use the gnu recode functions to do this in a general way,
-i think.
-
-oh, and this uses direct socket functions instead of the php imap
-extension because nntp is a drop-dead-easy protocol, and i'm allergic
-to the c-client code.
-
----
-SC.2004.09.03:
-Here are the appropriate Rewrite rules for apache:
- RewriteEngine on
- RewriteRule ^/(php.+)/start/([0-9]+) /group.php?group=$1&i=$2 [L]
- RewriteRule ^/(php.+)/([0-9]+) /article.php?group=$1&article=$2 [L]
- RewriteRule ^/(php[^/]+)(/)?$ /group.php?group=$1 [L]
-
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9118771
--- /dev/null
+++ b/README.md
@@ -0,0 +1,65 @@
+# PHP.net News Server Web Interface
+
+You may run this project using PHP's [built-in web server][webserver]
+for local development.
+
+```
+git clone https://git.php.net/repository/web/news.git
web-news
+cd web-news/
+NNTP_HOST=news.php.net php -S localhost:8080 .router.php
+```
+
+-----
+
+this is all very ugly. just proof-of-concept, really.
+
+the biggest thing to do would be to do something smart with
+mime-encoded messages. but keeping the current property of <b>not</b>
+slurping the whole damn message into memory just to do so.
+
+another thing to do would be to support posting. to avoid
+completely anonymous posting, this could require confirming the
+email address before allowing posts. to do this without actually
+having to maintain a database of users, we could send an email
+containing md5(md5("email:timestamp").$secret) (where $secret is
+some value that is kept secret. duh.) and then let the user "log
+in" by supplying their email address and this code, and storing
+that in a cookie. depends on a secret for 'security', but like i
+said, it avoids having to maintain any sort of state on the server
+side. blocking email addresses for posting will be easy enough
+if anyone ever abuses the system..
+
+should also probably protect email addresses from harvesters.
+then again, anyone who wanted to harvest email addresses could just
+crawl the nntp server directly. or they can crawl any of the other
+mail archives that don't protect the addresses.
+
+keeping track of a .newsrc-like state for users would be cool,
+too. too bad there's no Set::IntSpan for php.
+
+perhaps chasing up the references: chain to display the
+thread when displaying an article would be interesting. i
+have a feeling that building some sort of index is going
+to be desirable at some point. should use jwz's threading
+algorithm. http://www.jwz.org/doc/threading.html
+
+ftp://ftp.isi.edu/in-notes/rfc2047.txt
explains how to decode encoded
+header fields. handling utf-8 and iso-8859-1 should be pretty easy..
+could use the gnu recode functions to do this in a general way,
+i think.
+
+oh, and this uses direct socket functions instead of the php imap
+extension because nntp is a drop-dead-easy protocol, and i'm allergic
+to the c-client code.
+
+---
+SC.2004.09.03:
+Here are the appropriate Rewrite rules for apache:
+
+ RewriteEngine on
+ RewriteRule ^/(php.+)/start/([0-9]+) /group.php?group=$1&i=$2 [L]
+ RewriteRule ^/(php.+)/([0-9]+) /article.php?group=$1&article=$2 [L]
+ RewriteRule ^/(php[^/]+)(/)?$ /group.php?group=$1 [L]
+
+
+[webserver]: http://php.net/manual/en/features.commandline.webserver.php
diff --git a/common.php b/common.php
index f90ecc4..ff50470 100644
--- a/common.php
+++ b/common.php
@@ -1,6 +1,11 @@
<?php
-define('NNTP_HOST', 'localhost');
+$NNTP_HOST = 'localhost';
+if (getenv('NNTP_HOST')) {
+ $NNTP_HOST = getenv('NNTP_HOST');
+}
+
+define('NNTP_HOST', $NNTP_HOST);
function nntp_connect($server, $port = 119) {
$s = @fsockopen($server, $port, $errno, $errstr, 30);