2011-10-11 38 views
9

Tôi đã phát triển một số mã sử dụng các lớp NuSoap cho PHP để gọi một dịch vụ web xà phòng. Tôi đang sử dụng NuSoap chứ không phải là các lớp gốc PHP 5 chủ yếu bởi vì tôi không muốn thêm một điều kiện tiên quyết bổ sung khi mã này được cài đặt trên một máy chủ web được chia sẻ. Mã hoạt động tốt trên máy của tôi:Sử dụng NuSoap hoạt động trên máy cục bộ nhưng không phải máy chủ

require DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php'; 
$client = new nusoap_client('http://www.nbnws.net/ws_3_5/GatewayWebService?wsdl', true); 
$query1 = '<TaxonReportingCategoryListRequest xmlns="http://www.nbnws.net/TaxonReportingCategory" registrationKey="'.$key.'"></TaxonReportingCategoryListRequest>'; 
$response = $client->call('GetTaxonReportingCategoryList', $query1); 

Khi tôi đặt máy chủ này lên máy chủ ảo thay vì chạy cục bộ, dòng cuối cùng bị treo trong khoảng 10 giây sau đó PHP bị loại ra. Không có ngoại lệ được nêu ra và không có lỗi PHP (tôi đã thử bằng cách sử dụng try..catch và set_error_handler chỉ để chắc chắn). Phản ứng đầu tiên của tôi là đây có thể là tường lửa đang chạy trên máy chủ chặn các yêu cầu gửi đi, nhưng tôi đang sử dụng thành công cUrl ở nơi khác để yêu cầu và tôi chắc chắn không có tường lửa nào đang chạy tại đây. Gọi $ client-> use_curl không tạo ra bất kỳ sự khác biệt nào với cuộc gọi NuSoap, nó vẫn không hoạt động.

Bất kỳ ý tưởng nào tại sao điều này có thể xảy ra sẽ được nhiều người đánh giá cao.

+0

Nhiều khả năng cài đặt memory_limit khác nhau trên máy chủ cục bộ và máy chủ và máy chủ xả bộ nhớ. –

+0

Cảm ơn bạn đã đề xuất. Tôi đã tăng giới hạn bộ nhớ lên 96M, nhưng điều này chỉ làm việc nếu tôi cũng được gọi là $ client-> setGlobalDebugLevel (0). 64M là không đủ ngay cả khi gỡ lỗi được tắt. Tôi vừa kiểm tra và dịch vụ web đang phản hồi với ~ 2MB dữ liệu. Có vẻ kỳ quặc là việc sử dụng bộ nhớ quá cao trong trường hợp này. – Johnvb

+0

Tôi cũng đang gặp phải sự cố tương tự. Tôi có một phản ứng dữ liệu 5mb từ một dịch vụ web mà nuSOAP muốn chiếm hơn 256MB bộ nhớ để xử lý. – Travis

Trả lời

0

Bạn có thể chắc chắn rằng www-data có (được phép) truy cập vào

DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php' ? 

Hoặc bạn có thể thử để sao chép nusoap vào thư mục khác?

Hoặc bạn có thể thử chạy nó từ dấu nhắc lệnh dưới dạng người dùng root không?

Nhân tiện, bạn đang gặp phải loại lỗi/cảnh báo nào?

2

Nếu bạn không có ý tưởng khắc phục sự cố và giả sử bạn đang chạy trên Linux, bạn có thể xem các cuộc gọi hệ thống bằng cách sử dụng strace. Các cuộc gọi có thể trông khá khó hiểu, nhưng đôi khi bạn có thể nhìn thấy hệ thống gọi nó treo trên, sau đó Google gọi để biết thêm thông tin.

strace -p processid 

Hoặc nếu bạn muốn theo dõi kịch bản của bạn từ khi bắt đầu thực hiện để kết thúc và đổ vào một tập tin đầu ra:

strace -o trace.txt myscript.php 

Here is a good strace tutorial.

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