Maison  >  Article  >  développement back-end  >  Explication détaillée de cinq façons d'implémenter des tâches planifiées en PHP

Explication détaillée de cinq façons d'implémenter des tâches planifiées en PHP

不言
不言original
2018-04-23 16:00:112349parcourir

Cet article présente principalement cinq méthodes d'implémentation de tâches planifiées en PHP. Maintenant, je le partage avec vous et vous donne une référence. Allons y jeter un oeil

Ces derniers jours, j'ai besoin d'écrire une application serveur qui explore régulièrement des pages Web en PHP. J'ai cherché des solutions sur Internet et j'ai trouvé plusieurs solutions, qui sont résumées comme suit.

Les tâches d'exécution planifiées sont une tâche relativement importante pour un site Web, comme la publication régulière de documents, le nettoyage régulier d'informations indésirables, etc. La plupart des sites Web actuels sont développés à l'aide du langage dynamique PHP, et pour PHP, l'implémentation détermine que il n'a pas le concept d'AppServer comme Java et .Net, et le protocole http est un protocole sans état qui ne peut être déclenché et appelé que par l'utilisateur. Après avoir été appelé, il quittera automatiquement la mémoire et n'a pas de mémoire résidente. .

Si vous devez utiliser PHP pour mettre en œuvre des tâches planifiées, vous pouvez avoir les solutions suivantes :

1.Type simple, direct et imprudent

.

