La méthode

1775Actuellement en ligne
63Lire aujourd'hui
16Partager aujourd'hui
Affichage multilingue

Plusieurs idées d’implémentation PHP pour effectuer des tâches de synchronisation détails

2018-04-17 17:36:01

PHP lui-même n’a pas de fonction de synchronisation. La fonctionnalité de tâches programmées de PHP doit être réalisée en combinant avec d’autres outils. WordPress, par exemple, a intégré la fonctionnalité de wp-cron et est génial. Dans cet article, nous allons approfondir l’analyse de plusieurs idées de tâches de synchronisation PHP communes.

Outils/ingrédients
1

Les ordinateurs

2

PHP et son environnement

Exécution programmée de PHP avec CronTab sur un serveur Linux

Les informations sont saisies sans autorisation de l’expérience

Exécution programmée de PHP avec bat sur un serveur Windows

Il y a un CMD et un fichier bat similaires sur windows et linux. Le fichier bat est similaire à un fichier shell. Exécuter ce fichier bat équivaut à exécuter les commandes à l’intérieur l’un après l’autre (et, bien sûr, la programmation par la logique). Donc, Nous pouvons utiliser le fichier de commande bat pour implémenter une tâche de synchronisation PHP au-dessus d’un serveur windows. En fait, la synchronisation des tâches sous windows est la même chose que sous linux, sauf que l’approche et l’approche sont différentes. Eh bien, commencez ci-dessous. Tout d’abord, créez un fichier cron.bat à un endroit qui vous semble le plus approprié, puis ouvrez-le avec un éditeur de texte (le bloc-notes va bien) et écrivez quelque chose comme ceci à l’intérieur: D:\ PHP \ php.exe-q D:\website\test.php signifie que l’utilisation de php.exe pour exécuter le fichier PHP test.php, comme contab ci-dessus, contourne l’environnement du serveur et est relativement efficace pour l’exécution. Une fois que vous avez écrit, cliquez sur enregistrer et fermez l’éditeur. La prochaine étape est de définir la tâche programmée pour exécuter cron.bat. Ouvrez l’un à l’autre: démarrer - > panneau de configuration - > calendrier des tâches - > ajouter un calendrier des tâches. Dans l’interface ouverte, définissez l’heure, le mot de passe pour la tâche programmée. En sélectionnant, montez cron.bat. Ok, une tâche de synchronisation est établie. Faites un clic droit sur cette tâche de synchronisation, lancez et l’exécution de la tâche de synchronisation commence. Au point, le traitement cron.bat sera exécuté. Cron.bat va ensuite exécuter PHP.

Implémentation d’une tâche de synchronisation PHP sur un serveur non propriétaire (hébergement virtuel)
1

