Lösung für „Keine Eingabedatei angegeben“ in nginx+php

Lösung für „Keine Eingabedatei angegeben“ in nginx+php

Heute ist in meiner lokalen Entwicklungsumgebung plötzlich der Fehler „Keine Eingabedatei angegeben“ aufgetreten. Ich habe meine Konfigurationsdateien, Konfigurationspfade und Berechtigungen wiederholt überprüft und festgestellt, dass es keine Probleme gab. Nach wiederholten Untersuchungen wurde das Problem schließlich gefunden. Das Problem und die Lösung werden wie folgt mitgeteilt:

Ursachenanalyse

Ich habe ein Open-Source-TP5-Projekt von GitHub heruntergeladen und meine lokale Website lief zuvor problemlos. Nach der Installation dieses Open-Source-Projekts stellte ich jedoch fest, dass auf andere lokale Websites nicht zugegriffen werden konnte. Bei Access ist der Fehler „Keine Eingabedatei angegeben“ aufgetreten. Ich habe auch im Internet nach Lösungen gesucht, aber keine davon hat funktioniert. Es scheint, dass dieser Fehler etwas seltsam ist.

Nach mehrmaligen Versuchen war das Problem nach einem Neustart des Computers behoben. Nach dem erneuten Ausführen des heruntergeladenen Open-Source-Projekts tp5 wurde jedoch bei anderen Websites der Fehler „Keine Eingabedatei angegeben“ angezeigt und nur diese eine Website lief ohne Probleme.

Darauf aufbauend wurde der Fehler in der Nginx-Konfigurationsdatei des Open-Source-Projektes lokalisiert. Werfen wir einen Blick auf die Konfigurationsdatei:

Server {
  hören Sie 80;
  Servername local.test.com;
  access_log /data/wwwlogs/local.test.com.log kombiniert;
  Fehlerprotokoll /data/wwwlogs/local.test.com_error.log Fehler;
  index.html index.htm index.php;
  Stammverzeichnis /Daten/php/test;

  Fügt den X-Powered-Host $hostname hinzu.
  fastcgi_hide_header X-Powered-By;

  wenn (!-e $request_filename) {
    schreibe ^/(.+?\.php)/?(.*)$ /$1/$2 zuletzt um;
    schreibe ^/(.*)$ /index.php/$1 zuletzt um;
  }

  Standort ~ \.php($|/){
    fastcgi_index index.php;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_params einschließen;
    setze $real_script_name $fastcgi_script_name;
    wenn ($real_script_name ~ "^(.+?\.php)(/.+)$") {
      setze $real_script_name $1;
    }
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param SCRIPT_NAME $echter_Skriptname;
    fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$realer_Skriptname;
    fastcgi_param PHP_VALUE open_basedir=$document_root:/tmp/:/proc/;
  }

  Standort ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    Zugriff_Abmeldung;
    Fehlerprotokoll aus;
    läuft in 30 Tagen ab;
  }

  Standort ~ .*\.(js|css)?$ {
    Zugriff_Abmeldung;
    Fehlerprotokoll aus;
    läuft nach 12 Stunden ab;
  }

In der obigen Konfiguration handelt es sich beim Rest um herkömmliche Konfigurationen. Weil ich CGI verwende. In den FastCGI-Parametern gibt es eine Zeile, die Ihnen möglicherweise aufgefallen ist.

fastcgi_param PHP_VALUE open_basedir=$document_root:/tmp/:/proc/;

Das ist es. Die Hauptfunktion dieses Satzes besteht darin, das bedienbare Verzeichnis von Fastcgi festzulegen, um Cross-Site-Verkehr zu verhindern, und open_basedir auf das Verzeichnis dieses Projekts und /tmp/ und /proc/ zu beschränken.

Problemlösung

