2009-09-29 10 views
0

J'ai développé un script de téléchargement FTP récursif, en PHP5, qui vous permet de sélectionner des fichiers et/ou des répertoires à télécharger en utilisant une requête AJAX. La variable POST que le serveur reçoit est juste une courte chaîne séparée par un tube qui n'occupe aucune mémoire.Le téléchargement FTP échoue sur le serveur virtuel distant mais fonctionne parfaitement sur la configuration locale

Le script lui-même fonctionne parfaitement sur ma configuration locale Apache et va dans chaque répertoire et télécharge chaque fichier et dossier.

Sur mon serveur virtuel distant configuré sous Media Temple, le script échoue sur les grandes structures, ce qui est très bien géré par mon Apache local. Les symptômes sont que certains répertoires sont considérés comme des fichiers et par conséquent le script ne les entrera pas et ne les téléchargera pas plus loin.

Le script vérifie si un chemin est un répertoire en essayant de l'ouvrir à distance. S'il peut ouvrir le répertoire, il télécharge récursivement tout ce qu'il contient jusqu'à ce qu'il se termine. Le php.ini hébergé sur Media Temple a un seuil beaucoup plus élevé que celui de ma configuration locale (temps d'exécution max plus long, limite de mémoire plus élevée, etc.). Ce n'est pas le problème ... J'ai même essayé en utilisant mon php.ini local sur le serveur distant.

Le journal des erreurs utilisé pour obtenir ma "fin prématurée des en-têtes de script, PHP" jusqu'à ce que je suis passé à un serveur virtuel dédié de l'hébergement régulier. Maintenant, il ne réagit pas du tout. Ce que j'ai essayé de résoudre le problème est d'expérimenter avec différentes valeurs dans php.ini et plus récemment j'ai fait un flush() et ob_flush() pour chaque nouveau fichier et répertoire qui a été créé ... dans une tentative pour arrêter toute occurance de "Fin prématurée des en-têtes de script, PHP".

Avez-vous des idées?

+0

Juste une suggestion ... une question polie ne commence pas par 'Hey!' - en dehors de cela, est-il sage de vérifier si un objet est un fichier ou un dossier en essayant de l'ouvrir? – pavium

+0

Désolé pour le "Hey!" :) Non, ça ne me sens pas très bien. Cependant, il n'y a pas d'autre moyen (pour autant que je sache) de vérifier si c'est un dir ... Il n'y a pas de fonction is_dir() pour FTP. Ce que j'ai fait auparavant était de vérifier les points dans le dernier segment du nom de fichier. Mais un répertoire peut contenir des points donc c'était une mauvaise idée. C'est sloweer mais donne un résultat correct. – Christoffer

Répondre

0

Eh bien fondamentalement, je ne sais pas à quoi ressemble votre code, mais cette partie here (de la maillinglist php.net) fonctionne très bien sur mon serveur. Maybee vous pouvez nous donner un exemple de votre code?

+0

Merci, ça va accélérer un peu les choses ... Exécuter un test maintenant pour voir si cela suffit pour que le script fonctionne comme prévu ... – Christoffer

+0

Hmm ... Le nouveau code que vous avez fourni donne le résultat exact opposé . Au début, tout fonctionne bien et tout commence à être téléchargé en tant que dossiers. (Epiphany! Doh! La connexion FTP est probablement fermée sans que le script ne s'en aperçoive: S reviendra vers vous quand je découvrirai) – Christoffer

+0

Oui, maintenant ça marche ...Mais c'est encore plus lent que ma configuration locale qui est environ 20 fois plus rapide. – Christoffer

0

Peut-être que c'est un problème d'accès: vous utilisez Linux? La VM est-elle la même que votre boîte de dev? L'utilisateur exécutant apache a-t-il suffisamment de droits pour lire le répertoire?

+0

Le serveur fonctionne sous Linux CentOS 5 et ma boîte de dev fonctionne sous Ubuntu 9.04. Les droits ne semblent pas être le problème ... Je n'étais pas clair dans la description. Cela fonctionne parfaitement pendant un moment. Certains fichiers et répertoires sont bien téléchargés. Mais après un certain temps, certains répertoires sont considérés comme des fichiers et le script se termine avec beaucoup de travail, mais loin de tout. – Christoffer

Questions connexes