Maison  >  Article  >  cadre php  >  Développement Workerman : Comment implémenter un système de traitement de fichiers batch basé sur le protocole HTTP

Développement Workerman : Comment implémenter un système de traitement de fichiers batch basé sur le protocole HTTP

PHPz
PHPzoriginal
2023-11-07 12:16:501004parcourir

Développement Workerman : Comment implémenter un système de traitement de fichiers batch basé sur le protocole HTTP

Développé par Workerman : Comment implémenter un système de traitement de fichiers batch basé sur le protocole HTTP, des exemples de codes spécifiques sont nécessaires

Avec le développement d'Internet et du numérique, le traitement des données est devenu de plus en plus important, notamment dans les entreprises . Parfois, nous devons traiter un grand nombre de fichiers, tels que des images, des vidéos, des audios, etc. À l’heure actuelle, l’opération manuelle est non seulement longue et laborieuse, mais également sujette aux erreurs. Comment mettre en œuvre un système de traitement de fichiers par lots est le sujet qui sera abordé dans cet article.

Workerman est un framework de socket hautes performances développé en PHP, facile à utiliser, et sa particularité est de fournir un modèle de programmation basé sur les événements. Cet article se concentrera sur la façon d'utiliser Workerman pour développer un système de traitement de fichiers batch basé sur le protocole HTTP. Nous pouvons réaliser des fonctions telles que le téléchargement par lots, la compression et le transcodage de fichiers via ce système.

1. Mettre en place un environnement de développement
Tout d'abord, nous devons installer PHP, Composer et Workerman. Voici une introduction à la façon d’installer Composer. Ouvrez votre outil de ligne de commande et entrez la commande suivante :

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

Une fois l'installation terminée, nous devons exécuter la commande suivante dans le répertoire du projet pour installer Workerman :

$ composer require workman/workerman

2. Créer le projet et la structure des répertoires

Nous créons un projet de système de traitement de fichiers par lots, le nom du projet est batchfile, la structure des répertoires est la suivante :

├─applications #Répertoire d'applications

│ ├─app #Répertoire d'applications
│ │ └─Répertoire d'application Http #Http
│ │ ├─Répertoire de configuration #Configuration
│ │ ├─Répertoire du contrôleur #Controller
│ │ ├─Répertoire des événements #Événements
│ │ ├─Répertoire des bibliothèques #Bibliothèque
│ │ ├─Modèles #Répertoire modèle
│ │ ├ ─Tâches #Répertoire de tâches
│ │ └─Vues #Répertoire de visualisation
│ └─config #Fichier de configuration global
├─public #Répertoire racine Web
│ ├─css #Répertoire de fichiers CSS
│ ├ ─js #Répertoire de fichiers JS
│ └─index.php #Fichier d'entrée du site Web
├─start.php #Fichier de démarrage du système
└─composer.json #Fichier de gestion des dépendances

Nous avons créé un répertoire d'application dans la structure de répertoires, qui contient Config, Controller, Events, Libraries, Models et autres répertoires. Ces répertoires sont utilisés pour gérer les composants de l'application. Par exemple, le répertoire Controller est utilisé pour gérer les classes de contrôleurs, et le répertoire Models est utilisé pour gérer les classes de modèles de données, etc.

Nous créons le fichier index.php dans le répertoire public, qui est le fichier d'entrée de notre site Web. Nous configurerons ce fichier dans les prochaines étapes.

3. Écrivez le script de démarrage

Le framework Workerman utilise le mode Socket et n'est pas accessible via le navigateur. Nous devons donc enregistrer le fichier de démarrage en tant que fichier PHP distinct. Ouvrez le fichier start.php et entrez le code suivant :

use WorkermanWorker;
require_once
DIR '/vendor/autoload.php';$http_worker = new 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();

Dans le code ci-dessus, nous avons créé une instance de Worker nommée $http_worker et chargé le fichier de routage routes.php via l'événement onWorkerStart.

4. Écrivez des routes

Ouvrez le fichier /applications/app/Http/routes.php et entrez le code suivant :

utilisez 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();

};

Dans le code ci-dessus, nous analysons les données de la requête via le protocole Http, chargeons le contrôleur correspondant en fonction de l'itinéraire de la requête, et accéder à la méthode du contrôleur.

5. Écrivez le contrôleur

Ouvrez le fichier /applications/app/Http/Controllers/BatchfileController.php et entrez le code suivant :

namespace AppHttpControllers;

utilisez WorkermanProtocolsHttp;

utilisez WorkermanProtocolsHttpResponse;
use WorkermanProtocolsHttpRequest ;

class 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.',
    ]));
}

}

Dans le code ci-dessus, nous avons écrit un contrôleur BatchfileController, qui définit les méthodes index() et uploadFiles(Request $request).

6. Recevoir la demande de téléchargement de fichier

Ouvrez le fichier /applications/app/Http/Controllers/BatchfileController.php et entrez le code suivant dans la méthode 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,
]));

}

Dans le code ci-dessus, nous obtenons le fichier téléchargé via la méthode $request->file(), utilisons la méthode move_uploaded_file pour déplacer le fichier téléchargé vers notre répertoire de téléchargement personnalisé, puis enregistrons les informations du fichier dans un tableau, et enfin renvoie le résultat.

7. Exécutez le test
En mode ligne de commande, entrez dans le répertoire du projet et exécutez la commande php start.php pour démarrer le service Workerman. Si tout est normal, entrez http://localhost:9000 dans la barre d'adresse du navigateur et vous verrez la sortie "Hello world". Les résultats d'exécution sont les suivants :

Si vous souhaitez tester la fonction de téléchargement de fichiers, vous pouvez utiliser les commandes Postman ou curl pour les tests de simulation. L'exemple de code de la requête est le suivant :

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'

À ce stade, nous avons a utilisé avec succès Workerman pour développer un système de traitement de fichiers par lots basé sur le protocole HTTP et implémente la fonction de téléchargement de fichiers. Nous pouvons développer davantage sur cette base pour réaliser la compression de fichiers, le transcodage et d’autres fonctions. Le modèle de programmation événementielle du framework Workerman nous permet d'étendre facilement les fonctionnalités de l'application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn