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');"
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 :
│ ├─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
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 :
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 :
$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 :
utilisez WorkermanProtocolsHttpResponse;
use WorkermanProtocolsHttpRequest ;
{
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 :
{
$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!