Steelray プロジェクト ビューアは PHP のソケットを使用して Usenet からファイルを取得します
著者: Armel Fauveau
元のアドレス: http://www.phpbuilder.net/columns/armel20010427.php3
PHP はリモートまたはローカル サーバーのソケットを開くことができます。以下は、ソケットを使用した簡単な例です。Usenet ニュース サーバーに接続し、サーバーと通信し、正確なニュース グループからいくつかの記事をダウンロードします。
PHP を使用してソケットを開く
fsockopen() を使用してソケットを開きます。この関数は PHP3 と PHP4 の両方に存在します。関数のプロトタイプは次のとおりです。
intfsockopen
(string hostname,
int port [,
int errno [,
string errstr [,
double timeout]]])
?>
ネットワークの場合ホストの場合、ホスト名のポートへの TCP ソケット接続が確立されます。ホスト名にはドメイン名または IP アドレスを使用できます。 UDP 接続の場合は、プロトコル udp://hostname を指定する必要があります。 UNIX ホストの場合、ホスト名はソケットへのパスで使用され、この例ではポートを 0 に設定する必要があります。オプションのタイムアウトを使用して、接続タイムアウトの秒数を設定できます。
fsockopen() の詳細については、http://www.php.net/manual/function.fsockopen.php を参照してください。
ネットワーク ニュース転送プロトコル (NNTP)
usenet ニュース サーバーにアクセスするには、特別なプロトコルが必要です。 NNTP、ネットワーク ニュース転送プロトコル標準と呼ばれます。このプロトコルの詳細は RFC977 に記載されており、http://www.w3.org/Protocols/rfc977/rfc977.html で参照できます。このドキュメントでは、さまざまなコマンドを使用して NNTP サーバーに接続し、通信する方法について詳しく説明します。
サーバーに接続する
NNTP サーバーに接続するには、サーバーのホスト名 (または IP アドレス) とサーバーがリッスンするポートを知っている必要があります。接続が失敗したときにプログラムが「フリーズ」しないように、タイムアウトを追加することもお勧めします。
$cfgServer = "your.news.host";
$cfgPort = 119;
$cfgTimeOut = 10;
// タイムアウトなしで asocket を開きます
$usenet_handle = fsockopen($cfgServer, $cfgPort);
else
// タイムアウトあり
$usenet_handle = fsockopen($cfgServer, $cfgPort, &$errno, &$errstr, $cfgTimeOut);
if(!$usenet_handle) {
echo "Connexionfailedn";
exit();
else {
$tmp = fgets($usenet_handle, 1024);
サーバーと通信します
そして、以前に開かれたソケット接続を通じてサーバーと対話できます。サーバーに対して「特定のニュース グループから最新の 10 件の記事を取得したい」と言いましょう。 RFC977 は、正しいニュース グループを選択する方法に関するコマンドを次のように定義しています。
GROUPggg
必須パラメータ ggg は、選択するニュース グループの名前 (net.news など) です。 list コマンドを使用すると、有効なニュース リストを取得できます。選択応答が成功すると、グループ内の最初と最後の 2 つのニュース記事のニュース番号と、アーカイブされたニュース番号の推定値が返されます。
たとえば、
chrome:~$ telnetmy.news.host 119
aa.bb.cc.dd を試行中...
tomy.news.host に接続しました。
エスケープ文字は '^]' です
200 my.news.hostInterNetNews NNRP サーバー INN 2.2.2 13-Dec-1999 の準備が完了しました (投稿OK)
GROUP alt.test
211 232 222996 223235alt.test
quit
205 コマンド「GROUP alt.test」を受信した後、ニュース サーバーが戻りました。 「211232 222996 223235 alt.test」。211 は RFC 識別コードです (コマンドが正常に実行されたことを示す簡単な説明です。詳細については RFC を確認してください)。返された情報は、記事が 232 件あり、その中で最も古いニュースのインデックス番号が 222996 であることを示しています。最新のニュースインデックス番号は 223235 です。ここで計算してみましょう: 222996+232 は 232235 に等しくありません。見つからない記事はサーバーから削除されたか、作成者によってキャンセルされたか (はい、それは可能で簡単です)、または削除されました。
もちろん、サーバーがパブリックかプライベートかによって、ニュース グループを選択する前に認証が必要になる場合があることに注意してください。通常、誰でもニュースを入手できますが、ニュースを発行するには認証が必要です。
//$cfgUser = "xxxxxx";
//$cfgPasswd = "yyyyyy";
$cfgNewsGroup = "alt.php";
// プライベートサーバーでは識別が必要です
if($cfgUser) {
fputs($usenet_handle, "AUTHINFO USER".$cfgUser."n");
$tmp = fgets($usenet_handle, 1024);
fputs($usenet_handle, "AUTHINFO PASS ".$cfgPasswd."); = $ TMP = fgets ニュースグループの選択
fputs($usenet_handle, "GROUP ".$cfgNewsGroup."n");
$tmp = fgets($usenet_handle, 1024); 480 コマンドには認証が必要です") {
echo "$ tmpn";
exit();
}
$info = split(" ", $tmp);
$first = $info[2];
$last = $info[3];
print "First : $firstn ";
print "Last : $lastn";
?>
いくつかの記事を取得する
最新の記事のインデックス番号を取得したので、最新の 10 件の記事を簡単に取得できます。 RFC977 には、ARTICLE コマンドを記事のインデックス番号またはメッセージ ID とともに使用できると記載されています。注意のため、ここでは記事のインデックス番号とメッセージ ID が異なります。ニュース サーバーごとに定義が異なるため、同じ記事でも異なるニュース サーバーではインデックス番号が異なりますが、メッセージ ID は同じである必要があります。 (記事のヘッダーに含まれます)
$cfgLimit = 10;
// 最後の記事をアップロード
$boucle=$last-$cfgLimit;
set_time_limit (0);
fputs($usenet_handle, "ARTICLE$bouclen");
$tmp = fgets($usenet_handle, 4096); != "220") {c Echo "+----------------------------------------------------- -+n"; --------------------+n"
}
else {
while($tmp!=".rn") {
$tmp = fgets($usenet_handle .
?>
このサーバー上のこのグループから得られた最新ニュースは 10 件のみです。 HEAD コマンドを使用して記事のヘッダー情報を取得したり、BODY コマンドを使用してニュースの本文を取得したりすることもできます。
接続を閉じる
fclose() 関数を使用して、NNTP サーバーとのセッションを終了します。 もちろん、次のように新しいファイルを作成することもできます。
// close connexion
fclose($usenet_handle);
?>
fclose() の詳細については、http://www.php.net/manual/function.fclose.php を参照してください。
結論
この記事では、特定の状況下で開く方法のみを説明します。ソケット接続を使用して閉じる: NNTP サーバーに接続し、ニュース グループからいくつかの記事を取得します。 POST コマンドを使用して NNTP サーバーに記事を公開することは、それほど複雑ではありません。
次のステップは、記事を簡単に保存し、検索エンジン (htgid、http://www.htdig.org/ など) の記事を使用してインデックスを作成できるニュース クライアントを作成することです (そして Netscape の一部を削除します)。ニュースグループの下でキーワード検索ができるWEBアプリケーションです。以下に例を示します。http://www.phpindex.com/ng/ にアクセスしてダウンロードできます。
上記では、Steelray プロジェクト ビューアが PHP のソケットを使用して Usenet からファイルを取得する方法を紹介しました。これには、Steelray プロジェクト ビューアの内容も含まれており、PHP チュートリアルに興味のある友人に役立つことを願っています。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
