ホームページ  >  記事  >  PHPフレームワーク  >  Workerman 開発: HTTP プロトコルに基づいたバッチ ファイル処理システムを実装する方法

Workerman 開発: HTTP プロトコルに基づいたバッチ ファイル処理システムを実装する方法

PHPz
PHPzオリジナル
2023-11-07 12:16:50977ブラウズ

Workerman 開発: HTTP プロトコルに基づいたバッチ ファイル処理システムを実装する方法

ワーカーマン開発: HTTP プロトコルに基づいたバッチ ファイル処理システムを実装する方法、具体的なコード例が必要です

インターネットとデジタル技術の発展に伴い、データ特に企業においては、処理の重要性がますます高まっています。場合によっては、写真、ビデオ、オーディオなどの大量のファイルを処理する必要があることがあります。現時点では、手動操作は時間と労力がかかるだけでなく、エラーも発生しやすくなります。この記事では、バッチ ファイル処理システムを実装する方法について説明します。

Workerman は、PHP で開発された使いやすい高パフォーマンスなソケット フレームワークで、イベント駆動型のプログラミング モデルを提供するのが特徴です。この記事では、Workerman を使用して HTTP プロトコルに基づくバッチ ファイル処理システムを開発する方法に焦点を当てます。このシステムを通じて、ファイルの一括アップロード、圧縮、トランスコードなどの機能を実現できます。

1. 開発環境をセットアップする
まず、PHP、Composer、Workerman をインストールする必要があります。 Composerのインストール方法を紹介します。コマンド ライン ツールを開き、次のコマンドを入力します:

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php combos-setup.php
$ php -r "unlink('composer-setup.php');"

インストールが完了したら、プロジェクト ディレクトリで次のコマンドを実行する必要があります。 install Workerman:

$ combos require workman/workerman

2. プロジェクトとディレクトリ構造の作成
バッチ ファイル処理システム プロジェクトを作成します (プロジェクト名はバッチファイル、ディレクトリ構造は次のとおりです)。

§─applications #アプリケーション ディレクトリ
│ §─app #アプリケーション ディレクトリ
│ │ └─Http #Http アプリケーション ディレクトリ
│ │ §─Config #構成ディレクトリ
│ │ §─Controller # コントローラー ディレクトリ
│ │ §─イベント #イベント ディレクトリ
│ │ §─ライブラリ #ライブラリ ディレクトリ
│ │ §─モデル #モデル ディレクトリ
│ │ §─タスク #タスク ディレクトリ
│ │ └─ビュー #ビュー ディレクトリ
│ lux─config #グローバル設定ファイル
─public #WebRoot ディレクトリ
│ §─css #CSS ファイル ディレクトリ
│ §─js #JS ファイルディレクトリ
│ └─index.php #Web サイトエントリーファイル
til─start.php #システム起動ファイル
└─composer.json #依存関係管理ファイル

ディレクトリ構造で作成します。アプリケーション ディレクトリが作成されます。このディレクトリには、Config、Controller、Events、Libraries、Models などのディレクトリが含まれます。これらのディレクトリは、アプリケーションのコンポーネントを管理するために使用されます。たとえば、Controller ディレクトリはコントローラー クラスの管理に使用され、Models ディレクトリはデータ モデル クラスの管理などに使用されます。

パブリック ディレクトリに、Web サイトの入り口ファイルである、index.php ファイルを作成します。次の手順でこのファイルを設定します。

3. 起動スクリプトを作成します
Workerman フレームワークはソケット モードを使用するため、ブラウザからはアクセスできません。したがって、起動ファイルを別の PHP ファイルとして保存する必要があります。 start.php ファイルを開き、次のコードを入力します:

use WorkermanWorker;
require_once DIR . '/vendor/autoload.php';

$http_worker = 新しいワーカー("http://0.0.0.0:9000");

$http_worker->count = 4;

$http_worker-> onWorkerStart = function($worker) {

require_once __DIR__ . '/applications/app/Http/routes.php';

};

Worker::runAll();

上記のコードでは、$http_worker という名前の Worker インスタンスを作成しました。また、ルーティング ファイル Routes.php は、onWorkerStart イベントを通じてロードされます。

4. ルートを作成します
ファイル /applications/app/Http/routes.php を開き、次のコードを入力します:

Use WorkermanProtocolsHttp ;

