2016-05-28 2 views
3

Je fais un module pour un système de commerce électronique PHP. Cette base de données système a 2000 produits. J'ai besoin de mettre à jour tous les produits (certaines valeurs) en un jour. Je ne veux pas mettre à jour tous les produits une fois.Puis-je définir une limite de temps pour une fonction en PHP?

J'essaie de mettre à jour chaque période de 100 produits lorsque le visiteur ouvre une page (le module est hooké init - header). Ici, je veux donner une limite de temps. Si ce produit 100 ne se met pas à jour en 20 secondes, faites une pause et écrivez le dernier identifiant de produit mis à jour dans la base de données.

Comment est-ce que je peux faire ceci? Comment cette fonction sait-elle 20 secondes plus tard rompre?

+1

temps() au début et à dans la boucle – splash58

+0

Pourquoi faites-vous cela sur l'interaction de l'utilisateur et non dans par exemple un cron? En outre, la mise à jour de seulement 2000 produits que je ne sens pas devrait prendre 20 secondes, et encore moins 100. –

+0

Oui, je peux utiliser time() dans une boucle, n'est-ce pas un problème pour un serveur? – user5510975

Répondre

2

Vous pouvez définir une limite de temps pour l'ensemble du script PHP. Vous pouvez donc déplacer cette fonction pour séparer le script, définir la limite de temps et l'exécuter en tant que sous-processus.

Je recommande d'utiliser le composant Process Symfony (peut être utilisé sans Symfony):
http://symfony.com/doc/current/components/process.html

utilisant, vous pouvez délai fixé même à partir de votre processus principal:
http://symfony.com/doc/current/components/process.html#process-timeout

+0

C'est ce dont j'ai besoin, sauf son composant Symfony. Comment puis-je utiliser sans symfony? (Merci) – user5510975

+0

'composer require symfony/process' – luchaninov

+0

Si vous ne pouvez pas utiliser composer, vous pouvez le télécharger depuis https://github.com/symfony/process – luchaninov