2013-08-08 29 views
8

Tôi có cấu trúc tệp trên EC2 như: nhưng phải đối mặt với một số vấn đề tham chiếu tệp.nghĩa là gì "(include_path = '.:/Usr/share/pear:/usr/share/php')"?

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

Tôi đã cố gắng tập tin tham khảo như:

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

nhưng cron không run.it cho lỗi trong thư như

`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' trong trang php nào? Có phải nó trong 'index.php'? – som

Trả lời

0

Thats chỉ các thư mục hiển thị cho bạn nơi PHP là tìm kiếm tệp của bạn. Hãy chắc chắn rằng bạn tồn tại cron1.php. Và đảm bảo bạn biết vị trí mà bạn mong đợi ở đâu là số dirname(__FILE__)$_SERVER['DOCUMENT_ROOT'].

Giá trị này có thể được điều chỉnh trong tệp php.ini của bạn.

+0

vâng tôi có thể truy cập nó từ url và đường dẫn nhất định là chính xác. –

+0

nhưng bạn có thể cho tôi biết ý nghĩa của nó "(include_path = '.:/Usr/share/lê:/usr/share/php')" –

+0

nó cung cấp cho tôi '/ var/www/html' –

7

Nếu bạn nhìn vào hằng số PHP PATH_SEPARATOR, bạn sẽ thấy nó là ":" cho bạn.

Nếu bạn phá vỡ chuỗi của bạn ":./Usr/share/lê:/usr/share/php" sử dụng nhân vật đó, bạn sẽ nhận được 3 phần

  • . (điều này có nghĩa là thư mục hiện mã của bạn là in)
  • /usr/share/lê
  • /usr/share/ph

Bất kỳ nỗ lực để bao gồm()/require() điều gì đó, sẽ tìm trong những thư mục này, theo thứ tự này.

Nó được hiển thị cho bạn rằng trong các thông báo lỗi để cho bạn biết nó ở đâu không thể tìm thấy tập tin bạn đang cố gắng để yêu cầu()

Đối với lần đầu tiên của bạn yêu cầu, nếu điều đó đã được đưa vào từ các index.php của bạn , sau đó bạn không cần những thứ dir, chỉ cần làm:

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

cảm ơn đã làm việc cho tôi :) –

4

Giải pháp cho vấn đề

như đã đề cập bởi Uberfuzzy [nguyên nhân thực sự của vấn đề]

Nếu bạn nhìn vào PHP liên tục [PATH_SEPARATOR] [1] , bạn sẽ thấy nó là ":" cho bạn.

Nếu bạn chia nhỏ chuỗi của mình ".:/Usr/share/lê:./Usr/share/php" sử dụng nhân vật đó, bạn sẽ nhận được 3 phần

  • (điều này có nghĩa là thư mục hiện mã của bạn là in)
  • /usr/share/lê
  • /usr/share/ph

Bất kỳ nỗ lực để bao gồm()/require() điều gì đó, sẽ tìm trong những thư mục, theo thứ tự này.

Nó được hiển thị cho bạn rằng trong lỗi lầm tuổi để cho bạn biết nơi KHÔNG thể tìm thấy tệp bạn đang cố yêu cầu()

Đó là nguyên nhân gây ra lỗi.

Bây giờ đến giải pháp

  1. Bước 1: Tìm bạn php.ini tập tin sử dụng lệnh php --ini (trong trường hợp của tôi: /etc/php5/cli/php.ini)
  2. Bước 2: tìm include_path trong vi sử dụng esc rồi nhấn /include_path rồi enter
  3. Bước 3: bỏ ghi chú dòng rằng nếu nhận xét và bao gồm thư mục máy chủ của bạn, con đường của bạn sẽ trông như thế này include_path = ".:/usr/share/php:/var/www/<directory>/"
  4. Bước 4: Khởi động lại apache sudo service apache2 restart

Đây là nó. Hy vọng điều đó sẽ hữu ích.

1

Tôi gặp sự cố tương tự. Chỉ để giúp đỡ ai đó có cùng vấn đề:

Lỗi của tôi là thuộc tính tệp người dùng cho các tệp trong/var/www. Sau khi thay đổi chúng trở lại người dùng "www-data", vấn đề đã biến mất.

0

Tôi đã gặp lỗi tương tự trong khi bao gồm tệp từ gốc của dự án của tôi theo số codeigniter. Tôi đang sử dụng số này trong common.php của dự án của mình.

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

tôi thay đổi nó để

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

Làm việc tốt bây giờ.