Přístup do newsů pomocí PHP: Porovnání verzí
| Řádek 6: | Řádek 6: | ||
* PEAR | * PEAR | ||
* PEAR modul Net_NNTP | * PEAR modul Net_NNTP | ||
| − | |||
| − | |||
| − | |||
== Posting == | == Posting == | ||
Verze z 22. 2. 2007, 23:40
Při vývoji některých dílčích informačních systémů v HKFree vyvstala potřeba komunikovat s newsy z PHP - proto vzniklo toto HOWTO. Příklady se snaží korektně řešit problematiku kodování češtiny (vychází z toho, že texty z PHP jsou v ISO-Latin-2).
Obsah
Co je třeba
- PHP
- IMAP funkce v PHP (imap_8bit, případně lze nahradit vlastní funkcí)
- PEAR
- PEAR modul Net_NNTP
Posting
<?
require_once "Net/NNTP.php";
$nntp = new Net_NNTP;
$ret = $nntp->connect("10.107.12.1", 119);
if( PEAR::isError($ret)) {
// handle connecting error
echo $ret->getMessage();
} else {
echo "Uspesne pripojeno :)";
$addheader = "Content-Transfer-Encoding: quoted-printable\n".
"Content-Type: text/plain; charset=ISO-8859-2;";
$subject = "Žluťoučký kůň pěl čábelské ódy";
$subject = "=?ISO-8859-2?Q?" . imap_8bit($subject). "?=" ;
$ret = $nntp->post($subject,"hkfree.popelnice","cenda@seznam.cz","Pokus Body",$addheader);
if( PEAR::isError($ret)) {
// handle posting error
}
}
$nntp->quit();
?>
Implementační poznámky
Unikátní identifikace příspěvku
Každá zpráva má unikátní identifikátor - je představován hlavičkou Message-ID (má jakýsi doporučený formát - viz RFC, můžete se kouknout taky do jakékoliv zprávy v newsech - pro představu). Není li tato hlavička součástí zasílané zprávy, vygeneruje ji newsserver.
Vygenerujete-li si tuto hlavičku sami (např. z ID dané entity ve vašem systému - viz např. tato hlavička u příspěvků ve skupině hkfree.webforum-mirror), můžete toho později využít:
- snadno lze poslat další zprávu jako reply (již do threadu - hlavička References)
- v rámci nezaručení dostupnosti newsserveru (viz dále) se nemusíte bát, že by se zpráva při nějakém nedefinovaném stavu, kdy se odešle 2x objevila v newsech 2x - podle Message-ID newsserver pozná že se jedná o totožnou zprávu a duplicitu zahodí
Pokud vám jde hlava kolem z věcí jako Message-ID a podobně, tak pro funkčnost nutné nejsou, jen korektně řeší některé situace, klidně něco implementujte bez toho a časem to lze dodělat.
Ošetření nedostupnosti news-serveru
Jelikož PHP aplikace může běžet na jiném serveru než newsy, může dojít k tomu, že newserver není dostupný v momentě kdy chceme zprávu odeslat.
V případě že příspěvky POŘIZUJEME z replikovatelného zdroje
Tj. například máme v systému entity (řádky v tabulce) ze který lze kdykoliv znovu vyrobit odesílaný příspěvek. Pak je třeba k entitám přidat atribut "nepodařilo se odeslat do newsů" a čas od času (třeba v cronu nebo obecně při každém požadavku na nějakou stránku aplikace) přojít entity a nalézt ty u kterých se má opakovat pokus o odeslání do newsů. Použijte hlavičku Message-ID vygenerovanou z ID řádku v tabulce pro identifikaci zprávy.
V případě že příspěvky NEPOŘIZUJEME z replikovatelného zdroje
Nutno založit v systému frontu neodeslaných příspěvků (např. tabulku) a čas od času se pokusit přeposílat příspěvky znovu. Použijte hlavičku Message-ID vygenerovanou z neopakovatelného ID (v tomto případě třeba timestamp + nějaký random) záznamu ve frontě v tabulce pro identifikaci zprávy.