Bonjour à tous,
Je travail actuellement sur une problématique de détection de liens brisés dans les contenues des utilisateurs.
Pour cela, j'utilise un module Drupal "linkchecker". Cependant les performances ne me convenaient pas et j'ai voulu le modifier, pour être plus précis, le paralléliser. Pour cela j'utilise une petite classe de Thread utilisant pcntl_fork(). Les threads font appels à une fonction qui elle même fait appel à un http_requests. Jusque là pas de problème apparent.
Le soucis se pose dans la sauvegarde des données retournées par le http_request. Je voulais les enregistrer dans un fichier par thread pour pouvoir récupérer le résultat plus tard et faire mes manipulations en fonction. Le soucis est le suivant : Je lance mes threads via une URL, les threads se terminent correctement et là, pas de fichiers ... Mes fichiers apparaissent environ 3 minutes après la fin de l'execution des threads.
J'ai donc pensé que cela pouvais être due aux buffers, mais des flushs n'y font rien ... Pour éviter d'utiliser des fichiers j'avais aussi pensé utiliser des variables globales, mais les threads en PHP ont apparemment leurs propres contextes mémoires ... Une des solutions que je vois encore serai d'enregistrer les données en BDD directement en utilisant un petit sémaphore mais je pense perdre l'interêt d'avoir parallélisé ...
Ma question est donc la suivante : quelqu'un aurait-il une idée de pourquoi les fichiers sont crées à retardement ou aurait une idée de comment sauvegarder ces données ? J'ai surement raté quelque chose ...
Dans l'attente de vous lire, je vous souhaite une bonne journée.
Partager