<?php
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
ini_set(&#39;memory_limit&#39;,&#39;512M&#39;); // 设置内存限制
$interval=60*30;// 每隔半小时运行
do{
  //ToDo 
  sleep($interval);// 等待5分钟
}
while(true);

Inconvénients : Après le démarrage, il n'y a aucun contrôle, sauf si vous terminez l'hôte PHP. N'utilisez pas cette méthode, sauf si vous l'êtes. un hacker.

2. Un simple contrôle

config.php

<?php
return 1;
?>
cron.php


  
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行
do{
  $run = include &#39;config.php&#39;;
  if(!$run) die(&#39;process abort&#39;);
  
  //ToDo
  sleep($interval);// 等待5分钟
}
while(true);

est obtenu en changeant le return 0 de config.php Arrêtez le programme. Un moyen réalisable consiste à interagir avec le fichier config.php et un formulaire spécial, et à définir certaines variables via la page HTML pour la configuration

Inconvénients : Occupe les ressources du système, fonctionne longtemps, il y aura des dangers cachés inattendus. Par exemple, des problèmes de gestion de la mémoire.

3. Simple et amélioré

<?php
$time=15;
$url="http://".$_SERVER[&#39;HTTP_HOST&#39;].$_SERVER[&#39;REQUEST_URI&#39;];
/*
  function
*/
sleep($time);
file_get_contents($url);
?>

veille du script php continue l'exécution en accédant à lui-même après un certain temps. C'est comme une course de relais. Cela garantit que le temps d'exécution de chaque script PHP ne sera pas trop long car time_out. chaque cycle du fichier php est exécuté indépendamment, cette méthode évite les restrictions de

Mais il est préférable d'ajouter le code de contrôle cofig.php comme ci-dessus, afin que le processus puisse être terminé.

4. Tâches planifiées du serveurtime_out

Plateforme Unix

Si vous utilisez le système Unix, vous devez l'ajouter à votre script PHP Ajout une ligne de code spéciale à l'avant permet de l'exécuter afin que le système sache quel programme utiliser pour exécuter le script. La première ligne de code ajoutée pour les systèmes Unix n'affectera pas l'exécution du script sous Windows, vous pouvez donc également utiliser cette méthode pour écrire des scripts multiplateformes.

1. Utilisez PHP pour exécuter le script dans Crontab

Tout comme appeler un script shell ordinaire dans Crontab (utilisation spécifique de Crontab), utilisez le programme PHP. Pour appeler le script PHP, exécutez myscript.php toutes les heures comme suit :

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php
est le chemin du programme PHP.

2. Utilisez l'URL pour exécuter des scripts dans Crontab /usr/local/bin/php

Si votre script PHP peut être déclenché par une URL, vous pouvez utiliser lynx ou curl ou wget pour configurer c'est votre Crontab.
L'exemple suivant utilise le navigateur de texte Lynx pour accéder à une URL afin d'exécuter un script PHP toutes les heures. Le navigateur de texte Lynx utilise le mode conversationnel pour ouvrir les URL par défaut. Cependant, comme indiqué ci-dessous, nous utilisons l'option -dump sur la ligne de commande lynx pour convertir la sortie URL en sortie standard.

00 * * * * lynx -dump http://www.sf.net/myscript.php
L'exemple suivant utilise CURL pour accéder à l'URL afin d'exécuter un script PHP toutes les 5 minutes. Curl affiche la sortie sur la sortie standard par défaut. En utilisant l'option "curl -o", vous pouvez également transférer la sortie du script vers un fichier temporaire temp.txt.


L'exemple suivant utilise WGET pour accéder à l'URL afin d'exécuter un script PHP toutes les 10 minutes. L'option -q indique le mode silencieux. "-O temp.txt" signifie que la sortie sera envoyée vers un fichier temporaire.
*/5 * * * * /usr/bin/curl -o temp.txt http://www.sf.net/myscript.php

*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.sf.net/myscript.php
5. Une explication détaillée de l'utilisation de la fonction ini_set

est utilisée pour set php. La valeur de ini prend effet lorsque la fonction est exécutée. Une fois le script terminé, le paramètre devient invalide. Vous pouvez modifier la configuration sans ouvrir le fichier php.ini, ce qui est très pratique pour les espaces virtuels.

Format de la fonction :

PHP ini_set

Tous les paramètres ne peuvent pas être configurés, vous pouvez consulter la liste dans le manuel.
string ini_set(string $varname, string $newvalue)

Paramètres communs :

@ ini_set(&#39;memory_limit&#39;, &#39;64M&#39;);
menory_limit :

Définissez la mémoire maximale qu'un script peut appliquer pour les octets, ce qui favorise les scripts mal écrits consommant de la mémoire disponible sur le serveur. Le symbole @ signifie qu'aucune erreur n'est générée.

@ini_set(&#39;display_errors&#39;, 1);
display_errors :

Définissez la catégorie des messages d'erreur.

@ini_set(&#39;session.auto_start&#39;, 0);
session.auto_start :

Démarrer automatiquement le traitement de la session Lorsqu'il est défini sur 1, il n'est pas nécessaire de l'utiliser manuellement. session_start() dans le programme. Vous pouvez également utiliser session pour ouvrir une session

Si le paramètre est 0 et que la session n'est pas ouverte manuellement, une erreur sera signalée.

@ini_set(&#39;session.cache_expire&#39;, 180);
session.cache_expire :

Spécifie la période limite (minutes) de la page de session dans le cache client. 180 minutes. Si session.cache_limiter=nocache est défini, le paramètre ici n'est pas valide.

session.use_cookies:是否使用cookie在客户端保存会话ID;

@ini_set(&#39;session.use_trans_sid&#39;, 0);

session.use_trans_sid:是否使用明码在URL中显示SID(会话ID),

默认是禁止的,因为它会给你用户带来安全危险:

    用户可能将包含有效的sid的URL通过email/irc/QQ/MSN等途径告诉其他人。

    包含有效sid的URL可能会保存在公用电脑上。

    用户可能保存带有固定不变的SID的URL在他们的收藏夹或者浏览历史记录里。 基于URL的会话管理总是比基于Cookie的会话管理有更多的风险,所以应当禁用。

PHP定时任务是一个非常有意思的东西,以上就是本文提供的一些解决方案,你也可以通过本文的思路,开发出自己的一种解决方案。希望能帮助到有需要的大家。

相关推荐:

php实现将base64格式图片保存到指定目录的方法

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