Ich versuche, eine Abfrage zum Debuggen in eine Datei zu schreiben. Die Datei ist in database/execute.php
. Die Datei, in die ich schreiben möchte, ist database/queries.php
.
Ich versuche zu benutzen file_put_contents('queries.txt', $query)
Aber ich bekomme
file_put_contents (queries.txt) [function.file-put-content]: Stream konnte nicht geöffnet werden: Berechtigung verweigert
Ich habe die queries.txt
Datei chmod'd auf 777, was könnte das Problem sein?
php
file-io
file-permissions
Hagelholz
quelle
quelle
php.ini
Datei nach etwas durchsucht, das den Dateizugriff verweigern könnte?Antworten:
Versuchen Sie, die Verzeichnisberechtigungen anzupassen.
Führen Sie auf einem Terminal aus
chmod 777 database
(aus dem Verzeichnis, das den Datenbankordner enthält).Apache und niemand wird Zugriff auf dieses Verzeichnis haben, wenn es korrekt geändert wurde.
Das andere, was zu tun ist, ist das Echo "getcwd ()". Dies zeigt Ihnen das aktuelle Verzeichnis an. Wenn dies nicht "/something.../database/" ist, müssen Sie "query.txt" in den vollständigen Pfad für Ihren Server ändern.
quelle
chmod +x /parent/directory
, für jedes übergeordnete Verzeichnis des Ziels.chmod +x /parent/directory
,chmod +x /parent
Etc.Die andere Option
ist, dass Sie machen können
Apache (www-data)
, der Besitzer des Ordnersdas sollte
file_put_contents
jetzt funktionieren. Für mehr Sicherheit sollten Sie jedoch auch die folgenden Berechtigungen festlegen/var/www
in den Stammordner Ihrer PHP-Dateienquelle
Beachten Sie, dass dies jetzt ziemlich alt ist, aber es ist nicht erforderlich, Abfragen manuell in eine Datei wie diese zu schreiben. In MySQL ist die Protokollierungsunterstützung integriert. Sie müssen sie nur in Ihrer Entwicklungsumgebung aktivieren.
Schauen Sie sich die Dokumentation zum 'allgemeinen Abfrageprotokoll' an:
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
quelle
Leute, 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 Administrator die PHP auf 5.3 änderte, bekam 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:
Öffnen Sie einmal die URL "www.your-domain.com/mytest.php" und überprüfen Sie Ihre E-Mails. 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 niemandem stammt , haben Sie ein Problem mit "Berechtigung verweigert", weil etwas nicht definiert ist, und wenn der Absendername meiner ID entspricht: [email protected], haben Sie kein Problem.
Mein Administrator hat den Server geändert und den Host erneut installiert. Ich denke, das Problem wurde behoben. Sagen Sie Ihrer Host-Administration, was ich Ihnen gesagt habe, und vielleicht finden sie die Antwort.
hoffe es hilft dir!
quelle
Ich weiß, dass es eine sehr alte Frage ist, aber ich wollte die gute Lösung mit einigen ausführlichen Erklärungen hinzufügen. Sie müssen zwei Anweisungen auf Ubuntu-ähnlichen Systemen ausführen, und dann funktioniert es wie ein Zauber.
Berechtigungen unter 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 Eigentümer der Dateien und Verzeichnisse ausgeführt werden. In Ubuntu läuft Apache unter der ID www-data. Diese ID sollte Mitglied der Gruppe sein, für die die Berechtigungen angegeben sind.
Führen Sie die folgende Anweisung aus, um dem Verzeichnis, in dem Sie den Inhalt von Dateien ändern möchten, die richtigen Rechte zu geben:
Dies würde in der Frage des OP bedeuten, dass die Berechtigungen für das Verzeichnis% ROOT% / database entsprechend geändert werden sollten. Es ist daher wichtig, keine Dateien in diesem Verzeichnis zu haben, die niemals geändert oder entfernt werden sollten. Es wird daher empfohlen, ein separates Verzeichnis für Dateien zu erstellen, deren Inhalt geändert werden muss.
Leseberechtigungen (4) für ein Verzeichnis bedeuten, dass alle Dateien und Verzeichnisse mit ihren Metadaten in einem Verzeichnis erfasst werden können. Schreibberechtigungen (2) geben die Berechtigung zum Ändern des Inhalts des Verzeichnisses. Das Hinzufügen und Entfernen von Dateien, das Ändern von Berechtigungen usw. Die Ausführungsberechtigung (1) bedeutet, dass Sie das Recht haben, in dieses Verzeichnis zu wechseln. Ohne Letzteres ist es unmöglich, tiefer in das Verzeichnis einzudringen. Der Webserver benötigt Lese-, Schreib- und Ausführungsberechtigungen, wenn der Inhalt einer Datei geändert werden soll. Dafür braucht die Gruppe die Ziffer 7.
Die zweite Aussage betrifft die Frage des OP:
Das Lesen und Schreiben eines Dokuments ist erforderlich, die Ausführung der Datei ist jedoch nicht erforderlich. Die 7 wird dem Eigentümer der Dateien gegeben, die 6 der Gruppe. Der Webserver muss nicht über die Berechtigung verfügen, die Datei auszuführen, um ihren Inhalt zu ändern. Diese Schreibberechtigungen sollten nur für Dateien in diesem Verzeichnis erteilt werden.
Alle anderen Benutzer sollten keine Erlaubnis 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/
quelle
Das Sammeln von Informationen über diesen Link Stackoverflow-Image Save funktioniert nicht mit chmod 777 und von den Benutzern azerafati und Loek Bergman
Wenn Sie unter der Datei / etc / apache / envvars nachsehen, sehen Sie Folgendes:
Apache wird unter dem Benutzernamen 'www-data' ausgeführt.
'0755' bedeutet, dass der Dateibesitzer lesen / schreiben / ausführen kann, aber Gruppen- und andere Benutzer nicht schreiben können. CD in Ihrem Terminal in den Ordner, der Ihren Ordner "images" enthält. Geben Sie dann Folgendes ein:
Sie müssen zuerst die Berechtigungen ändern, bevor Sie den Eigentümer wechseln. Geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden. Dadurch wird "www-data" Eigentümer des Bilderordners.
Ihr Upload sollte jetzt funktionieren.
quelle
Für alle, die Ubuntu verwenden und diesen Fehler beim lokalen Laden der Seite, jedoch nicht bei einem Webhosting-Dienst, erhalten,
Ich habe dies nur behoben, indem ich nautilus (
sudo nautilus
) geöffnet und mit der rechten Maustaste auf die Datei geklickt habe, die Sie öffnen möchten. Klicken Sie auf Eigenschaften> Einstellungen> und geben Sie "Alle anderen" Lese- und Schreibzugriff.quelle
hatte das gleiche Problem; Mein Problem war, dass Selinux auf Durchsetzung gesetzt war.
Ich bekam immer wieder den Fehler "Stream konnte nicht geöffnet werden: Berechtigung verweigert", auch nachdem ich auf 777 geändert und sichergestellt hatte, dass alle übergeordneten Ordner Ausführungsberechtigungen für den Apache-Benutzer hatten. Es stellte sich heraus, dass mein Problem darin bestand, dass Selinux auf Durchsetzung gesetzt war (ich bin auf centos7). Dies ist eine Devbox, also habe ich sie deaktiviert.
quelle
Dies kann mit den folgenden Schritten behoben werden:
Ich hoffe es hilft
quelle
Wenn Sie von git vom lokalen zum Server ziehen, müssen Sie den Cache manchmal aufgrund der Ansichtsdateien leeren, die mit ihm / oder anderen zwischengespeicherten Dateien hochgeladen werden.
Manchmal ist es vielleicht nur ein Trick, wenn Ihre Anwendung vor dem Git Pull funktioniert hat
quelle
das könnte helfen. Es hat bei mir funktioniert. versuchen Sie es im Terminal
setenforce 0
quelle
Es gibt zwei Möglichkeiten, um diese Probleme zu beheben:
1. Verwenden Sie
chmod 777 path-to-your-directory
.Wenn es nicht funktioniert,
2. geben Sie einfach den vollständigen Pfad Ihrer Datei an
query.txt
.quelle
Hier die Lösung. So kopieren Sie ein Bild von einer URL. diese URL:
http://url/img.jpg
Erstellen Sie den gewünschten Pfad und beenden Sie den Namen mit
.jpg
quelle
Achten Sie außerdem, wie
file_put_contents man page
in erwähntphp.net
, auf Namensprobleme.funktioniert möglicherweise nicht (obwohl es in der Syntax korrekt ist), aber
funktioniert. Ich habe dies auf verschiedenen PHP-installierten Servern erlebt.
quelle
$dir."/file.txt"
ist"$dir/file.txt"
in allen Fällen funktional äquivalent zu , vorausgesetzt, es$dir
handelt sich um eine Zeichenfolge. Darüber hinaus ist dieses Verhalten nicht auf php.net dokumentiert, wie Kivanc behauptet.