Si le webmaster ne possède pas son propre serveur et loue un hébergement virtuel, il ne peut pas accéder au système serveur pour effectuer les opérations ci-dessus. Comment devriez-vous effectuer une tâche de programmation PHP à ce moment? En fait, il y a plusieurs méthodes à nouveau. Utilisez ignore_user_abort(true) et la boucle morte sleep pour aller directement au début d’un document PHP: ignore_user_abort(true); A ce stade, lorsque ce PHP est accédé via une url, l’exécution continue sur le serveur même si l’utilisateur éteint le navigateur (déconnexion). En utilisant cette fonctionnalité, nous pouvons réaliser la fonction très vache, c’est-à-dire l’activation de la tâche programmée à travers elle. Après l’activation, il suffit de faire tout seul. En fait, il est un peu similaire à la tâche de fond. Sleep (n), quant à lui, signifie que lorsque l’exécution du programme arrive ici, ne descend pas temporairement, mais repose pendant n secondes. Si vous accédez à ce PHP, vous verrez que la page doit être chargée pendant au moins n secondes. En effet, cette longue attente est relativement consommatrice et ne peut être utilisée massivement. Alors, comment les tâches chronométrées sont-elles mises en œuvre exactement? Cela peut être réalisé avec le code suivant: 0? $loop : 0;  if(! $loop) break; // stop sleep($loop) si l’intervalle de la boucle est nul; /.. // exécuter un certain code //... @unlink(dirname(__FILE__).'/cron-run'); // ici, c’est en supprimant le cron-run pour dire au programme que cette tâche programmée est déjà en cours d’exécution et qu’une nouvelle tâche $loop = $interval ne peut pas être exécutée; } while(true); En exécutant ce code PHP ci-dessus, la tâche de synchronisation est implémentée. La tâche ne s’arrête pas jusqu’à ce que vous supprimiez le fichier cron-switch. Mais il y a un problème, à savoir que si l’utilisateur accède directement à ce PHP, rien ne fonctionne réellement et la page s’arrête à cet endroit et est toujours en charge. Y a-t-il un moyen de supprimer cet effet? Fsockopen nous a aidé à résoudre ce problème. Fsockopen permet de continuer à exécuter le programme sans avoir à obtenir le résultat de retour lors de la demande d’accès à un fichier, ce qui est différent de l’usage habituel de curl. Lorsque nous utilisons curl pour accéder à une page web, nous devons toujours attendre que curl ait chargé la page web avant d’exécuter le code suivant curl, Bien qu’en fait curl peut également mettre en œuvre des requêtes "non bloquantes", mais plus complexe que fsockopen, nous avons donc préféré fsockopen, fsockopen peut dans le temps prescrit, moins de 1 seconde, terminer de faire une requête sur le chemin d’accès, après l’achèvement ne renvoie pas ce chemin si le contenu, Son mandat s’achève ici et peut passer à l’exécution du programme. En profitant de cette fonctionnalité, nous incluons fsockopen dans le flux normal du programme. En faisant une requête à l’adresse PHP de cette tâche programmée que nous avons créée ci-dessus, la tâche programmée est exécutée en arrière-plan. Si cette adresse url PSP www.yourdomain.com/script.php, dans la programmation, tel: / /.. // exécutions PHP normales //.. // remote request (ne pas obtenir le contenu) fonction, ce qui suit peut être utilisé à plusieurs reprises //... // exécutions PHP normales //.. // requête à distance (ne pas obtenir le contenu) fonction, ce qui suit peut être utilisé à plusieurs reprises avec function _sock($url) {$host = parse_url($url,PHP_URL_HOST); $port = parse_url($url,PHP_URL_PORT);  $port = $port ? $port : 80;  $scheme = parse_url($url,PHP_URL_SCHEME);  $path = parse_url($url,PHP_URL_PATH);  $query = parse_url($url,PHP_URL_QUERY);  if($query) $path .= '? '.$query;  if($scheme == 'https') {    $host = 'ssl://'.$host;  }  $fp = fsockopen($host,$port,$error_code,$error_msg,1);  if(! $fp) {    return array('error_code' => $error_code,'error_msg' => $error_msg);  }  else {    stream_set_blocking($fp,true); // active le mode non-bloquant stream_set_timeout($fp,1) comme il est dit dans le manuel; // définissez le délai $header = ’get $path HTTP/1.1\r\ n’; $header.='Host: $host\r\n';    $header.='Connection: close\r\n\r\n'; // les connexions longues ferment fwrite($fp, $header); usleep(1000); // cette ligne est également critique, sans ce délai, il est possible que fclose($fp) ne puisse pas être exécuté avec succès sur le serveur nginx; return array('error_code' => 0);  }}_sock(’www. Domaine.com/ script.php.’); /.. // continuer avec d’autres actions //.. Ajoutez ce code à un programme de résultat de soumission de tâche programmée. Après avoir défini le temps, le soumettre, puis exécuter le code ci-dessus, vous pouvez activer la tâche programmée. En outre, il n’y a aucun sentiment de blocage sur la page pour cet utilisateur qui a soumis.

2

