#native_company# #native_desc#
#native_cta#

Using Sockets in PHP Page 2

By Armel Fauveau
on May 10, 2001

Using sockets in PHP : Get articles from Usenet

Talking to the Server

We are now connected to the server, and can talk to it through th previously opened socket. Let us say we want to get the 10 latest articles from some newsgroup. RFC977 specifies that the first step is to select the right newsgroup with the GROUP command :
GROUP ggg
The required parameter ggg is the name of the newsgroup to be selected (e.g. “net.news”). A list of valid newsgroups may be obtained from the LIST command.
The successful selection response will return the article numbers of the first and last articles in the group, and an estimate of the number of articles on file in the group.
Example:
chrome:~$ telnet my.news.host 119
Trying aa.bb.cc.dd...
Connected to my.news.host.
Escape character is '^]'.
200 my.news.host InterNetNews NNRP server INN 2.2.2 13-Dec-1999 ready (posting ok).
GROUP alt.test
211 232 222996 223235 alt.test
quit
205 .
After receiving the command ” GROUP alt.test”, the News Server answered “211 232 222996 223235 alt.test”. 211 is an RFC defined code (basically saying the command was succesfully executed – check the RFC for more details). It also answered it currently has 232 articles, indexed 222996 for the oldest through 223235 for the latest. These are called article numbers. Now, let us have a count here : 222996 + 232 by no means equals to 232235. The seven missing articles were removed one way or another from the server, either cancelled by their legitimate author (yes, it is possible and easy to do !) or deleted after report of abuse for example.
Be careful though, the server might require authentication before selecting the newsgroup, depending on wether it is a public or private server. It could also let anybody retrieve articles but require authentication to publish an article.

<?php

//$cfgUser    = "xxxxxx";

//$cfgPasswd    = "yyyyyy";

$cfgNewsGroup    "alt.php";

// identification required on private server

if($cfgUser) {

    
fputs($usenet_handle"AUTHINFO USER ".$cfgUser."n");

    
$tmp fgets($usenet_handle1024);

    fputs($usenet_handle"AUTHINFO PASS ".$cfgPasswd."n");

    
$tmp fgets($usenet_handle1024);

    // check error

    

    
if($tmp != "281 Okrn") {

        echo 
"502 Authentication errorn";

        exit();

    }    

}

// select newsgroup

fputs($usenet_handle"GROUP ".$cfgNewsGroup."n");

$tmp fgets($usenet_handle1024);

if($tmp == "480 Authentication required for commandrn") {

    echo 
"$tmpn";

    exit();

}    

$info split(" "$tmp);

$first $info[2];

$last $info[3];

print "First : $firstn";

print 
"Last : $lastn";

?>