Próbuję utworzyć katalog z funkcji mkdir PHP, ale pojawia się błąd w następujący sposób: Warning: mkdir() [function.mkdir]: Permission denied in .... Jak rozwiązać problem?
Wiem, że to stary wątek, ale potrzebuje lepszej odpowiedzi. Nie powinieneś ustawiać uprawnień na 777, jest to problem bezpieczeństwa, ponieważ daje dostęp do odczytu i zapisu na świecie. Może się zdarzyć, że twój użytkownik Apache nie ma uprawnień do odczytu / zapisu w katalogu.
Oto, co robisz w Ubuntu
Upewnij się, że wszystkie pliki należą do grupy i użytkownika Apache. W Ubuntu jest to grupa i użytkownik www-data
chown -R www-data:www-data /path/to/webserver/www
Następnie umożliwiono wszystkim członkom grupy www-data odczyt i zapis plików
chmod -R g+rw /path/to/webserver/www
Funkcja php mkdir()powinna teraz działać bez zwracania błędów
Apache potrzebuje uprawnień do zapisywania takich rzeczy, jak pamięć podręczna i dzienniki ... to tylko kwestia dostrojenia.
Manatax,
@simpleengine Cześć, zauważyłem twoją odpowiedź. Mam ten sam problem z projektem, który próbuję stworzyć w CodeIgnterze i rozwijam w Ubuntu 14.14 Lts .. Czy mógłbyś dokładniej wyjaśnić mi kroki, które muszę wykonać zrobić, aby naprawić ten błąd ??? Aby dać ci dodatkowe informacje: absolutna ścieżka to /opt/lampp/htdocs/www/my-app/public/uploads.. Zasadniczo to, co próbuję zrobić, to przesłać pliki do folderu przesyłania, a także utworzyć foldery albumów (zostanie to zrobione za pomocą php) do przechowywania zdjęć ..
ltdev
6
Nie lubię użytkowników, którzy powtarzają „to niebezpieczne”, ale nie pokazują, jak to zrobić.
che-azeh
38
Późna odpowiedź dla osób, które w przyszłości znajdą to w Google. Napotkałem ten sam problem.
UWAGA: JESTEM NA MAC OSX LION
Dzieje się tak, że Apache jest uruchamiany jako użytkownik „_www” i nie ma uprawnień do edycji żadnych plików. Zauważysz, że ŻADNE funkcje systemu plików nie działają przez php.
Jak naprawić:
Otwórz okno wyszukiwarki i na pasku menu wybierz Idź> Idź do katalogu> / private / etc / apache2
teraz otwórz httpd.conf
odnaleźć:
User _www
Group _www
zmień nazwę użytkownika:
User<YOUR LOGIN USERNAME>
Teraz zrestartuj Apache, uruchamiając ten terminal formularza:
sudo apachectl -k restart
Jeśli nadal nie działa, zdarza się, że wykonuję następujące czynności, zanim zrobię to powyżej. Może być powiązany.
Otwórz terminal i uruchom następujące polecenia: (uwaga, moje pliki serwera WWW znajdują się w / Library / WebServer / www. Zmień zgodnie z lokalizacją Twojej witryny)
To rozwiązanie działa, ale pozwala Apache siać spustoszenie w systemie, jeśli ktoś zmusi go do wykonania złośliwego kodu (np. Za pomocą exploita Shellshock). Alternatywą byłoby pozostawienie wykonywania Apache jako _wwwi utworzenie grupy dla Ciebie i Apache. Stwórz nową grupę, powiedz „wezwana” trustedi umieść się _wwww niej. Następnie ustaw jako zaufanego właściciela grupy wszystkich plików w katalogu dokumentów serwera. Na koniec zrób chmod g+rwxw razie potrzeby tylko te pliki, do których Apache potrzebuje dostępu, aby trustedgrupa miała uprawnienia do edycji plików.
Chris Middleton
3
po prostu wbijając się, by jeszcze raz podkreślić, że ta odpowiedź to zły pomysł. istnieje wiele bardzo dobrych powodów, dla których procesy Apache są własnością ich własnych użytkowników specjalnego przeznaczenia.
danyamachine
16
Nie ustawiaj uprawnień na 777 podczas używania mkdir w PHP
Odpowiedzi zawierające tylko łącza nie są uważane za dobrą praktykę w StackOverflow, ale podana tutaj rada zasadniczo NIE powinna być stosowana.
Proszę, przestań sugerować użycie 777. Uczyniasz swój plik możliwym do zapisu przez wszystkich, co właściwie oznacza, że tracisz wszelkie zabezpieczenia, dla których został zaprojektowany system uprawnień. Jeśli to zasugerujesz, pomyśl o konsekwencjach, jakie może to mieć na źle skonfigurowanym serwerze internetowym: niezwykle łatwo byłoby „zhakować” witrynę, nadpisując pliki. Więc nie rób tego.
Właśnie rozwiązałem problem w pierwotnym pytaniu, zmieniając rekurencyjnie uprawnienia do pliku 755, używając Filezilli. Kliknij prawym przyciskiem myszy folder nadrzędny, zakładając, że jest to jakiś ogólny folder repozytorium plików, dla którego można ustawić uprawnienia 755, następnie Atrybuty plików -> Wartość liczbowa -> 755, a następnie zaznacz „Rekurenuj w podkatalogach”. Jeśli masz dużo plików, propagacja przez podkatalogi zajmuje kilka minut. Następnie spróbuj ponownie.
TARKUS
7
Wiem, że ten wątek jest stary, ale może to komuś kiedyś pomoże.
Problem dlaczego PHP mówi "Odmowa uprawnień" dla mkdir () - zła ścieżka url. Aby to naprawić, wystarczy uzyskać prawidłową ścieżkę. Zrobiłem to w ten sposób:
Zdarzyło mi się podczas przenoszenia do nowego hosta (który ma mysqlnd lol). Zapomniałem zmienić na nową pełną ścieżkę katalogu domowego. Okazuje się, że tak naprawdę nie był to problem z pozwoleniami.
JSG
2
Aby utworzyć katalog, musisz mieć uprawnienia systemu plików.
Przykład: W Ubuntu 10.04 apache (php) działa jako user: www-data w grupie: www-data
Oznacza to, że użytkownik www-data potrzebuje dostępu, aby utworzyć katalog.
Możesz spróbować samemu, używając: „su www-data”, aby stać się użytkownikiem www-data.
Jako szybką naprawę możesz zrobić: sudo chmod 777 my_parent_dir
chmod 0777umożliwi odczyt i zapis na świecie! Nie powinieneś doradzać czegoś takiego. Jednak rada z grupą użytkowników jest obecnie najlepsza tutaj :)
KingCrunch
1
Jeśli świat ma dostęp do systemu operacyjnego, to jasne. Lepszym sposobem byłoby: sudo chown www-data: www-data my_parent_dir
Jon Skarpeteig
Lub zostaw uprawnienia w spokoju i dodaj dane www do grupy katalogu nadrzędnego.
Marc B
0
Inną rzeczą, którą możesz zrobić, jest przejście do: / etc / sudoers
Dodaj następujący wiersz, który daje uprawnienia temu użytkownikowi www-data ALL = (ALL: ALL) ALL Dlaczego dane www? dzieje się tak, ponieważ Apache działa pod tą nazwą użytkownika.
Jeśli twój użytkownik jest inny, wypróbuj nazwę użytkownika ALL = (ALL: ALL) ALL
nie edytuj sudoersbezpośrednio, ale zaloguj się jako root i użyj visudopolecenia te : które sprawdza wszelkie zmiany, aby uniknąć błędnych edycji, które mogą powodować błędy parsowania podczas ładowania pliku sudoers, co może pozostawić Cię bezsilnym (jak w przypadku braku uprawnień do zmienić cokolwiek)
Elias Van Ootegem,
Jak znaleźć nazwę użytkownika. jak www-data? Używam Nginx, ale nie działa
robspin
1
@robspin spróbuj tego: ps aux | egrep '(nginx)'
maxwells
0
Ponieważ korzystasz z komputera Mac, możesz dodać siebie do grupy _www (grupa użytkowników Apache) na komputerze Mac:
sudo dseditgroup -o edit -a $USER -t user _www
i dodaj użytkownika _www do grupy kół, która wydaje się być tym, co Mac tworzy pliki jako:
Mam ten problem właśnie teraz, moim najlepszym rozwiązaniem, jakie mogę Ci teraz dać (mimo że nie dołączyłeś żadnego kodu) to:
Sprawdź, jak nazywasz folder docelowy, np .: nowy_folder (czasami może to powodować błąd w uprawnieniach, ponieważ większość hostów nie zezwala na tworzenie nazw z podkreśleniem, myślnikiem itp. W czasie wykonywania). U mnie to zadziałało.
Jeśli używasz polecenia rekurencyjnego do tworzenia podfolderów, nie zapomnij umieścić 0755 (pamiętaj, aby na początku dołączyć 0) do polecenia mkdir, np:
if(!file_exists($output)){if(!mkdir($output,0755,true)){//0755die('Failed to create folders...');}}
Po zainstalowaniu serwera ftp sudo apt-get install vsftpdbędziesz musiał go skonfigurować. Aby umożliwić zapis, musisz edytować /etc/vsftpd.confplik i odkomentować plik
#write_enable=YES
wiersz, więc powinien przeczytać
write_enable=YES
Zapisz plik i uruchom ponownie za vsftpdpomocą sudo service vsftpd restart.
Odpowiedzi:
Wiem, że to stary wątek, ale potrzebuje lepszej odpowiedzi. Nie powinieneś ustawiać uprawnień na 777, jest to problem bezpieczeństwa, ponieważ daje dostęp do odczytu i zapisu na świecie. Może się zdarzyć, że twój użytkownik Apache nie ma uprawnień do odczytu / zapisu w katalogu.
Oto, co robisz w Ubuntu
Upewnij się, że wszystkie pliki należą do grupy i użytkownika Apache. W Ubuntu jest to grupa i użytkownik www-data
chown -R www-data:www-data /path/to/webserver/www
Następnie umożliwiono wszystkim członkom grupy www-data odczyt i zapis plików
chmod -R g+rw /path/to/webserver/www
Funkcja php
mkdir()
powinna teraz działać bez zwracania błędówźródło
/opt/lampp/htdocs/www/my-app/public/uploads
.. Zasadniczo to, co próbuję zrobić, to przesłać pliki do folderu przesyłania, a także utworzyć foldery albumów (zostanie to zrobione za pomocą php) do przechowywania zdjęć ..Późna odpowiedź dla osób, które w przyszłości znajdą to w Google. Napotkałem ten sam problem.
UWAGA: JESTEM NA MAC OSX LION
Dzieje się tak, że Apache jest uruchamiany jako użytkownik „_www” i nie ma uprawnień do edycji żadnych plików. Zauważysz, że ŻADNE funkcje systemu plików nie działają przez php.
Jak naprawić:
Otwórz okno wyszukiwarki i na pasku menu wybierz Idź> Idź do katalogu> / private / etc / apache2
teraz otwórz httpd.conf
odnaleźć:
zmień nazwę użytkownika:
Teraz zrestartuj Apache, uruchamiając ten terminal formularza:
Jeśli nadal nie działa, zdarza się, że wykonuję następujące czynności, zanim zrobię to powyżej. Może być powiązany.
Otwórz terminal i uruchom następujące polecenia: (uwaga, moje pliki serwera WWW znajdują się w / Library / WebServer / www. Zmień zgodnie z lokalizacją Twojej witryny)
źródło
_www
i utworzenie grupy dla Ciebie i Apache. Stwórz nową grupę, powiedz „wezwana”trusted
i umieść się_www
w niej. Następnie ustaw jako zaufanego właściciela grupy wszystkich plików w katalogu dokumentów serwera. Na koniec zróbchmod g+rwx
w razie potrzeby tylko te pliki, do których Apache potrzebuje dostępu, abytrusted
grupa miała uprawnienia do edycji plików.Nie ustawiaj uprawnień na 777 podczas używania mkdir w PHP
Odpowiedzi zawierające tylko łącza nie są uważane za dobrą praktykę w StackOverflow, ale podana tutaj rada zasadniczo NIE powinna być stosowana.
Chciałbym wrócić do tej wspaniałej odpowiedzi na podobne pytanie . Cytuję:
źródło
Fix uprawnienia katalogu próby utworzenia katalogu w .
źródło
Wiem, że ten wątek jest stary, ale może to komuś kiedyś pomoże.
Problem dlaczego PHP mówi "Odmowa uprawnień" dla mkdir () - zła ścieżka url. Aby to naprawić, wystarczy uzyskać prawidłową ścieżkę. Zrobiłem to w ten sposób:
źródło
Aby utworzyć katalog, musisz mieć uprawnienia systemu plików.
Przykład: W Ubuntu 10.04 apache (php) działa jako user: www-data w grupie: www-data
Oznacza to, że użytkownik www-data potrzebuje dostępu, aby utworzyć katalog.
Możesz spróbować samemu, używając: „su www-data”, aby stać się użytkownikiem www-data.
Jako szybką naprawę możesz zrobić: sudo chmod 777 my_parent_dir
źródło
chmod 0777
umożliwi odczyt i zapis na świecie! Nie powinieneś doradzać czegoś takiego. Jednak rada z grupą użytkowników jest obecnie najlepsza tutaj :)Inną rzeczą, którą możesz zrobić, jest przejście do: / etc / sudoers
Dodaj następujący wiersz, który daje uprawnienia temu użytkownikowi www-data ALL = (ALL: ALL) ALL Dlaczego dane www? dzieje się tak, ponieważ Apache działa pod tą nazwą użytkownika.
Jeśli twój użytkownik jest inny, wypróbuj nazwę użytkownika ALL = (ALL: ALL) ALL
To zadziałało dla mnie.
źródło
sudoers
bezpośrednio, ale zaloguj się jako root i użyjvisudo
polecenia te : które sprawdza wszelkie zmiany, aby uniknąć błędnych edycji, które mogą powodować błędy parsowania podczas ładowania pliku sudoers, co może pozostawić Cię bezsilnym (jak w przypadku braku uprawnień do zmienić cokolwiek)Ponieważ korzystasz z komputera Mac, możesz dodać siebie do grupy _www (grupa użytkowników Apache) na komputerze Mac:
i dodaj użytkownika _www do grupy kół, która wydaje się być tym, co Mac tworzy pliki jako:
źródło
Mam ten problem właśnie teraz, moim najlepszym rozwiązaniem, jakie mogę Ci teraz dać (mimo że nie dołączyłeś żadnego kodu) to:
Jeśli używasz polecenia rekurencyjnego do tworzenia podfolderów, nie zapomnij umieścić 0755 (pamiętaj, aby na początku dołączyć 0) do polecenia mkdir, np:
To też działa dla mnie teraz.
źródło
Jeśli używasz LINUX-a, najpierw sprawdźmy użytkownika Apache, ponieważ w niektórych dystrybucjach może być inaczej:
Powiedzmy, że wynikiem jest „http”. Wykonaj następujące czynności, pamiętaj tylko o zmianie path_to_folder na ścieżkę folderów:
źródło
sprawdź, czy to nie jest problem z umaską
źródło
Po zainstalowaniu serwera ftp
sudo apt-get install vsftpd
będziesz musiał go skonfigurować. Aby umożliwić zapis, musisz edytować/etc/vsftpd.conf
plik i odkomentować plikwiersz, więc powinien przeczytać
Zapisz plik i uruchom ponownie za
vsftpd
pomocąsudo service vsftpd restart
.Inne opcje konfiguracji można znaleźć w tej dokumentacji lub
man vsftpd.conf
źródło
Ten błąd występuje, jeśli używasz złej ścieżki.
Na przykład:
Używam systemu Ubuntu, a nazwa mojego folderu projektu to „myproject”
Załóżmy, że mam katalog myproject / public / report i chcę utworzyć nowy folder o nazwie zamówienia
Następnie potrzebuję całej ścieżki, na której istnieje mój projekt. Możesz uzyskać ścieżkę za pomocą polecenia PWD
Więc moja ścieżka główna będzie wyglądać następująco = '/ home / htdocs / myproject /'
$ dir = '/ home / htdocs / myproject / public / report / Orders';
To zadziała dla Ciebie !! Cieszyć się !!
źródło