nginx, php-cgi und „Keine Eingabedatei angegeben.“

nginx, php-cgi und „Keine Eingabedatei angegeben.“

Ich versuche, Nginx dazu zu bringen, gut mit PHP-CGI zusammenzuarbeiten, aber es funktioniert nicht ganz so, wie ich es gerne hätte. Ich verwende einige festgelegte Variablen, um dynamische Hostnamen zuzulassen – im Grunde alles.lokal. Ich weiß, dass das funktioniert, weil ich ordnungsgemäß auf statische Dateien zugreifen kann, PHP-Dateien jedoch nicht. Ich erhalte den Standardfehler „Keine Eingabedatei angegeben.“, der normalerweise auftritt, wenn die Datei nicht existiert, aber sie existiert definitiv und der Pfad ist korrekt, weil ich auf die statischen Dateien im selben Pfad zugreifen kann. Es könnte möglicherweise an den Berechtigungen liegen, aber ich bin mir nicht sicher, wie das ein Problem sein könnte. Ich führe dies unter Windows unter meinem eigenen Benutzerkonto aus, daher denke ich, dass es die Berechtigung haben sollte, es sei denn, PHP-CGI läuft unter einem anderen Benutzer, ohne dass ich es ihm sage. >.>

Hier ist meine Konfiguration;

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
 gzip  on;

 server {
  # Listen for HTTP
  listen 80;

  # Match to local host names.
  server_name  *.local;

  # We need to store a "cleaned" host.
  set $no_www $host;
  set $no_local $host;

  # Strip out www.
  if ($host ~* www\.(.*)) {
   set $no_www $1;
   rewrite ^(.*)$ $scheme://$no_www$1 permanent;
  }

  # Strip local for directory names.
  if ($no_www ~* (.*)\.local) {
   set $no_local $1;
  }

  # Define default path handler.
  location / {
   root   ../Users/Stephen/Documents/Work/$no_local.com/hosts/main/docs;
   index  index.php index.html index.htm;

   # Route non-existent paths through Kohana system router.
   try_files $uri $uri/ /index.php?kohana_uri=$request_uri;
  }

  # pass PHP scripts to FastCGI server listening on 127.0.0.1:9000
  location ~ \.php$ {
   root   ../Users/Stephen/Documents/Work/$no_local.com/hosts/main/docs;
   fastcgi_pass   127.0.0.1:9000;
   fastcgi_index  index.php;
   include        fastcgi.conf;
  }

  # Prevent access to system files.
  location ~ /\. {
   return 404;
  }
  location ~* ^/(modules|application|system) {
   return 404;
  }
 }
}

Antwort1

Keine Sorge, ich habe es herausgefunden.

Die Windows-Version von nginx hängt den Stammpfad an den ausführbaren Pfad an. Wenn sich die Datei also unter C:\nginx befindet und Sie Ihre Dateien unter C:\www speichern möchten, müssen Sie für den Stammpfad ../www eingeben. Nginx übergibt seinen seltsam transformierten Pfad an PHP, aber PHP versteht ihn nicht, also habe ich es so angepasst, dass stattdessen ein absoluter Pfad verwendet wird.

verwandte Informationen