2010-09-27 6 views
3

J'essaie de lire des fichiers volumineux permet de dire fichier illustrator ou photoshop en utilisant cron travail dans mon système. La taille des fichiers varie de 20 mb - 300 mblecture de gros fichier à partir du serveur distant en utilisant le script php

J'ai utilisé une fonction mais elle se casse au milieu pendant la lecture. Donc je voulais avoir une nouvelle opinion.

Montant ces fonctions

  • file_get_contents
  • ReadFile
  • papillotes

qui est le plus efficace en termes de

    cohérence
  • (ne doit pas se briser en lecture du fichier)
  • vitesse
  • ressource utilise

s'il y a plus de deux emplois Cron, est-il un impact sur toutes les performances du serveur.

Veuillez partager le code de bonnes pratiques.

Merci à l'avance

+0

Êtes-vous _bound_ à HTTP? Ce n'est vraiment pas très efficace pour le transfert de fichiers, et un autre protocole peut être beaucoup plus efficace, et peut même être redémarré en cas d'échec (bien que cela puisse aussi être réalisé avec HTTP). – Wrikken

Répondre

3

Utilisez cURL. Les fonctions du fichier ont été abandonnées au profit de cURL pour ouvrir les fichiers distants. Ce n'est pas seulement faster, mais aussi plus fiable (vous êtes moins susceptible de rencontrer des délais d'attente). Si votre script expire ou manque de mémoire, vous devez augmenter le temps d'exécution et les limites de mémoire (max_execution_time et memory_limit).

Autres notes:

  • readfile() lit un fichier et il imprime dans la mémoire tampon de sortie; ce n'est pas la même chose que file_get_contents().
  • Si vous compilez curl avec --with-curlwrappers alors quand vous faites file_get_contents() il utilisera cURL au lieu des fonctions fopen().

Citation nécessaire.

0

vous devez diviser les deux tâches si les fichiers sont si grands. d'abord vous téléchargez le fichier avec wget et une fois que vous avez votre fichier, vous le traitez avec php. De cette façon, vous risquez moins de rencontrer des problèmes de dépassement de délai.

si vous ne savez pas quel fichier à télécharger, car il est une variable de php de quelque sorte que vous pouvez écrire dans un fichier le nom du fichier requis comme première étape de votre travail

passer ensuite à wget via --input-file = fichier en tant que deuxième étape

puis traiter comme troisième et dernière étape avec votre programme php

0

directio est une extension de bas niveau qui contourne le système d'exploitation et va directement sur le disque dur , par conséquent, il est probablement le plus efficace.

http://php.net/manual/en/ref.dio.php

Notez que PHP 5.1.0, il ne sera plus intégrée avec PHP. En outre, si votre script se casse au milieu de l'opération, vérifiez vos max_execution_time et max_memory.

Questions connexes