it-swarm.com.de

die Berechtigung file_put_contents wurde abgelehnt

Ich versuche, eine Abfrage zum Debuggen in eine Datei zu schreiben. Die Datei befindet sich in database/execute.php. Die Datei, in die ich schreiben möchte, ist database/queries.php.

Ich versuche, file_put_contents('queries.txt', $query) zu verwenden.

Aber ich bekomme 

file_put_contents (abfragen.txt) [function.file-put-contents]: Stream konnte nicht geöffnet werden: Berechtigung verweigert

Ich habe die queries.txt-Datei chmod'd bis 777, was könnte das Problem sein?

79
Hailwood

Passen Sie die Verzeichnisberechtigungen an.

führen Sie von einem Terminal aus chmod 777 database aus (in dem Verzeichnis, das den Datenbankordner enthält).

Apache und niemand haben Zugriff auf dieses Verzeichnis, wenn es korrekt chmodd ist.

Die andere Sache ist echo "getcwd ()". Dadurch wird das aktuelle Verzeichnis angezeigt. Wenn dies nicht "/something.../database/" ist, müssen Sie "query.txt" in den vollständigen Pfad für Ihren Server ändern.

63
Jason

Die andere Option

ist, dass Sie Apache (www-data), den Besitzer des Ordners machen können

Sudo chown -R www-data:www-data /var/www

file_put_contents sollte jetzt funktionieren. Für mehr Sicherheit legen Sie jedoch auch die Berechtigungen wie unten beschrieben fest 

find /var/www -type d -print0 | xargs -0 chmod 0755 # folder
find /var/www -type f -print0 | xargs -0 chmod 0644 # files
  • Ändern Sie /var/www in den Stammordner Ihrer PHP-Dateien
12
azerafati

Stellen Sie fest, dass dies ziemlich alt ist, aber Sie müssen Abfragen nicht manuell in eine Datei wie diese schreiben. MySQL verfügt über eine integrierte Protokollierungsunterstützung, die Sie nur in Ihrer Entwicklungsumgebung aktivieren müssen.

Sehen Sie sich die Dokumentation zum 'allgemeinen Abfrageprotokoll' an:

http://dev.mysql.com/doc/refman/5.1/de/query-log.html

7
Adam

Jungs, ich hatte dieses Problem 1 Monat lang und habe alles getan, konnte es aber nicht beheben, aber jetzt kenne ich die Lösung. 

Ich verwende ein Shared-Linux-Hosting. Als mein Admin die PHP-Version auf 5.3 umstellte, erhielt ich viele Fehler für den Code "file_put_contents". versuche meinen Plan zu testen:

Erstellen Sie in Ihrem Host eine Datei wie mytest.php, geben Sie diesen Code ein und speichern Sie:

<?php        mail('Your-EMail','Email-Title','Email-Message');        ?>

Öffnen Sie einmal die URL "www.ihr-domain.de/mytest.php" und prüfen Sie dann Ihre E-Mail. Sie sollten eine E-Mail von Ihrem Host mit den Informationen haben, die Sie in mytest.php eingegeben haben. Überprüfen Sie den Absendernamen. Wenn es von Nobody ist, haben Sie ein Problem bezüglich "Permission Denied", weil etwas nicht definiert ist und wenn der Absendername wie meine ID lautet: [email protected]

Mein Administrator hat den Server geändert und den Host erneut installiert. Ich denke, das Problem wurde gelöst, teilen Sie Ihrer Host-Administration mit, was ich Ihnen erzählt habe, und vielleicht finden sie die Antwort.

hoffe es hilft dir!

3
Hesam

Ich weiß, dass dies eine sehr alte Frage ist, aber ich wollte die gute Lösung mit ausführlicher Erklärung hinzufügen. Sie müssen zwei Anweisungen auf Ubuntu-ähnlichen Systemen ausführen, und dann funktioniert es wie ein Zauber. 

Berechtigungen in Linux können dreistellig dargestellt werden. Die erste Ziffer definiert die Erlaubnis des Eigentümers der Dateien. Die zweite Ziffer gibt die Berechtigungen einer bestimmten Benutzergruppe an. Die dritte Ziffer definiert die Berechtigungen für alle Benutzer, die weder Eigentümer noch Mitglied der Gruppe sind.

Der Webserver soll mit einer ID ausgeführt werden, die Mitglied der Gruppe ist. Der Webserver sollte niemals mit derselben ID wie der Besitzer der Dateien und Verzeichnisse ausgeführt werden. In Ubuntu läuft Apache unter der ID www-data. Diese ID sollte ein Mitglied der Gruppe sein, für die die Berechtigungen angegeben sind.

Führen Sie die Anweisung aus, um dem Verzeichnis, in dem Sie den Inhalt von Dateien ändern möchten, die richtigen Rechte zu geben:

find %DIR% -type d -exec chmod 770 {} \;

