2011-08-10 25 views
5

Điều này có vẻ giống như một nhiệm vụ đơn giản và phổ biến, nhưng chúng ta không thể lấy nó để làm việc:Relative PHP Đường file_get_contents

Chúng tôi đã có hai người trong chúng ta làm việc trên một dự án và cả hai đều có thiết lập máy của chúng tôi như các máy chủ địa phương, với một môi trường sản xuất cuối cùng.

Trong phần đầu của tất cả các dự án của chúng tôi, chúng tôi đã có PHP như sau:

$feed = "/lib/php/backend/gateway.php?action=history"; 
$json = file_get_contents($feed, true); 

Chỉ cách để có được nó để làm việc là để thiết lập nó như là một địa chỉ URL đầy đủ như http://dev01.domain.com/lib/php/backend/gateway.php?action=history hoặc bằng cách đặt nó lên như localhost như thế này:

$feed = "http://localhost/lib/php/backend/gateway.php?action=history"; 
$json = file_get_contents($feed, true); 

sau đó rõ ràng là hoạt động trên hộp địa phương của chúng tôi và có lẽ sẽ làm việc trong sản xuất là tốt, nhưng có một cách để sử dụng đường dẫn tương đối để có một chút bụi?

+1

Tôi giả sử bạn có nghĩa là "gốc tương đối" đường dẫn. – zzzzBov

Trả lời

10
$feed = 'http://' . $_SERVER['HTTP_HOST'] . '/lib/php/backend/gateway.php?action=history'; 

Khi bạn đã cố gắng này -

$feed = "/lib/php/backend/gateway.php?action=history"; 
$json = file_get_contents($feed, true); 

Nhận ra rằng bạn đang yêu cầu PHP để mở một tập tin tại mà đường dẫn trên máy tính của bạn. Các tệp không có chuỗi truy vấn và kết quả sẽ là mã PHP trong tệp đó, không phải là kết quả của việc thực thi nó.

Khi bạn yêu cầu http://localhost/...., bạn đang yêu cầu PHP mở một URL , thực hiện yêu cầu HTTP tới máy chủ web thực thi mã và trả về kết quả của mã đó.

Rất khác.

Trong thực tế, tại sao bạn không kết hợp mã trong gateway.php vào tệp hiện tại của bạn? Không có lý do gì để yêu cầu HTTP thực thi mã trên máy chủ của riêng bạn.

2

chuyển đổi /lib/php/backend/gateway.php?action=history thành hàm/lớp phương pháp

ví dụ:

function gateway($action) 
{ 
    // existing code 
} 
$json = gateway('history'); 

thêm nhiều, không có-cần phải đẻ trứng một quá trình HTTP
(đó là file_get_contents trong trường hợp này)

Các vấn đề liên quan