Tworzenie katalogu w przesyłanych plikach - wp_mkdir_p () czy WP_Filesystem?

9

Nie sądzę, że kiedykolwiek wcześniej miałem praktyczną potrzebę tworzenia folderów / plików w WP, ale do wtyczki potrzebuję folderu pamięci podręcznej (dla obrazów o zmienionym rozmiarze) wp-content/uploads.

Co nasuwa pytanie - czy naprawdę muszę przejść przez cały proces Filesystem API(w tym niechlujne proszenie o poświadczenia FTP, gdy jest to potrzebne), czy wp_mkdir_p()jest na to wystarczająco dobry?

Rarst
źródło

Odpowiedzi:

7

wp-content/uploads/powinien być zapisywalny dla serwera (w przeciwnym razie przesłanie pliku byłoby niemożliwe, nie?). Jeśli zamierzasz utworzyć coś w tym katalogu, możesz z niego bezpiecznie korzystać wp_mkdir_p().

Używałbym tylko, WP_Filesystemjeśli istnieje szansa, że ​​serwer nie ma uprawnień do zapisu do lokalizacji, np. W wp-content/plugins/, co nie musi być zapisywalne dla serwera (przynajmniej myślę, że nie musi tak być?).

Sidenote: Strona uprawnień do plików w Kodeksie również mówi o wp-content/cache/katalogu. Czy byłaby to „bardziej standardowa” lokalizacja plików pamięci podręcznej?

Jan Fabry
źródło
Nie jestem pewien, ale myślę, że cachebardziej chodzi o takie rzeczy jak wtyczki buforujące strony, podczas gdy mój przypadek dotyczy bardziej alternatywnych wersji obrazów ... Rozróżnienie między tymi folderami wydaje się raczej semantyczne niż techniczne, prawda?
Rarst
6

Wypróbuję coś prostego, zanim zacznę bawić się w niekończącym się morzu możliwości / konfiguracji hostingu:

$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(); ... ;-)
}
kajzer
źródło
Btw: Nie został przetestowany i nie mam pojęcia, czy zapisać wp_mkdir_p();można sprawdzić po wykonaniu lub czy wykonanie fn powinno być wewnątrz instrukcji if ... (nigdy wcześniej go nie używał i nawet nie wiedział o samej funkcji do teraz).
kaiser
Powiązana funkcjonalność jest rodzajem zaplecza ... Chciałbym zminimalizować interaktywność. Chociaż wiadomość w ustawieniach wtyczki jest warta rozważenia.
Rarst
Nie myślałbym o tym za dużo. Jeśli użytkownicy sys nie mogą tego zrobić z wartościami domyślnymi, spróbuj powiedzieć im, co mają robić. Jak powiedziałem: Possibilites są nieskończone i imho powinieneś po prostu powiedzieć, jaki wynik powinien być kontynuowany, aby spróbować rozwiązać problem za pomocą kodu lub wsparcia.
kaiser
4

Tylko jedna uwaga na temat tworzenia plików / folderów przez wtyczkę: moja wtyczka też to zrobiła i napotkałem mnóstwo problemów z uprawnieniami do plików dla różnych użytkowników. Niektóre są oknami, niektóre są uniksowe, niektóre są hostowane, a niektóre są hodowane w domu. To był mój e-mail wsparcia nr 1 po udostępnieniu wtyczki.

Zmodyfikowałem swój kod, aby zminimalizować potrzebę dotykania systemów plików, a katalog przesyłania jest TYLKO tym, którego używam teraz, aby uniknąć takich problemów.

użytkownik6479
źródło
Tak, rozumiem to, dlatego zadaję sobie pytanie. Mój obecny przegląd tego problemu jest taki, że jeśli uploadsjest wystarczająco zamknięty, aby WP mógł zawieść, to nie ma sensu, aby wtyczka próbowała zrobić więcej. A jeśli jest wystarczająco dobry dla WP, to jest wystarczająco dobry dla wtyczki. Na szczęście potrzebuję tylko katalogu pamięci podręcznej w dowolnym miejscu, a nie czegoś bardziej złożonego i podatnego na błędy.
Rarst