Hente nyhedsgrupper fra usenet til webside
Jeg har lavet denne kode som kan hente nyeste meddelelse fra en nyhedsgruppe. Men hvordan får jeg det til at virke rigtigt?Nu har jeg indsat sleep for at der ventes på information bliver modtaget. Findes der ikke en bedre måde?
Den skal jo bruge den information der modtages til at sende næste data. Jeg har søgt en del efter dette på nettet, men har ikke kunnet finde information om hvordan man venter på f.eks. en linje er modtaget eller selve meddelelsen er hentet. Er der andre der kan finde information om dette?
Det er jo ikke bare som f.eks. at hente en webside, hvor der sendes en forespørgsel og man venter på serveren afbryder forbindelsen. Hvordan er min opbygning af php-koden i øvrigt?
<?php
echo "<h1>Newsgroups</h1>";
define('news_username', '???');
define('news_password', '???');
define('host', 'news.sunsite.dk');
echo "Undersøger om nødvendig funktion understøttes...<br>";
var_dump(function_exists("socket_connect"));
var_dump(function_exists("socket_create"));
socket_function();
function socket_function()
{
if (!($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [{$errorcode}] {$errormsg} \n");
}
echo "Socket created<br>";
if (!socket_connect($sock, host, 119)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not connect: [{$errorcode}] {$errormsg} \n");
}
echo "Connection established<br>\n";
$msg = "MODE READER\r\n";
$msg .= "AUTHINFO USER " . news_username . "\r\n";
$msg .= "AUTHINFO PASS " . news_password . "\r\n";
//Send the message to the server
if (!socket_send($sock, $msg, strlen($msg), 0)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [{$errorcode}] {$errormsg} \n");
}
echo "Message send successfully<br>\n";
sleep(3);
if (socket_recv($sock, $buf, 65535, 0) === FALSE) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [{$errorcode}] {$errormsg} \n");
}
//print the received message
echo "Result: " . $buf . "<br>";
$msg = "group dk.edb.admin\r\n";
//Send the message to the server
if (!socket_send($sock, $msg, strlen($msg), 0)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [{$errorcode}] {$errormsg} \n");
}
echo "Message send successfully<br>\n";
sleep(3);
if (socket_recv($sock, $buf, 65535, 0) === FALSE) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [{$errorcode}] {$errormsg} \n");
}
//print the received message
echo "Result: " . $buf . "<br>";
$data_array = array();
$data_array = explode(" ",$buf);
if ($data_array[0] == "211") {
$count_article = $data_array[1];
$first_article = $data_array[2];
$last_article = $data_array[3];
$msg = "ARTICLE " . $last_article . "\r\n";
//Send the message to the server
if (!socket_send($sock, $msg, strlen($msg), 0)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [{$errorcode}] {$errormsg} \n");
}
echo "Message send successfully: " . $msg . "<br>\n";
sleep(3);
if (socket_recv($sock, $buf, 1000000, 0) === FALSE) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [{$errorcode}] {$errormsg} \n");
}
//print the received message
echo "<hr size=1>";
echo "Message: " . $buf . "<br>";
echo "<hr size=1>";
}
$msg = "QUIT\r\n";
//Send the message to the server
if (!socket_send($sock, $msg, strlen($msg), 0)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [{$errorcode}] {$errormsg} \n");
}
echo "Message send successfully<br>\n";
//Now receive reply from server
if (socket_recv($sock, $buf, 65535, MSG_WAITALL) === FALSE) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [{$errorcode}] {$errormsg} \n");
}
//print the received message
$visual = $buf;
echo "<hr size=1>" . $visual;
socket_close($sock);
}
?>
</pre>