PHP swooleでhttp_serverの構成と使用方法のインスタンス分析
5554 ワード
この例では、PHP swooleにおけるhttp_について説明します.serverの構成と使用方法.皆さんの参考にしてください.具体的には以下の通りです.
swooleではswooleを提供していますhttp_serverクラス、httpリクエストを処理するのに便利です.
しかし、httpプロトコルのサポートは不完全であるため、phpファイルの処理はswooleに渡される前にnginxを追加してエージェントを行うことが一般的に推奨されています.
一、簡単なhttpサービスを作成する
二、静的ファイルの処理
swooleには2つの構成パラメータが内蔵されており、簡単な構成で実現できます.
しかし、機能は簡単で、外部ネットワークの使用を提案せず、必要なものは自分で実現することができます.
三、ファイルアップロードの処理
staticsディレクトリの下にuploadを作成します.htmlファイル:
ディレクトリsrcの下でtestディレクトリを作成し、testを作成します.phpファイル
次に127.0にアクセスする.0.1:8888/test/test/testで戻り結果が表示されます.
spl_をautoload_registerはonStartイベントコールバック関数に格納されます.
onStartコールバックでは、echo、ログの印刷、プロセス名の変更のみが許可されます.他の操作は実行できません.
PHPの関連内容についてもっと興味のある読者は、「PHPネットワークプログラミング技術総括」、「php socket用法総括」、「php対象プログラム設計入門教程」、「PHPデータ構造とアルゴリズム教程」及び「phpプログラム設計アルゴリズム総括」を参照してください.
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.
swooleではswooleを提供していますhttp_serverクラス、httpリクエストを処理するのに便利です.
しかし、httpプロトコルのサポートは不完全であるため、phpファイルの処理はswooleに渡される前にnginxを追加してエージェントを行うことが一般的に推奨されています.
一、簡単なhttpサービスを作成する
set([
'package_max_length' => 1024 * 1024 * 10,
//
'upload_tmp_dir' => __DIR__ . '/uploads/',
]);
// request
// :
//swoole_http_request , http
//swoole_http_response ,
$server->on('request', function (swoole_http_request $request, swoole_http_response $response) {
//
var_dump($request->header);
// , PHP $_SERVER
var_dump($request->server);
// GET , PHP $_GET
var_dump($request->get);
// POST , PHP $_POST
var_dump($request->post);
// COOKIE
var_dump($request->cookie);
// , package_max_length
var_dump($request->files);
// POST , fopen('php://input');
var_dump($request->rawContent());
// http
var_dump($request->getData());
//
$response->end('hello');
});
//
$server->start();
二、静的ファイルの処理
swooleには2つの構成パラメータが内蔵されており、簡単な構成で実現できます.
しかし、機能は簡単で、外部ネットワークの使用を提案せず、必要なものは自分で実現することができます.
set([
//
'document_root' => __DIR__ . '/statics/',
// , ,swoole
'enable_static_handler' => true,
]);
$server->on('request', function ($request, $response) {
});
$server->start();
三、ファイルアップロードの処理
set([
//
'package_max_length' => 1024 * 1024 * 50,
//
'upload_tmp_dir' => __DIR__ . '/tmp/',
'upload_dir' => __DIR__ . '/uploads/',
'document_root' => __DIR__ . '/statics/',
'enable_static_handler' => true,
]);
$server->on('request', function ($request, $response) use ($server) {
if ($request->server['path_info'] == '/upload') {
$tmp = $request->files['upload']['tmp_name'];
$upload = $server->setting['upload_dir'] . $request->files['upload']['name'];
if (file_exists($tmp) &&
move_uploaded_file($tmp, $upload)) {
$response->header('Content-Type', 'text/html; charset=UTF-8');
$response->end(' ');
} else {
$response->end(' ');
}
}
});
//
$server->start();
staticsディレクトリの下にuploadを作成します.htmlファイル:
四、処理ルートファイルの自動ロード
set([
//
'project_path' => __DIR__ . '/src/',
]);
$server->on('WorkerStart', function ($server, $worker_id) {
//
spl_autoload_register(function ($class) use($server) {
$class = $server->setting['project_path'] . str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
if (file_exists($class)) {
include_once $class;
}
});
});
$server->on('request', function ($request, $response) use ($server) {
$pathInfo = explode('/', ltrim($request->server['path_info'], '/'));
// / /
$module = $pathInfo[0] ?? 'Index';
$controller = $pathInfo[1] ?? 'Index';
$method = $pathInfo[2] ?? 'index';
try {
$class = "\\{$module}\\{$controller}";
$result = (new $class)->{$method}();
$response->end($result);
} catch (\Throwable $e) {
$response->end($e->getMessage());
}
});
//
$server->start();
ディレクトリsrcの下でtestディレクトリを作成し、testを作成します.phpファイル
次に127.0にアクセスする.0.1:8888/test/test/testで戻り結果が表示されます.
$request->server['path_info']
を通じてモジュール、コントローラ、方法を見つけて、それから私たちの自分のロード関数を登録して、ファイルを導入します.クラスオブジェクトをインスタンス化し、メソッドを呼び出して結果を返します.spl_をautoload_registerはonStartイベントコールバック関数に格納されます.
onStartコールバックでは、echo、ログの印刷、プロセス名の変更のみが許可されます.他の操作は実行できません.
PHPの関連内容についてもっと興味のある読者は、「PHPネットワークプログラミング技術総括」、「php socket用法総括」、「php対象プログラム設計入門教程」、「PHPデータ構造とアルゴリズム教程」及び「phpプログラム設計アルゴリズム総括」を参照してください.
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.