Ich habe lediglich gesagt, dass es in der konfigurierten Fastcgi-Konfiguration eine zusätzliche Anweisung zum Verhindern von Cross-Site-Verwendung gibt. Dann beeinflusst dieser Satz tatsächlich die Parameter des gesamten Fastcgi. Da der Pfad meiner anderen Website ein Verzeichnis wie /data/php/xxx/ ist, aber nicht im Verzeichnis /data/php/test/ dieses Open Source-Projekts, kann Fastcgi nicht gefunden werden.
Fügen Sie also vor diesem Satz ein # hinzu, um ihn auszukommentieren oder zu löschen, und starten Sie das System bzw. nginx neu.

Empfehlungen zur Onlinebereitstellung

Sollten wir diesen Satz also verwenden oder nicht? Natürlich ist dies auch in einer Online-Umgebung möglich. Bei der Online-Projektbereitstellung sollten Sie Variablen wie $document_root in open_basedir nicht verwenden. Wenn sich auf einem Online-Server mehrere Projekte befinden, können alle Projekte in einem einheitlichen Verzeichnis abgelegt werden. Beispielsweise ist mein Online-Verzeichnis wwwroot, wo andere Websites abgelegt sind. Zum Beispiel /wwwroot/test1 /wwwroot/test2, ich kann es konfigurieren als

fastcgi_param PHP_VALUE open_basedir=/wwwroot/:/tmp/:/proc/;

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Analyse der Beispiele für automatisches Laden und autonome Objekterstellungsvorgänge des PHP-Frameworks CI (Codeigniter)
  • Lösung für das Problem „Keine Eingabedatei angegeben“ in PHP5.6+
  • PHP filtert die Funktion htmlspecialchars(), um vordefinierte Zeichen in HTML-Entitäten umzuwandeln. Nutzungsanalyse
  • Zusammenfassung zur Aktivierung der Oracle OCI8-Erweiterung für Plesk PHP7
  • Verwendung der PHP-Funktion htmlspecialchars() und Beispielerklärung
  • Erklärung zur Verwendung der PHP-Funktion htmlspecialchars_decode()
  • Beispielcode und Verwendung der PHP-Funktion htmlspecialchars()
  • Erläuterung zum Erlernen des PHP CI-Frameworks

<<:  Detailliertes Installationstutorial für die MySQL-Zip-Archivversion (5.7.19)

>>:  Detaillierter Installationsprozess und Konfiguration von mysql5.7.19 zip

Artikel empfehlen

So fügen Sie schnell 10 Millionen Datensätze in MySQL ein

Ich habe gehört, dass es eine Interviewfrage gibt...

Probleme mit Index und FROM_UNIXTIME in MySQL

Null, Hintergrund Ich habe diesen Donnerstag viel...

JavaScript-Ereigniserfassungs-Blubbern und Erfassungsdetails

Inhaltsverzeichnis 1. Ereignisablauf 1. Konzept 2...

Vollständige Schritte zum Erstellen eines Passwortgenerators mit Node.js

Inhaltsverzeichnis 1. Vorbereitung 2. Befehlszeil...

Prinzip und Anwendung der MySQL-Verbindungsabfrage

Überblick Eine der leistungsstärksten Funktionen ...

So aktivieren Sie Flash in Windows Server 2016

Ich habe vor Kurzem VMware Horizon bereitgestellt...

JavaScript verwendet setTimeout, um einen Countdown-Effekt zu erzielen

Um die Fähigkeit zum Schreiben von nativem JavaSc...

Detaillierte Einführung in CSS-Schrift-, Text- und Listeneigenschaften

1. Schrifteigenschaften Farbe, gibt die Farbe des...

So implementieren Sie eine steuerbare gepunktete Linie mit CSS

Vorwort Die Verwendung von CSS zum Generieren gep...

Der eigentliche Prozess der Implementierung des Zahlenrätsels im WeChat-Applet

Inhaltsverzeichnis Funktionseinführung Rendern 1....

Eine kurze Beschreibung der Beziehung zwischen k8s und Docker

In letzter Zeit verwendet das Projekt Kubernetes ...