Trong PHP, làm thế nào bạn có thể xóa bộ nhớ cache WSDL?


91

php_info()nơi lưu giữ bộ đệm WSDL ( /tmp), nhưng tôi không nhất thiết phải biết liệu xóa tất cả các tệp bắt đầu bằng WSDL có an toàn hay không.

Có, tôi sẽ có thể xóa mọi thứ khỏi đó /tmp, nhưng tôi không biết điều này có thể ảnh hưởng gì khác nếu tôi xóa bất kỳ tệp WSDL nào.

Câu trả lời:


200

Bạn có thể xóa các tệp bộ đệm WSDL một cách an toàn. Nếu bạn muốn ngăn bộ nhớ đệm trong tương lai, hãy sử dụng:

ini_set("soap.wsdl_cache_enabled", 0);

hoặc động:

$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );

31
Tôi tin rằng khi sử dụng SoapClient, thay vì mã hóa cứng là 0, bạn nên sử dụng hằng số WSDL_CACHE_NONE đã xác định. Xem php.net/manual/en/soapclient.soapclient.php
Dan Burton

Dù sao tôi có thể để cho bộ nhớ đệm không hoạt động như nó vốn có nhưng một số làm thế nào làm mất hiệu lực của tất cả bộ nhớ cache trong một thời gian? Chúng ta có thể làm những việc này một cách dễ dàng trong .net vv
Kamran Shahid

Giải pháp này làm xóa bộ nhớ cache nhưng nó cũng là một sự đánh đổi cho hiệu suất.
Nabeel Arshad

5
Để thực sự xóa bộ nhớ cache, mặc dù các tệp / tmp đã bị xóa, tôi vẫn gặp sự cố bộ nhớ cache wsdl cho đến khi tôi sử dụng cài đặt này ini_set('soap.wsdl_cache_ttl', 1);và để nó ngồi trong một giờ - tìm thấy tại đây: stackoverflow.com/questions/323561/…
Joshua Fricke

27

Xóa tất cả wsdl*các tệp trong /tmpthư mục của bạn trên máy chủ.

Các tệp WSDL được lưu trong bộ đệm ở vị trí mặc định của bạn cho tất cả các tệp bộ đệm được xác định trong php.ini. Cùng vị trí với các tệp phiên của bạn.


Bạn có thể vui lòng cho tôi biết thư mục tmp này nằm ở đâu không?
Kamran Shahid

3
Đó là tại / tmp. Php có thể được đặt để sử dụng một vị trí khác, bạn có thể định vị nó bằng cách thực hiện php -i | grep wsdl_cache_dir
siliconrockstar

Đây là nó cho tôi. Lưu ý: Tôi đang sử dụng docker-compan , vì vậy tôi phải chạy docker-compile rm <container> trước khi thực hiện một docker-soạn mới .
conradkleine Phúc âm

Bạn có thể xác định vị trí thư mục cho bộ nhớ cache wsdl với "php -i | grep soap.wsdl_cache_dir"
Daniel Müller

13

nếu bạn đã triển khai mã hoặc không thể thay đổi bất kỳ cấu hình nào, bạn có thể xóa tất cả các tệp tạm thời khỏi wsdl:

rm /tmp/wsdl-*

2
Đó cũng là những gì tôi làm, tất nhiên trong trường hợp bạn đang sử dụng WSDL_CACHE_DISK
carlosvini

Trên Windows, nó mặc định là c: \ tmp
b3wii 14/09/18

12

Tôi khuyên bạn nên sử dụng cache-buster trong url wsdl.

Trong các ứng dụng của mình, chúng tôi sử dụng id Bản sửa đổi SVN trong url wsdl để khách hàng biết ngay về việc thay đổi cấu trúc. Điều này hoạt động trên ứng dụng của chúng tôi vì mỗi khi chúng tôi thay đổi phía máy chủ, chúng tôi cũng cần phải điều chỉnh ứng dụng khách cho phù hợp.

$client = new SoapClient('http://somewhere.com/?wsdl&rev=$Revision$');

Điều này yêu cầu svn phải được cấu hình đúng cách. Không phải trên tất cả các kho lưu trữ này được bật theo mặc định.

Trong trường hợp bạn không chịu trách nhiệm cho cả hai thành phần (máy chủ, máy khách) hoặc bạn không sử dụng SVN, bạn có thể tìm thấy một chỉ báo khác có thể được sử dụng làm bộ nhớ đệm trong url wsdl của bạn.


7
Một số máy chủ SOAP sẽ không phân phát WSDL nếu có thông số khác.
Raphael Riel

4

Chỉ vì lý do tài liệu:

Hiện tại (2014) tôi đã nhận thấy rằng từ tất cả những cách tiếp cận đúng đắn và có giá trị này, chỉ có một phương pháp thành công. Tôi đã thêm một chức năng vào WSDL trên máy chủ và máy khách không nhận ra chức năng mới.

  • Thêm WSDL_CACHE_NONEvào các thông số không giúp được gì.
  • Thêm cache-buster không giúp được gì.
  • Đặt soap.wsdl_cache_enabledthành ini PHP đã giúp.

Bây giờ tôi không chắc liệu đó có phải là sự kết hợp của cả ba hay không, hay một số tính năng được triển khai quá mức để chúng có thể vô dụng một cách ngẫu nhiên, hoặc nếu có một số phân cấp các tính năng không được hiểu rõ.

Vì vậy, cuối cùng, mong đợi rằng bạn phải kiểm tra cả ba để giải quyết các vấn đề như thế này.


FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); làm việc tốt cho tôi
hobailey

0

Chỉnh sửa php.initệp của bạn , tìm kiếm soap.wsdl_cache_enabledvà đặt giá trị thành0

[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.