Dies würde in der Frage des OP bedeuten, dass die Berechtigungen für das Verzeichnis% ROOT%/database entsprechend geändert werden sollten. Daher ist es wichtig, dass sich keine Dateien in diesem Verzeichnis befinden, die niemals geändert oder entfernt werden sollten. Es empfiehlt sich daher, ein separates Verzeichnis für Dateien zu erstellen, deren Inhalt geändert werden muss.

Leseberechtigungen (4) für ein Verzeichnis bedeuten, alle Dateien und Verzeichnisse mit ihren Metadaten in einem Verzeichnis sammeln zu können. Schreibberechtigungen (2) geben die Berechtigung, den Inhalt des Verzeichnisses zu ändern. Wenn Sie Dateien hinzufügen und entfernen, Berechtigungen ändern, usw .. Die Ausführungsberechtigung (1) bedeutet, dass Sie das Recht haben, in dieses Verzeichnis zu gelangen. Ohne letzteres ist es unmöglich, tiefer in das Verzeichnis zu gehen. Der Webserver benötigt Berechtigungen zum Lesen, Schreiben und Ausführen, wenn der Inhalt einer Datei geändert werden soll. Dafür benötigt die Gruppe die Ziffer 7.

Die zweite Aussage ist in der Frage des OP:

find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;

Sie können ein Dokument lesen und schreiben, dies ist jedoch nicht erforderlich, um die Datei auszuführen. Die 7 wird dem Besitzer der Dateien gegeben, die 6 der Gruppe. Der Webserver benötigt nicht die Berechtigung, die Datei auszuführen, um den Inhalt zu ändern. Diese Schreibberechtigungen sollten nur Dateien in diesem Verzeichnis erteilt werden.

Alle anderen Benutzer sollten keine Berechtigung erhalten.

Für Verzeichnisse, deren Dateien nicht geändert werden müssen, sind Gruppenberechtigungen von 5 ausreichend Dokumentation zu Berechtigungen und einige Beispiele:

https://wiki.debian.org/Permissions

https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions

http://www.linux.org/threads/file-permissions-chmod.4094/

3
Loek Bergman

Das Sammeln von Informationen über diesen Link stackoverflow-image save funktioniert nicht mit chmod 777 und vom Benutzer azerafati und Loek Bergman

wenn Sie sich die Datei/etc/Apache/envvars ansehen, werden Sie Folgendes sehen:

export Apache_RUN_USER=www-data
export Apache_RUN_GROUP=www-data

Apache wird unter dem Benutzernamen 'www-data' ausgeführt.

'0755' bedeutet, dass der Besitzer der Datei lesen/schreiben/ausführen kann, Gruppen- und andere Benutzer jedoch nicht schreiben können. In Ihrem Terminal cd in den Ordner mit dem Ordner "images". dann tippe:

find images -type d -exec chmod 0755 {} \;
find images -type f -exec chmod 0755 {} \;
Sudo chown -R www-data:www-data images

sie müssen zuerst die Berechtigungen ändern, bevor Sie den Besitzer ändern. Geben Sie Ihr Kennwort ein, wenn Sie dazu aufgefordert werden. Dadurch wird 'www-data' zum Besitzer des Bilderordners.

dein Upload sollte jetzt funktionieren.

3
Bruce Tong

hatte das gleiche Problem; Mein Problem war, dass Selinux durchgesetzt wurde. 

Ich habe immer wieder die Fehlermeldung "Fehler beim Öffnen des Streams: Berechtigung verweigert" erhalten, obwohl nach 777 chmoding war und sichergestellt war, dass alle übergeordneten Ordner Ausführungsberechtigungen für den Apache-Benutzer hatten. Es stellte sich heraus, dass mein Problem darin bestand, dass Selinux durchgesetzt wurde (ich bin bei centos7). Dies ist eine Devbox, also habe ich sie ausgeschaltet. 

0
DaveS

Für alle, die Ubuntu verwenden und diese Fehlermeldung erhalten, wenn die Seite lokal geladen wird, jedoch nicht in einem Webhosting-Service.

Ich habe das Problem behoben, indem Nautilus (Sudo nautilus) geöffnet wurde. Klicken Sie mit der rechten Maustaste auf die Datei, die Sie öffnen möchten, klicken Sie auf Eigenschaften> Einstellungen> und geben Sie "allen anderen" Schreibzugriff

0
d-_-b

Wenn Sie von git vom lokalen auf den Server ziehen, müssen Sie den Cache manchmal aufgrund der Ansichtsdateien, die mit git hochgeladen werden, oder anderer zwischengespeicherter Dateien leeren.

php artisan cache:clear

Manchmal ist es nur ein Trick, wenn Ihre Anwendung vor dem Git-Pull funktioniert hat

0
Deepesh Thapa

Dies kann mit den folgenden Schritten behoben werden:

1. $ php artisan cache:clear

2. $ Sudo chmod -R 777 storage

3. $ composer dump-autoload

Ich hoffe es hilft

0
rust