3 Stimmen

fwrite() nicht erlaubt, aber laut phpinfo() sollte es erlaubt sein

Bei einem Skript, das ich auszuführen versuche, erhalte ich folgende Meldung:

Notice: fwrite() [function.fwrite]: send of 7 bytes failed with errno=1 Operation not permitted in /home/thrawn/public_html/sorcero.us/MinecraftQuery.class.php on line 165

Wenn ich jedoch phpinfo() überprüfe, ist allow_url_fopen eingeschaltet und die Socket-Unterstützung ist aktiviert. Ich habe keinen Hinweis darauf gefunden, was die Ursache dafür sein könnte.

Zur Klarstellung: Ich habe dieses Skript nicht geschrieben. Meine PHP-Kenntnisse beschränken sich auf die Grundlagen, aber ich weiß genug, um zu folgern, dass es funktionieren sollte, da phpinfo() sagt, dass die richtigen Dinge erlaubt sind. Das betreffende Skript befindet sich hier: https://github.com/xPaw/PHP-Minecraft-Query/blob/master/MinecraftQuery.class.php

4voto

Arjan Punkte 9518

fwrite() schreibt an $this->socket und ist in private function WriteData() . Unter public function Connect() ist eine Linie

$this->Socket = @FSockOpen( 'udp://' . $Ip, (int)$Port, $ErrNo, $ErrStr, $Timeout );

Dies ist die einzige Zeile in dieser Datei, in der $this->socket geschrieben wird.

Außerdem gibt es eine Warnmeldung in der Manpage für fsockopen()

UDP-Sockets scheinen manchmal geöffnet zu sein, ohne dass auch wenn der entfernte Host nicht erreichbar ist. Der Fehler wird wenn Sie Daten aus dem Socket lesen oder in ihn schreiben. Der Grund Grund dafür ist, dass UDP ein "verbindungsloses" Protokoll ist, was bedeutet dass das Betriebssystem keine Socket aufzubauen, bis es tatsächlich Daten senden oder empfangen muss.

Dies ist wahrscheinlich der Fall. Der Socket wird erstellt, obwohl die IP-Adresse oder der Port nicht erreichbar ist. Dies führt zu einer Fehlermeldung, wenn versucht wird, Daten zu schreiben.

Um dieses Problem zu lösen, müssen Sie also zumindest diese Dinge tun:

  • Stellen Sie sicher, dass die IP-Adresse und der Port korrekt sind.
  • Vergewissern Sie sich, dass der Server in Betrieb ist und funktioniert.
  • Vergewissern Sie sich, dass die IP-Adresse und der Port erreichbar sind (nicht durch Firewalls blockiert).

Ich weiß nicht, wie die richtigen Einstellungen aussehen sollten. Wenn Sie die Software auf einem externen Server installiert haben, versuchen Sie es auch auf Ihrem lokalen Computer, damit Sie eine Möglichkeit haben, die IP-Adresse und die Porteinstellungen zu überprüfen.

3voto

Jerry Hopper Punkte 21

Wenn Sie Ihre PHP-Konfiguration überprüft haben und das Problem weiterhin besteht, überprüfen Sie Ihr Firewall-Protokoll.

Wie Ignacio Vazquez-Abrams feststellte, handelt es sich um einen Fehler des Betriebssystems.

In meinem Fall blockierte das CSF ausgehende Verbindungen.

-3voto

Learner Punkte 716

Scheint ein Berechtigungsfehler zu sein,

Versuchen Sie es,

 chmod -R folder_to_be_file_written

Dann führen Sie das php-Skript aus

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X