2010-07-03 6 views
0

J'ai écrit un plugin WordPress, et j'essaie de trouver le meilleur moyen de faire vérifier le programme pour les mises à jour sur mon serveur, et de les télécharger automatiquement à la demande de l'utilisateur. Ce sera essentiellement utilisé pour télécharger des fonctionnalités supplémentaires que je ne veux pas mettre dans le dépôt WordPress en raison de leur ne pas avoir la licence GNU.Quelle est la meilleure façon de télécharger un fichier externe sur un serveur via un programme

J'ai codé le programme pour vérifier les mises à jour, ce dont je ne suis pas sûr, c'est la partie téléchargement. Dois-je utiliser file_get_contents() puis fwrite() pour écrire les résultats dans un répertoire?

Je suis sûr que c'est une façon de le faire, mais je suis à la recherche de la façon la plus sûre possible de faire cela parce que le plugin est utilisé par des milliers de personnes sur différentes configurations, même si elles sont toutes PHP, et la plupart PHP5 +. J'ai peur que certains hôtes puissent avoir une sorte de sécurité m'empêchant de le faire. CURL serait-il une meilleure option?

Merci.

Répondre

1

ne pas réinventer la roue! WordPress a un HTTP API pour ce but précis!

Vérifiez le codex pour l'essentiel - http://codex.wordpress.org/HTTP_API

Vous pouvez également parcourir la source wp-includes/class-http.php

+0

Vous avez raison, j'ai trouvé ces fonctions peu de temps après avoir posté cette question. WP a un certain nombre de fonctions disponibles pour télécharger les en-têtes, les fichiers, les extraire, etc. Malheureusement, il n'y a pas beaucoup de documentation disponible à part les entrées PHPDoc dans les fichiers. – Andy

3

Vous pouvez utiliser file_put_contents, ce qui est beaucoup plus efficace que de charger tout en mémoire avec file_get_contents, puis en appelant fwrite. Le deuxième paramètre accepte une ressource de flux, que vous pouvez ouvrir avec fopen ou (si vous voulez contourner les restrictions allow_url_fopen, fsockopen).

Par conséquent, l'option la plus simple qui utilise uniquement les fonctions de base (pas d'extension boucle, etc.) et fonctionne en configuration presque evry est:

+0

On dirait bien, je vais le tester et poster ici les résultats. – Andy

+0

Si votre fichier téléchargeable est protégé par un mot de passe (authentification HTTP de base, connexion par formulaire, etc ...), vous devrez utiliser CURL. 'file_get_contents()' est très basique et ne pourra gérer aucun type d'authentification/login. –

+0

@Marc Le wrapper http (que file_get_contents utilisera) peut effectuer une authentification de base dès sa sortie de la boîte et vous pouvez implémenter l'authentification digest manuellement (avec quelques efforts), si nécessaire. Les connexions basées sur des formulaires peuvent également être gérées par le wrapper http, car vous pouvez envoyer des données post arbitraires et des en-têtes arbitraires en créant le contexte approprié. Voir http://www.php.net/manual/en/context.http.php – Artefacto

Questions connexes