2013-04-12 36 views
17

Vấn đề của tôi rất phổ biến. Tôi đã đọc gần như tất cả các chủ đề về stackoverflow về vấn đề này, nhưng vẫn không thể làm việc. Mã của tôi là:Lỗi WSDL: SOAP-ERROR: Phân tích cú pháp WSDL: Không thể tải từ

ini_set("soap.wsdl_cache", "0"); 
ini_set("soap.wsdl_cache_enabled", "0"); 
$proxy = new SoapClient('http://Myhostname/api/soap?wsdl'); 

Tôi có lỗi này:

Error WSDL: SOAP-ERROR: Parsing WSDL: Couldn't load from 
'http://Myhostname/api/soap?wsdl' : failed to load external entity 
"http://Myhostname/api/soap?wsdl" 

Trong trình duyệt URL

http://Myhostname/api/soap?wsdl 

hoạt động tuyệt vời (trả về một phản ứng xml)

tôi cố gắng này mã để xem liệu PHP có thể truy cập URL này không:

if (file_get_contents('http://Myhostname/api/soap?wsdl') === false) { 
    echo "ERROR: file_get_contents <br/>"; 
} 

Nó hiển thị cho tôi lỗi của tôi "L ERI: file_get_contents", vì vậy nó không hoạt động. Trên diễn đàn tôi thấy rằng để giải quyết vấn đề này tôi phải thêm tên máy chủ vào hệ điều hành "host" tập tin. Vì vậy, tôi đã làm nó. Trong tệp lưu trữ của tôi, tôi đã thêm dòng này 127.0.0.1 Myhostname

Nhưng nó vẫn không hoạt động. Sau đó, tôi đã thay đổi URL trong mã của mình thành

http://localhost/Myhostname/api/soap?wsdl 

nhưng không hoạt động.

Tôi đã thử một giải pháp khác mà tôi tìm thấy trên internet. Đối với một số người nó đã làm việc. Trong URL của tôi, tôi đã thay đổi '?' ký tự '.'. Vì vậy, URL mới của tôi đã trở thành

http://localhost/Myhostname/api/soap.wsdl 

nhưng nó không hoạt động.

Tôi đã thấy official SOAP doc! Và cố gắng tạo đối tượng SoapClient theo cách khác (với các tùy chọn như 'proxy_host' và 'proxy_port'). Nhưng điều này không giúp tôi.

Đây là ngày thứ hai tôi cố giải quyết vấn đề này, nhưng tôi không thể. Tôi đang thực tập, tôi không có nhiều kinh nghiệm, vì vậy có lẽ tôi đã không thử các giải pháp mà tôi đã tìm thấy một cách chính xác. Có lẽ ai đó có thể giúp đỡ. Tôi sẽ rất hài lòng.

+0

Tôi nghĩ rằng trong một số trường hợp, bạn không thể file_get_contents() vào tên máy chủ * từ * chính máy chủ đằng sau tên máy chủ đó. Bạn đã thử chạy mã này từ môi trường cục bộ chưa? – kalenjordan

+0

Bạn đã thử 'http: //127.0.0.1/Myhostname/api/soap? Wsdl'? –

+0

Thực ra đó là một số loại vấn đề cấu hình máy chủ. Người giám sát của tôi đã sửa nó. Cảm ơn các bạn. – Kalitine

Trả lời

1

Tôi có vấn đề tương tự, tôi giải quyết nó bỏ ghi chú -MultiViews từ tệp .htaccess và sau đó từ cấu hình Apache của trang web địa phương.

cấu hình Apache làm việc của tôi là:

<Directory /var/www/> 
     Options Indexes FollowSymLinks -MultiViews 
     AllowOverride All 
     Order allow,deny 
     allow from all 
</Directory> 

Bạn có thể thử cũng url:

http://localhost/Myhostname/api.php?type=soap&wsdl 

nếu bạn sử dụng phiên bản cộng đồng.

3

Vài bước để kiểm tra

Có ping đến Myhostname. Nó sẽ cung cấp cho ip.Sử dụng ip thay vào đó và thấy

Kiểm tra xem các dịch vụ được kích hoạt S0AP, php_openssl, openssl, curl

Hy vọng bạn sẽ nhận được nó :)

+0

Điều đó đã làm cho tôi! – Olaf

1

thay vì $ Proxy = new SoapClient ('http://Myhostname/api/soap?wsdl');
thử $ proxy = new SoapClient (WSDLFILENAME);
trong đó WSDLFILENAME là tên hệ điều hành của tệp WSDL. Điều này có lợi ích bổ sung là làm cho một vòng máy khách-máy chủ khứ hồi ít hơn.

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