$http->onMessage = function($connection, $data) {

$request_data = Http::requestData($data);
$request_path = $request_data['path'];
if (($pos = strpos($request_path, '?')) !== false) {
    $request_path = substr($request_path, 0, $pos);
}
$controller_action = str_replace('/', '\', $request_path);
$controller_action = ucfirst(strtolower($controller_action));
$controller_action = str_replace('-', '', $controller_action);
$controller_action = trim($controller_action, '\');
$controller_action = 'App\Http\Controllers\' . $controller_action . 'Controller';
if (!class_exists($controller_action)) {
    Http::header("HTTP/1.1 404 Not Found

");

    Http::end("404 Not Found");
    return;
}
$controller = new $controller_action();
$method = isset($request_data['query']['method']) ? $request_data['query']['method'] : 'index';
if (!method_exists($controller, $method)) {
    Http::header("HTTP/1.1 404 Not Found

");

    Http::end("404 Not Found");
    return;
}
$controller->$method();

};

上記のコードでは、HTTP プロトコルを通じてリクエスト データを解析し、リクエスト ルートに従って対応するコントローラーをロードし、コントローラー内のメソッドにアクセスします。

5. コントローラーを作成します
ファイル /applications/app/Http/Controllers/BatchfileController.php を開き、次のコードを入力します:

# #namespace AppHttpControllers;

WorkermanProtocolsHttp を使用;

WorkermanProtocolsHttpResponse を使用;
WorkermanProtocolsHttpRequest を使用;

クラス BatchfileController

{

public function index()
{
    return new Response('Hello world'.PHP_EOL);
}

public function uploadFiles(Request $request)
{
    $files = $request->file();
    if(empty($files)){
        return new Response(json_encode([
            'message' => 'No files were uploaded.',
        ]));
    }
    //处理你需要处理的逻辑
    return new Response(json_encode([
        'message' => 'Files uploaded successfully.',
    ]));
}

}

# #Above コードでは、index() メソッドと UploadFiles(Request $request) メソッドを定義する BatchfileController コントローラーを作成しました。

6. ファイルのアップロード リクエストを受信します

ファイル /applications/app/Http/Controllers/BatchfileController.php を開き、uploadFiles メソッドに次のコードを入力します。


public function UploadFiles( Request $ request)

{

$files = $request->file();
if(empty($files)){
    return new Response(json_encode([
        'message' => 'No files were uploaded.',
    ]));
}
$result = [];
foreach ($files as $name => $file) {
    $path = 'uploads/' . $file['name'];
    if(move_uploaded_file($file['tmp_name'], $path)){
        $result[] = [
            'name' => $file['name'],
            'type' => $file['type'],
            'size' => $file['size'],
            'path' => $path,
        ];
    }
}

//处理你需要处理的逻辑

return new Response(json_encode([
    'message' => 'Files uploaded successfully.',
    'files' => $result,
]));

}

上記のコードでは、$request->file() メソッドを通じてアップロードされたファイルを取得し、move_uploaded_file メソッドを使用してアップロードされたファイルをカスタマイズされたアップロード ディレクトリに移動し、ファイル情報を配列に保存し、最後に結果を返します。

7. テストを実行します。
コマンド ライン モードで、プロジェクト ディレクトリに入り、コマンド php start.php を実行して、Workerman サービスを開始します。すべてが正常であれば、ブラウザのアドレス バーに http://localhost:9000 と入力すると、「Hello world」の出力が表示されます。実行結果は次のとおりです。

ファイル アップロード機能をテストする場合は、Postman またはcurl コマンドを使用してテストをシミュレートできます。リクエストのサンプル コードは次のとおりです。

curl -X POST
http://localhost:9000/file/upload
-H 'cache-control: no-cache'
- H 'content -type: multipart/form-data; border=----WebKitFormBoundary7MA4YWxkTrZu0gW'
-F 'file1=@/path/to/file1.png'
-F 'file2=@/path/ to/file2 .jpg'

これまでのところ、Workerman を使用して HTTP プロトコルに基づくバッチ ファイル処理システムを開発し、ファイル アップロード機能を実装することに成功しました。これをさらに拡張して、ファイル圧縮、トランスコーディング、その他の機能を実現できます。 Workerman フレームワークのイベント駆動型プログラミング モデルを使用すると、アプリケーションの機能を簡単に拡張できます。

以上がWorkerman 開発: HTTP プロトコルに基づいたバッチ ファイル処理システムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。