2009-02-12 35 views
12

Tôi vừa chuyển một dự án từ máy chủ cục bộ sang máy chủ từ xa của mình và nhận thấy rằng một số tập lệnh của tôi đã ngừng hoạt động. Quan trọng nhất là quan điểm dựa trên file_get_contents() để tìm nạp các giá trị JSON từ tập lệnh khác.

PHP Phiên bản 5.2.4
allow_url_fopen là ON

Cảnh báo: file_get_contents()[function.file-get-contents]: php_network_getaddresses: getaddrinfo thất bại: Tên hoặc dịch vụ không được biết đến trong /var/www/html/2009/functions/functions.products.php trên line 5

Cảnh báo: file_get_contents(http://data.example.com/new-data.php) [function.file-get-contents]: thất bại để mở luồng: Success in /var/www/html/2009/functions/functions.products.php trên line 5

Các kịch bản đang được chạy từ: http://www.example.com
Vị trí chuyển vào chức năng là http://data.example.com/new-data.php

Note: tên miền tương tự, nhưng hai máy chủ khác nhau.

function getData() { 
    $location = "http://data.mysite.com/new-data.php"; 
    $contents = file_get_contents($location); 
    $jsonVars = json_decode($contents); 
    return $jsonVars 
} 
+0

Phải có lỗi trong nhật ký lỗi của bạn ở đâu đó hoặc nội dung nào đó được trả lại. Cần thêm thông tin. –

+0

Yup. Lỗi sẽ tốt đẹp. –

+0

Nếu new-data.php nằm trên cùng một máy chủ như tập lệnh gọi nó, tại sao bạn không chuyển đường dẫn tới nó thay vì URL? –

Trả lời

18

Tên hoặc dịch vụ không được biết

DNS là phá sản. Bạn có thể ping data.mysite.com từ một vỏ trên máy (giả sử bạn có một) không?

Hãy thử thay thế data.mysite.com bằng địa chỉ IP cố định ngay bây giờ.

+0

Bây giờ chúng ta đang đi đâu đó. Không thể tìm thấy nó. – Sampson

+0

Bạn có thể truy cập * mọi trang * theo tên từ máy chủ không? ví dụ. 'ping google.com'. Nếu không, có thể bạn đang thiếu một số thiết lập máy chủ tên trong /etc/resolv.conf. – bobince

+0

Đây là nó. Tôi chỉ phải thay thế URL bằng Địa chỉ IP. Cảm ơn. – Sampson

0

Vui lòng bao gồm thêm thông tin, $ chứa nội dung nào không? Hãy nhớ để làm json_decode ($ nội dung, đúng) nếu bạn muốn nó như là một mảng php nếu không nó là một stdClass được trả lại.

Có thể có sự cố khi giải quyết tên máy chủ không? data.mysite.com có ​​cùng máy với mysite.com không?

1

Xem/etc/hosts của bạn trên máy chủ từ xa. Nếu nó trống, bạn cần thêm '127.0.0.1 localhost' vào nó.

Trừ khi đó là một trong các loại VPS nơi giao diện vòng lặp truy cập vào máy bên ngoài; trên những thứ đó, bạn cần sử dụng số IP của VPS thay vì 127.0.0.1.

+0

Localhost (LH), Máy chủ lưu trữ mới (NH) và Nhà cung cấp dữ liệu (DP). Đó là ba máy của tôi có liên quan. LH có thể lấy dữ liệu từ DP, nhưng NH không thể. Bạn có nói rằng tôi cần phải kiểm tra/etc/hosts của NH hoặc DP? – Sampson

7

Ngoài ra bạn có thể thử curl:

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_URL, 'http://url.url'); 
$result = curl_exec($curl); 
curl_close($curl); 

Và bạn sẽ có được những gì bạn muốn trong $result.

1

Nếu bạn chắc chắn đó không phải là sự cố DNS, hãy thử khởi động lại Apache. Điều này giải quyết nó cho tôi sau 20 phút đầu gãi.

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