2013-08-08 23 views
8

Mam strukturę plików na EC2 jak: ale napotykając na problem z odwołaniem do pliku.co to znaczy "(include_path = '.:/Usr/share/pear:/usr/share/php") "?

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

Próbowałem plik przedstawieniu jako:

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

ale cron nie run.it daje błąd w poczcie jako

`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' w którym strona php? Czy to jest w 'index.php'? – som

Odpowiedz

0

To tylko katalogów pokazując gdzie była PHP szukam twojego pliku. Upewnij się, że cron1.php istnieje tam, gdzie myślisz, że tak. Upewnij się, że wiesz, gdzie dirname(__FILE__) i $_SERVER['DOCUMENT_ROOT'] wskazują miejsca, w których możesz się spodziewać.

Wartość tę można zmienić w pliku php.ini.

+0

Tak, mogę uzyskać do niego dostęp z adresu URL i podana ścieżka jest poprawna. –

+0

ale możesz mi powiedzieć, co to znaczy "(include_path = '.:/Usr/share/pear:/usr/share/php')" –

+0

daje mi "/ var/www/html ' –

7

Jeśli spojrzysz na stałą PHP PATH_SEPARATOR, zobaczysz dla siebie ":".

Jeśli rozpadają swój ciąg ":/usr/share/pear:/usr/share/php" za ten znak, dostaniesz 3 części

  • . (oznacza to katalog bieżący kod jest w)
  • /usr/share/pear
  • /usr/share/ph

Wszelkie próby include()/require() rzeczy, woli spójrz w te katalogi w tej kolejności.

To pokazuje, że w komunikacie o błędzie poinformować, gdzie może nie znaleźć plik, który staraliśmy się require()

na pierwszy wymagać, jeżeli jest włączone z index.php , wtedy nie trzeba rzeczy dir, tylko zrobić:

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

dzięki pracowali dla mnie :) –

4

Rozwiązanie problemu

jak wspomniano przez Uberfuzzy [prawdziwą przyczyną problemu]

Jeśli spojrzeć na PHP stałej [PATH_SEPARATOR] [1] , zobaczysz, że jest dla ciebie ":".

Jeśli rozdzielisz ciąg znaków ".:/Usr/share/pear.:/Usr/share/php”za ten znak, dostaniesz 3 części

  • (oznacza to katalog bieżący kod jest w)
  • /usr/akcji/gruszka
  • /usr/share/ph

Wszelkie próby include()/require() rzeczy będą wyglądać w tych katalogach, w tej kolejności.

to pokazuje, że w bałagan błędu wiek, aby poinformować, gdzie NIE może znaleźć pliku, którego próbujesz zażądać()

To była przyczyna błędu.

Teraz zbliża się do rozwiązania

  1. Krok 1: Znajdź plik php.ini ty poleceniem php --ini (w moim przypadku: /etc/php5/cli/php.ini)
  2. Krok 2: znaleźć include_path w vi używając esc, a następnie naciśnij /include_path, a następnie enter
  3. Krok 3: Odkomentuj tej linii, jeśli skomentował oraz swój katalog na serwerze, ścieżka powinna wyglądać następująco include_path = ".:/usr/share/php:/var/www/<directory>/"
  4. Krok 4: Restart apache sudo service apache2 restart

to jest to. Mam nadzieję, że to pomaga.

1

Miałem podobny problem. Aby pomóc komuś z tym samym problemem:

Mój błąd był atrybut pliku użytkownika dla plików w/var/www. Po zmianie ich z powrotem na użytkownika "www-data", problem zniknął.

0

Miałem ten sam błąd podczas dołączania pliku z katalogu głównego mojego projektu w codeigniter. Używałem tego w common.php mojego projektu.

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

i zmienił je na

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

teraz działa poprawnie.