Création d'un répertoire dans les téléchargements - wp_mkdir_p () ou WP_Filesystem?

9

Je ne pense pas avoir jamais eu besoin de créer des dossiers / fichiers dans WP auparavant, mais pour un plugin, j'ai besoin du dossier cache (pour les images redimensionnées) dans wp-content/uploads.

Ce qui soulève la question - dois-je vraiment passer par tout le processus Filesystem API(y compris demander des informations d'identification FTP en cas de besoin), ou wp_mkdir_p()est-ce assez bon pour cela?

Rarst
la source

Réponses:

7

wp-content/uploads/devrait être accessible en écriture pour le serveur (sinon il serait impossible de télécharger un fichier, non?). Si vous allez créer quelque chose sous ce répertoire, son utilisation est sûre wp_mkdir_p().

Je n'utiliserais que WP_Filesystems'il y a une chance que le serveur ne dispose pas des autorisations pour écrire à l'emplacement, comme dans wp-content/plugins/, qui ne doit pas être accessible en écriture pour le serveur (au moins, je pense que cela ne doit pas l'être?).

Sidenote: La page File Permissions du Codex parle également d'un wp-content/cache/répertoire. Serait-ce un emplacement "plus standard" pour les fichiers de cache?

Jan Fabry
la source
Je ne suis pas sûr mais je pense que cachec'est plus sur des choses comme les plugins de mise en cache de page, alors que mon cas est plus sur des versions alternatives d'images ... La distinction entre ces dossiers semble sémantique plutôt que technique, non?
Rarst
6

J'essaierais quelque chose de simple, avant de déconner avec une mer infinie de possibilités / configurations d'hébergement:

$target = 'wherever';
wp_mkdir_p( $target );

if ( wp_mkdir_p( $target ) === TRUE )
{
    echo "Folder $target successfully created";
}
else
{
    new WP_Error; #... etc. Just tell where the user has to make a new folder with the name xy
    // or if you're kool, you use _doing_it_wrong(); ... ;-)
}
kaiser
la source
Btw: Ce n'est pas testé et je n'ai aucune idée si enregistrer le wp_mkdir_p();peut être vérifié après l'exécution ou si l'exécution de la fn devrait à l'intérieur de l'instruction if ... (jamais utilisé auparavant et ne connaissant même pas la fonction elle-même jusqu'à maintenant).
kaiser
La fonctionnalité associée est une sorte de back-end-ish ... J'aimerais minimiser l'interactivité. Bien que le message dans le paramètre du plugin mérite d'être considéré.
Rarst
Je n'y penserais pas trop. Si les utilisateurs sys ne peuvent pas le faire avec les valeurs par défaut, essayez de leur dire quoi faire. Comme je l'ai dit: les possibilités sont infinies et à mon humble avis, vous feriez mieux de simplement dire quel devrait être le résultat pour continuer à essayer de résoudre ce problème via le code ou le support.
kaiser
4

Juste un avertissement pour que votre plugin crée des fichiers / dossiers: mon plugin a également fait cela, et j'ai rencontré un tas de problèmes avec les autorisations de fichiers pour différents utilisateurs. Certains sont des fenêtres, certains sont unix, certains sont hébergés et certains cultivés à la maison. C'était mon e-mail de support n ° 1 une fois que j'ai partagé le plugin.

J'ai refactorisé mon code pour minimiser la nécessité de toucher les systèmes de fichiers et le répertoire de téléchargement est le SEUL que j'utilise maintenant pour éviter de tels problèmes.

user6479
la source
Oui, je comprends cela, c'est pourquoi je prends la peine de poser une question. Mon aperçu actuel du problème est que si uploadsest verrouillé suffisamment pour que WP échoue, il n'y a aucun sens pour que le plugin essaie d'en faire plus. Et si c'est assez bon pour WP, alors c'est assez bon pour le plugin. Heureusement, j'ai simplement besoin d'un répertoire de cache n'importe où et non de quelque chose de plus complexe et sujet aux erreurs.
Rarst