Découpez un fichier xml

Découpez un fichier xml - PHP - Programmation

Marsh Posté le 15-02-2011 à 17:07:16    

Bonjour,

 

J'ai un site qui tourne sur un hébergement perso chez ovh. Ce site permet d'uploader des fichiers xml pour ensuite traiter les données contenues. Il y a des fichiers qui contiennent énormément d'infos à extraire. A partir d'un certain nombre d'infos, ce processus dépasse le time out fixé par ovh (30 secondes) et le traitement est alors interrompu. Apparemment sur un serveur mutualisé il n'y a pas moyen d'allonger ce time out donc la solution n'est pas de ce côté là ... Je pense alors découper mes fichiers XML en plusieurs parties pour les traiter en plusieurs fois. Pour cela je pense compter le nombre de lignes d'un fichier et le diviser par le nombres d'infos digéreables en 30 secondes. Par exemple un fichier de 10 mille lignes sera découpé en 20 fichiers. Mon problème est donc la mise en pratique ... Avez-vous une astuce pour faire ça ?

 

Merci


Message édité par Magg27 le 15-02-2011 à 17:08:42
Reply

Marsh Posté le 15-02-2011 à 17:07:16   

Reply

Marsh Posté le 16-02-2011 à 08:51:10    

ça dépend de la structure de ton XML... c'est quoi les premiers nodes?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 16-02-2011 à 09:52:32    

T'as moyen d'utiliser le cron sur ton serveur? Il me semble que le timeout n'est valable que quand un script php est exécuté par apache mais pas si le script est exécuté par php en ligne de commande. L'idée serait d'avoir un système d'upload puis un script php appelé depuis le cron qui regarde s'il y a un fichier xml à traiter. Une fois le fichier xml traité, il est supprimé (ou déplacé) pour pas être traité à nouveau...
 
edit : 2ème solution : faire traiter le fichier xml par un exe en C, l'exe pouvant être appelé depuis le script php. Pour ça, la commande shell_exec() (ou toute autre commande du type exec) doit être autorisée.


Message édité par rufo le 16-02-2011 à 09:55:13

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-02-2011 à 22:47:55    

Merci pour vos réponses :). J'ai essayé mon idée mais elle ne marche pas. Vu que les fichiers XML sont découpés, ils n'ont plus la même structure, du coup il y a un bug lorsque je lance le parseur ...
@rufo : oui, j'ai moyen d'utilisé le cron sur mon serveur. S'il n'y a pas de time out dans ces cas là ça peut être une super idée, il faut que j'essaye. Néamoins j'aimerais que le fichier posté par l'utilisateur soit exploitable de suite sans attendre le prochain cron ...
L'idée du script en C peut être pas mal mais il faudrait que je puisse communiquer des variables php à mon script C (par exemple le nom du fichier xml) et inversement (pour récupérer les données traitées).
Sinon je pensais à trouver un parseur XML plus rapide.. Actuellement, j'utilise celui là : http://eusebius.developpez.com/php5dom/ Au pire en utilisant les expressions régulières en scannant le fichier ligne par ligne, est-ce que ça serait plus rapide que DOM ?
 
Mes fichiers XML sont des fichiers GPX contenant des infos sur des points GPS (latitude, longitude, altitude, heure d'enregistrement). Ils sont plus ou moins gros selon la longueur du tracé. Actuellement, parser un fichier de 1,5 Mo contenant environ 10 mille points dépasse le time out d'ovh ...

Reply

Marsh Posté le 17-02-2011 à 10:56:55    

Trouver un parser plus rapide ne te fera pas gagner beaucoup de temps :/
 
Pour passer des infos de php à l'exe en C ben via la ligne de commande :

Code :
  1. MonExeEnC.exe Arg1 Arg2...


Pour rappel, le main() du C contient justement 2 paramètres qui sont le nb de paramètres en entrée et un tableau contenant les paramètres ;)

Code :
  1. int main ( int argc, char *argv[])
  2. {
  3. ...
  4. }


 
Pour le cron, tu peux le faire lancer toutes les minutes voire toutes les x secondes (en prenant soin de vérifier que le fichier n'est pas en cours d'écriture durnat l'upload)... Ca serait relativement transparent pour l'utilisateur.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed