Ich versuche, ein Verzeichnis mit der PHP-Funktion mkdir zu erstellen, erhalte jedoch die folgende Fehlermeldung : Warning: mkdir() [function.mkdir]: Permission denied in .... Wie kann man das Problem lösen?
Ich weiß, dass dies ein alter Thread ist, aber er braucht eine bessere Antwort. Sie sollten die Berechtigungen nicht auf 777 setzen müssen, da dies ein Sicherheitsproblem darstellt, da es Lese- und Schreibzugriff auf die Welt ermöglicht. Möglicherweise verfügt Ihr Apache-Benutzer nicht über Lese- / Schreibberechtigungen für das Verzeichnis.
Hier ist, was Sie in Ubuntu tun
Stellen Sie sicher, dass alle Dateien der Apache-Gruppe und dem Benutzer gehören. In Ubuntu ist es die WWW-Datengruppe und der Benutzer
chown -R www-data:www-data /path/to/webserver/www
Als nächstes konnten alle Mitglieder der WWW-Datengruppe Dateien lesen und schreiben
chmod -R g+rw /path/to/webserver/www
Die PHP- mkdir()Funktion sollte jetzt funktionieren, ohne Fehler zurückzugeben
Apache benötigt die Erlaubnis, Dinge wie Cache und Protokolle zu schreiben ... es ist nur eine Frage der Feinabstimmung.
Manatax
@simpleengine Hallo, ich habe Ihre Antwort bemerkt. Ich habe das gleiche Problem mit einem Projekt, das ich in CodeIgnter erstellen und in Ubuntu 14.14 Lts entwickeln möchte. Können Sie mir bitte die Schritte näher erläutern, die ich ausführen muss? tun, um diesen Fehler zu beheben ??? Um Ihnen einige zusätzliche Informationen zu geben: Der absolute Pfad ist /opt/lampp/htdocs/www/my-app/public/uploads.. Grundsätzlich versuche ich, dass jeder angemeldete Benutzer Dateien in den Upload-Ordner hochlädt und auch Album-Ordner erstellt (dies wird mit PHP durchgeführt), um Fotos zu speichern ..
ltdev
4
Ich mag keine Benutzer, die immer wieder sagen, dass es unsicher ist, ohne die sichere Vorgehensweise zu zeigen.
Che-Azeh
37
Späte Antwort für Leute, die dies in Zukunft über Google finden. Ich bin auf das gleiche Problem gestoßen.
HINWEIS: Ich bin auf MAC OSX LION
Was passiert ist, dass Apache als Benutzer "_www" ausgeführt wird und keine Berechtigung zum Bearbeiten von Dateien hat. Sie werden feststellen, dass KEINE Dateisystemfunktionen über PHP funktionieren.
Wie repariert man:
Öffnen Sie ein Finder-Fenster und wählen Sie in der Menüleiste Gehe> Gehe zu Ordner> / private / etc / apache2
Öffnen Sie jetzt httpd.conf
finden:
User _www
Group _www
Ändern Sie den Benutzernamen:
User<YOUR LOGIN USERNAME>
Starten Sie nun Apache neu, indem Sie dieses Formular-Terminal ausführen:
sudo apachectl -k restart
Wenn es immer noch nicht funktioniert, mache ich Folgendes, bevor ich das oben genannte getan habe. Könnte verwandt sein.
Öffnen Sie das Terminal und führen Sie die folgenden Befehle aus: (Beachten Sie, dass sich meine Webserver-Dateien unter / Library / WebServer / www befinden. Ändern Sie sie entsprechend dem Standort Ihrer Website.)
Diese Lösung funktioniert, ermöglicht es Apache jedoch, Ihr System zu zerstören, falls jemand es dazu bringt, schädlichen Code auszuführen (z. B. durch den Shellshock-Exploit). Eine Alternative wäre, Apache als ausgeführt zu lassen _wwwund eine Gruppe für Sie und Apache zu erstellen. Bilden Sie eine neue Gruppe, sagen Sie angerufen trusted, und setzen Sie sich und _wwwin sie. Machen Sie dann den Gruppeneigentümer aller Dateien in Ihrem Serverdokumentenverzeichnis als vertrauenswürdig. Führen Sie schließlich chmod g+rwxnur die Dateien aus, auf die Apache Zugriff benötigt, damit die trustedGruppe die Berechtigung zum Bearbeiten der Dateien hat.
Chris Middleton
3
Ich mische mich nur ein, um noch einmal zu betonen, dass diese Antwort eine schlechte Idee ist. Es gibt viele sehr gute Gründe, warum Apache-Prozesse ihrem eigenen Spezialbenutzer gehören.
Danyamachine
15
Setzen Sie die Berechtigungen nicht auf 777, wenn Sie mkdir in PHP verwenden
Nur-Link-Antworten gelten in StackOverflow nicht als bewährte Methode, aber die hier gegebenen Ratschläge sollten im Allgemeinen NICHT befolgt werden.
Bitte hören Sie auf, die Verwendung von 777 vorzuschlagen. Sie machen Ihre Datei für alle beschreibbar, was bedeutet, dass Sie die gesamte Sicherheit verlieren, für die das Berechtigungssystem entwickelt wurde. Wenn Sie dies vorschlagen, denken Sie über die Konsequenzen nach, die dies für einen schlecht konfigurierten Webserver haben kann: Es würde unglaublich einfach werden, die Website durch Überschreiben der Dateien zu "hacken". Also nicht.
Ich habe gerade das Problem in der ursprünglichen Frage gelöst, indem ich die Dateiberechtigungen mit Filezilla rekursiv auf 755 geändert habe. Klicken Sie mit der rechten Maustaste auf den übergeordneten Ordner, vorausgesetzt, es handelt sich um einen allgemeinen Datei-Repository-Ordner, für den 755 Berechtigungen festgelegt werden können. Klicken Sie dann auf Dateiattribute -> Numerischer Wert -> 755 und aktivieren Sie "In Unterverzeichnisse wiederverwenden". Die Weitergabe durch die Unterverzeichnisse dauert einige Minuten, wenn Sie viele Dateien haben. Dann versuchen Sie es erneut.
TARKUS
7
Ich weiß, dass dieser Thread alt ist, aber vielleicht hilft das eines Tages jemandem.
Das Problem, warum PHP "Berechtigung verweigert" für mkdir () sagt - falscher URL-Pfad. Um das Problem zu beheben, müssen Sie lediglich den richtigen Pfad ermitteln. Ich habe es so gemacht:
Ist mir beim Übertragen auf einen neuen Host passiert (das hat mysqlnd lol). Ich habe vergessen, in den neuen vollständigen Pfad des Basisverzeichnisses zu wechseln. Es stellte sich heraus, dass es eigentlich kein Berechtigungsproblem war.
JSG
2
Sie benötigen die Dateisystemberechtigung, um das Verzeichnis zu erstellen.
Beispiel: In Ubuntu 10.04 läuft Apache (PHP) als Benutzer: www-data in Gruppe: www-data
Das heißt, der Benutzer www-data benötigt Zugriff, um das Verzeichnis zu erstellen.
Sie können dies selbst versuchen, indem Sie 'su www-data' verwenden, um der Benutzer von www-data zu werden.
Als schnelle Lösung können Sie Folgendes tun: sudo chmod 777 my_parent_dir
chmod 0777wird Lese- und Schreibzugriff auf die Welt geben! Sie sollten so etwas nicht empfehlen. Allerdings ist der Rat mit der Benutzergruppe derzeit der beste hier :)
KingCrunch
1
Wenn die Welt Zugriff auf das Betriebssystem hat, sicher. Der bessere Weg wäre: sudo chown www-data: www-data my_parent_dir
Jon Skarpeteig
Oder lassen Sie die Berechtigungen in Ruhe und fügen Sie der Gruppe des übergeordneten Verzeichnisses WWW-Daten hinzu.
Marc B
0
Was Sie auch tun können, ist: / etc / sudoers
Fügen Sie dort die folgende Zeile hinzu, die diesem Benutzer die Berechtigung erteilt. Www-data ALL = (ALL: ALL) ALL Warum www-data? Dies liegt daran, dass Apache unter diesem Benutzernamen ausgeführt wird.
Falls Ihr Benutzer anders ist, versuchen Sie es mit dem Benutzernamen ALL = (ALL: ALL) ALL
Bearbeiten Sie nicht sudoersdirekt, sondern melden Sie sich als root an und verwenden Sie den visudoBefehl te : Er überprüft alle Änderungen, um fehlerhafte Änderungen zu vermeiden. Dies kann zu Analysefehlern führen, wenn die sudoers-Datei geladen wird, wodurch Sie möglicherweise machtlos werden (wie bei keinen Rechten an) etwas ändern)
Elias Van Ootegem
So finden Sie den Benutzernamen. wie www-data? Ich benutze Nginx, aber nicht arbeiten
Robspin
1
@robspin versuchen Sie dies: ps aux | egrep '(nginx)'
maxwells
0
Da Sie auf einem Mac arbeiten, können Sie sich der Gruppe _www (Apache-Benutzergruppe) auf Ihrem Mac hinzufügen:
sudo dseditgroup -o edit -a $USER -t user _www
und fügen Sie _www user zur Radgruppe hinzu. Dies scheint das zu sein, was der Mac als Dateien erstellt:
Ich habe dieses Problem gerade. Meine beste Lösung, die ich Ihnen derzeit geben kann (obwohl Sie keinen Ihrer Codes angegeben haben), wäre:
Überprüfen Sie, wie Sie Ihren Zielordner benennen, z. B.: New_folder (manchmal kann dies zu Berechtigungsfehlern führen, da die meisten Hosts nicht zulassen, dass zur Laufzeit Namen mit Unterstrich, Bindestrich usw. erstellt werden). Es hat bei mir funktioniert.
Wenn Sie den rekursiven Befehl zum Erstellen von Unterordnern verwendet haben, vergessen Sie nicht, 0755 (denken Sie daran, 0 am Anfang einzufügen) in den Befehl mkdir einzufügen, z.
if(!file_exists($output)){if(!mkdir($output,0755,true)){//0755die('Failed to create folders...');}}
Nachdem Sie den FTP-Server mit installiert sudo apt-get install vsftpdhaben, müssen Sie ihn konfigurieren. Um den Schreibzugriff zu aktivieren, müssen Sie die /etc/vsftpd.confDatei bearbeiten und das auskommentieren
#write_enable=YES
Zeile, so sollte es lesen
write_enable=YES
Speichern Sie die Datei und starten Sie vsftpdmit neu sudo service vsftpd restart.
Antworten:
Ich weiß, dass dies ein alter Thread ist, aber er braucht eine bessere Antwort. Sie sollten die Berechtigungen nicht auf 777 setzen müssen, da dies ein Sicherheitsproblem darstellt, da es Lese- und Schreibzugriff auf die Welt ermöglicht. Möglicherweise verfügt Ihr Apache-Benutzer nicht über Lese- / Schreibberechtigungen für das Verzeichnis.
Hier ist, was Sie in Ubuntu tun
Stellen Sie sicher, dass alle Dateien der Apache-Gruppe und dem Benutzer gehören. In Ubuntu ist es die WWW-Datengruppe und der Benutzer
chown -R www-data:www-data /path/to/webserver/www
Als nächstes konnten alle Mitglieder der WWW-Datengruppe Dateien lesen und schreiben
chmod -R g+rw /path/to/webserver/www
Die PHP-
mkdir()
Funktion sollte jetzt funktionieren, ohne Fehler zurückzugebenquelle
/opt/lampp/htdocs/www/my-app/public/uploads
.. Grundsätzlich versuche ich, dass jeder angemeldete Benutzer Dateien in den Upload-Ordner hochlädt und auch Album-Ordner erstellt (dies wird mit PHP durchgeführt), um Fotos zu speichern ..Späte Antwort für Leute, die dies in Zukunft über Google finden. Ich bin auf das gleiche Problem gestoßen.
HINWEIS: Ich bin auf MAC OSX LION
Was passiert ist, dass Apache als Benutzer "_www" ausgeführt wird und keine Berechtigung zum Bearbeiten von Dateien hat. Sie werden feststellen, dass KEINE Dateisystemfunktionen über PHP funktionieren.
Wie repariert man:
Öffnen Sie ein Finder-Fenster und wählen Sie in der Menüleiste Gehe> Gehe zu Ordner> / private / etc / apache2
Öffnen Sie jetzt httpd.conf
finden:
Ändern Sie den Benutzernamen:
Starten Sie nun Apache neu, indem Sie dieses Formular-Terminal ausführen:
Wenn es immer noch nicht funktioniert, mache ich Folgendes, bevor ich das oben genannte getan habe. Könnte verwandt sein.
Öffnen Sie das Terminal und führen Sie die folgenden Befehle aus: (Beachten Sie, dass sich meine Webserver-Dateien unter / Library / WebServer / www befinden. Ändern Sie sie entsprechend dem Standort Ihrer Website.)
quelle
_www
und eine Gruppe für Sie und Apache zu erstellen. Bilden Sie eine neue Gruppe, sagen Sie angerufentrusted
, und setzen Sie sich und_www
in sie. Machen Sie dann den Gruppeneigentümer aller Dateien in Ihrem Serverdokumentenverzeichnis als vertrauenswürdig. Führen Sie schließlichchmod g+rwx
nur die Dateien aus, auf die Apache Zugriff benötigt, damit dietrusted
Gruppe die Berechtigung zum Bearbeiten der Dateien hat.Setzen Sie die Berechtigungen nicht auf 777, wenn Sie mkdir in PHP verwenden
Nur-Link-Antworten gelten in StackOverflow nicht als bewährte Methode, aber die hier gegebenen Ratschläge sollten im Allgemeinen NICHT befolgt werden.
Ich möchte auf diese großartige Antwort auf eine ähnliche Frage zurückkommen . Ich zitiere:
quelle
Befestigen Sie die Berechtigungen des Verzeichnisses versuchen Sie ein Verzeichnis erstellen in .
quelle
Ich weiß, dass dieser Thread alt ist, aber vielleicht hilft das eines Tages jemandem.
Das Problem, warum PHP "Berechtigung verweigert" für mkdir () sagt - falscher URL-Pfad. Um das Problem zu beheben, müssen Sie lediglich den richtigen Pfad ermitteln. Ich habe es so gemacht:
quelle
Sie benötigen die Dateisystemberechtigung, um das Verzeichnis zu erstellen.
Beispiel: In Ubuntu 10.04 läuft Apache (PHP) als Benutzer: www-data in Gruppe: www-data
Das heißt, der Benutzer www-data benötigt Zugriff, um das Verzeichnis zu erstellen.
Sie können dies selbst versuchen, indem Sie 'su www-data' verwenden, um der Benutzer von www-data zu werden.
Als schnelle Lösung können Sie Folgendes tun: sudo chmod 777 my_parent_dir
quelle
chmod 0777
wird Lese- und Schreibzugriff auf die Welt geben! Sie sollten so etwas nicht empfehlen. Allerdings ist der Rat mit der Benutzergruppe derzeit der beste hier :)Was Sie auch tun können, ist: / etc / sudoers
Fügen Sie dort die folgende Zeile hinzu, die diesem Benutzer die Berechtigung erteilt. Www-data ALL = (ALL: ALL) ALL Warum www-data? Dies liegt daran, dass Apache unter diesem Benutzernamen ausgeführt wird.
Falls Ihr Benutzer anders ist, versuchen Sie es mit dem Benutzernamen ALL = (ALL: ALL) ALL
Das hat bei mir funktioniert.
quelle
sudoers
direkt, sondern melden Sie sich als root an und verwenden Sie denvisudo
Befehl te : Er überprüft alle Änderungen, um fehlerhafte Änderungen zu vermeiden. Dies kann zu Analysefehlern führen, wenn die sudoers-Datei geladen wird, wodurch Sie möglicherweise machtlos werden (wie bei keinen Rechten an) etwas ändern)Da Sie auf einem Mac arbeiten, können Sie sich der Gruppe _www (Apache-Benutzergruppe) auf Ihrem Mac hinzufügen:
und fügen Sie _www user zur Radgruppe hinzu. Dies scheint das zu sein, was der Mac als Dateien erstellt:
quelle
Ich habe dieses Problem gerade. Meine beste Lösung, die ich Ihnen derzeit geben kann (obwohl Sie keinen Ihrer Codes angegeben haben), wäre:
Wenn Sie den rekursiven Befehl zum Erstellen von Unterordnern verwendet haben, vergessen Sie nicht, 0755 (denken Sie daran, 0 am Anfang einzufügen) in den Befehl mkdir einzufügen, z.
Das funktioniert jetzt auch bei mir.
quelle
Wenn Sie LINUX verwenden, überprüfen wir zunächst den Benutzer von Apache, da dies in einigen Distributionen unterschiedlich sein kann:
Angenommen, das Ergebnis ist "http". Führen Sie die folgenden Schritte aus. Denken Sie daran, path_to_folder in Ordnerpfad zu ändern:
quelle
Überprüfen Sie, ob es kein Problem mit umask ist
quelle
Nachdem Sie den FTP-Server mit installiert
sudo apt-get install vsftpd
haben, müssen Sie ihn konfigurieren. Um den Schreibzugriff zu aktivieren, müssen Sie die/etc/vsftpd.conf
Datei bearbeiten und das auskommentierenZeile, so sollte es lesen
Speichern Sie die Datei und starten Sie
vsftpd
mit neusudo service vsftpd restart
.Weitere Konfigurationsoptionen finden Sie in dieser Dokumentation oder
man vsftpd.conf
quelle
Dieser Fehler tritt auf, wenn Sie den falschen Pfad verwenden.
Zum Beispiel:
Ich verwende das Ubuntu-System und mein Projektordnername lautet "myproject".
Angenommen, ich habe das Verzeichnis myproject / public / report und möchte einen neuen Ordner mit dem Namen " orders" erstellen
Dann brauche ich einen ganzen Weg, auf dem mein Projekt existiert. Sie können den Pfad per PWD-Befehl abrufen
Mein Root-Pfad lautet also = '/ home / htdocs / myproject /'
$ dir = '/ home / htdocs / myproject / public / report / Orders';
Es wird für dich funktionieren !! Genießen !!
quelle