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?
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
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