2013-08-08 7 views
8

Ich habe Dateistruktur auf EC2 wie: aber mit einigen Dateireferenzierungsproblem konfrontiert.Was bedeutet "(include_path = '.:/Usr/share/pear:/usr/share/php')"?

index.php 
-db 
    -config.php 
-cron 
    -cron1.php 

Ich habe versucht, Datei Referenzierung als:

`require_once (dirname(__FILE__).'/db/config.php');` 
`require_once (($_SERVER['DOCUMENT_ROOT']).'/db/config.php');` 

aber cron nicht run.it gibt Fehler in Mail als

`PHP Warning: require_once(/db/config.php): failed to open stream: No such file or directory in /var/www/html/cron/cron1.php on line 3 

Warning: require_once(/db/config.php): failed to open stream: No such file or directory in /var/www/html/cron/cron1.php on line 3 

PHP Fatal error: require_once(): Failed opening required '/db/config.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/cron/cron1.php on line 3 

Fatal error: require_once(): Failed opening required '/db/config.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/cron/cron1.php on line 3` 
+0

'require_once' in welcher PHP-Seite? Ist es in 'index.php'? – som

Antwort

0

Das ist nur die Verzeichnisse, die Sie zeigt, wo PHP war suche nach deiner Akte. Stellen Sie sicher, dass cron1.php existiert, wo Sie denken, dass es tut. Und stellen Sie sicher, dass Sie wissen, wo dirname(__FILE__) und $_SERVER['DOCUMENT_ROOT'] zeigen, wo Sie erwarten würden.

Dieser Wert kann in Ihrer php.ini-Datei angepasst werden.

+0

Ja, ich kann von der URL aus darauf zugreifen und der angegebene Pfad ist korrekt. –

+0

aber können Sie mir sagen, was es bedeutet "(include_path = '.:/Usr/share/Birne:/usr/share/php')" –

+0

gibt mir '/ var/www/html' –

7

Wenn Sie die PHP-Konstante PATH_SEPARATOR betrachten, werden Sie sehen, dass es ":" für Sie ist.

Wenn Sie Ihre Zeichenfolge auseinander brechen ":./Usr/share/Birne:/usr/share/php" das Zeichen verwenden, werden Sie 3 Teile

  • bekommen. (dies bedeutet, das aktuelle Verzeichnis Ihr Code in ist)
  • /usr/share/Birne
  • /usr/share/ph

Alle Versuche umfassen()/require() Dinge, wird Schau in diese Verzeichnisse in dieser Reihenfolge.

Es wird Ihnen zeigen, dass in der Fehlermeldung Sie wissen zu lassen, wo es die Datei nicht finden können Sie()

Für Ihr erstes erfordern zu erfordern versuchen, wenn das von Ihrem index.php enthalten wird , dann müssen Sie nicht das dir Sachen brauchen, gerade tun:

require_once ('db/config.php'); 
+0

danke hat für mich funktioniert :) –

4

Lösung für das Problem

wie von Uberfuzzy [eigentliche Ursache des Problems] erwähnt

Wenn man sich die PHP-Konstante [PATH_SEPARATOR] aussehen [1] Du wirst sehen, dass es für dich ":" ist.

Wenn Sie Ihre Zeichenfolge auseinander brechen ".:/Usr/share/Birne:./Usr/share/„php das Zeichen verwenden, werden Sie 3 Teile

  • erhalten (dies das aktuelle Verzeichnis bedeutet, dass Ihr Code in ist)
  • /usr/share/Birne
  • /usr/share/ph

Alle Versuche umfassen()/require() Dinge, in diesen Verzeichnissen aussehen wird, in dieser Reihenfolge.

Es zeigt Ihnen, dass in das Fehler-Chaos Alter, um Sie wissen zu lassen, wo die Datei NICHT gefunden werden konnte, die Sie benötigen()

Das war die Ursache für Fehler.

Jetzt Lösung kommen

  1. Schritt 1: Sie php.ini finden Befehl php --ini (in meinem Fall: /etc/php5/cli/php.ini)
  2. Schritt 2: include_path in vi finden mit esc drücken Sie dann /include_path dann enter
  3. Schritt 3: uncomment dieser Linie, wenn kommentiert und geben Sie Ihre Server-Verzeichnis, sollte Ihr Pfad so aussehen include_path = ".:/usr/share/php:/var/www/<directory>/"
  4. Schritt 4: Starten Sie Apache sudo service apache2 restart

Das ist es. Hoffe es hilft.

1

Ich hatte ein ähnliches Problem. Nur um jemanden mit dem gleichen Problem zu helfen:

Mein Fehler war das Benutzerdateiattribut für die Dateien in/var/www. Nach dem Zurücksetzen auf den Benutzer "www-data" war das Problem verschwunden.

0

Ich hatte den gleichen Fehler beim Einbinden der Datei aus dem Stamm meines Projekts in codeigniter. Ich habe dies in common.php meines Projekts verwendet.

<?php include_once base_url().'csrf-magic-master/csrf-magic.php'; ?> 

habe ich es zu

<?php include_once ('csrf-magic-master/csrf-magic.php'); ?> 

Arbeiten jetzt in Ordnung.