D’accès des utilisateurs emprunter pour certaines tâches retard - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - mais de dormir pour l’accomplissement de la mission à retardement, une faible efficacité. Nous espérons que la mise en œuvre ne se fera pas de cette manière, ce qui résoudra le problème de l’efficacité. Nous empruntons les comportements d’accès des utilisateurs pour exécuter nos tâches. La visite du site web de l’utilisateur est en fait un comportement très riche, y compris la visite du site web par les araignées des moteurs de recherche, peut être compté dans ce type. Au fur et à mesure que l’utilisateur accède au site web, une action interne est ajoutée pour vérifier s’il existe dans la liste des tâches une tâche qui n’a pas été exécutée, et si oui, exécuter cette tâche. Pour les utilisateurs, en profitant de ce que dit plus haut fsockopen, on ne sent pas du tout que leur accès a encore contribué de cette façon. Mais l’inconvénient de cet accès est qu’il est très irrégulier. Vous souhaitez effectuer une certaine tâche à 2 heures du matin, mais cette période est très malheureuse. Aucun utilisateur ou comportement n’arrive sur votre site et il n’y a pas de nouvelle visite jusqu’à 6 heures du matin. Il en résulte que la mission que vous aviez prévue à 14 heures n’a été exécutée qu’à 18 heures. Il s’agit ici d’une liste de tâches programmées, ce qui signifie que vous devez avoir une liste pour enregistrer quand et ce que toutes les tâches sont exécutées. En général, de nombreux systèmes adoptent une base de données pour enregistrer ces listes de tâches. Wordpress fait exactement cela. En conclusion, si vous voulez gérer plusieurs tâches de synchronisation, vous ne pouvez pas organiser correctement en utilisant un seul PHP ci-dessus. Vous devez trouver un moyen de construire une liste d’horaires. Comme la logique est plus complexe ici, nous ne développerons plus. Nous restons au niveau de la pensée.

3

Tremplin emprunter à retardement tierces parties - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - drôle, certains prestataires de services de différents types de tâches à retardement par exemple d’un nuage ACE à retardement séparées, Vous pouvez remplir un certain uri sous votre propre application. Cloud BCE fournit une fonction de surveillance du serveur. L’uri fixe sous l’application est accédé quotidiennement selon une certaine régularité de temps. Il y a beaucoup d’autres tâches programmées que vous pouvez utiliser sur des plates-formes tierces similaires. Vous pouvez complètement utiliser ces tâches de synchronisation tiers comme un tremplin pour vos tâches de synchronisation de site web. Dire que vous pouvez mettre en place une tâche programmée tous les jours à 2 heures du matin sur un certain cloud ACE. L’uri effectué est /cron.php. Ensuite, vous créez un cron.php qui prend fsockopen pour accéder à l’url du site web sur lequel vous allez réellement effectuer certaines tâches, comme le WWW ci-dessus. Le nom de domaine.com/script.php, mais aussi l’accès à plusieurs url dans cron.php. Ensuite, téléchargez cron.php sur votre as, laissez la tâche de synchronisation de l’as accéder à /cron.php, puis demandez à cron.php de demander à distance le script de tâche de synchronisation du site web cible.

4

Le recyclage par encompass contient à valider) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PSP caractéristiques que ses procédures d’exécution par rapport à la verticale, utiliser cette caractéristique Lorsque nous utilisons un fichier include, le fichier introduit est exécuté, sachant que le programme dans le fichier include est exécuté et plus loin. Si nous créons une boucle, réutilisons sleep, incluons constamment un fichier, de sorte que la boucle exécute un segment de programme, alors le but d’exécution programmée peut être atteint. Nous allons un peu plus loin, et au lieu d’utiliser while(true) pour implémenter la boucle, nous créons un do.php avec le contenu suivant: if(...) exit(); // passer un certain commutateur pour arrêter l’exécution //... // exécuter certains programmes //... sleep($loop); // ce $loop dans include(’do.php.’); Précédemment assigner include(dirname(__FILE__).’ / do.php.’); En fait, par cette méthode d’exécution et tandis que la pensée est aussi comme. Et la même utilisation de sommeil, inefficace. Les tâches de synchronisation PHP sont une chose très intéressante. Bien que pour être honnête, il est plus efficace d’utiliser le système php.exe pour exécuter directement des fichiers PHP, mais pour beaucoup de webmasters ordinaires, les hôtes virtuels ne peuvent pas faire l’exécution directe de programmes natifs PHP.

Informations recommandées