ใน PHP คุณจะล้างแคช WSDL ได้อย่างไร?


91

ในphp_info()ตำแหน่งที่เก็บแคช WSDL ( /tmp) แต่ฉันไม่จำเป็นต้องรู้ว่าการลบไฟล์ทั้งหมดที่เริ่มต้นด้วย WSDL นั้นปลอดภัยหรือไม่

ใช่ฉันควรจะสามารถลบทุกอย่างได้/tmpแต่ฉันไม่รู้ว่าจะมีผลอะไรอีกถ้าฉันลบไฟล์ WSDL ทั้งหมด

คำตอบ:


200

คุณสามารถลบไฟล์แคช WSDL ได้อย่างปลอดภัย หากคุณต้องการป้องกันการแคชในอนาคตให้ใช้:

ini_set("soap.wsdl_cache_enabled", 0);

หรือแบบไดนามิก:

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

31
ฉันเชื่อว่าเมื่อใช้ SoapClient แทนที่จะใช้ฮาร์ดโค้ดเป็น 0 ขอแนะนำให้คุณใช้ค่าคงที่ที่กำหนดไว้ WSDL_CACHE_NONE ดูphp.net/manual/en/soapclient.soapclient.php
Dan Burton

อย่างไรก็ตามฉันสามารถปล่อยให้ความสามารถในการแคชเหมือนเดิม แต่บางวิธีที่ทำให้แคชทั้งหมดเป็นโมฆะในช่วงเวลาหนึ่ง? เราสามารถทำสิ่งเหล่านี้ได้อย่างง่ายดายใน. net เป็นต้น
Kamran Shahid

โซลูชันนี้จะล้างแคช แต่ก็เป็นการแลกเปลี่ยนประสิทธิภาพเช่นกัน
Nabeel Arshad

5
สำหรับการล้างแคชจริงๆแม้ว่าไฟล์ / tmp จะถูกลบออกไป แต่ฉันก็ยังคงได้รับปัญหาแคช wsdl จนกว่าฉันจะใช้การตั้งค่านี้ini_set('soap.wsdl_cache_ttl', 1);และปล่อยให้นั่งเป็นเวลาหนึ่งชั่วโมง - พบได้ที่นี่: stackoverflow.com/questions/323561/…
Joshua Fricke

27

ลบwsdl*ไฟล์ทั้งหมดใน/tmpโฟลเดอร์ของคุณบนเซิร์ฟเวอร์

ไฟล์ WSDL ถูกแคชในตำแหน่งเริ่มต้นของคุณสำหรับไฟล์แคชทั้งหมดที่กำหนดใน php.ini ตำแหน่งเดียวกับไฟล์เซสชันของคุณ


คุณช่วยแจ้งให้เราทราบได้ไหมว่าโฟลเดอร์ tmp นี้อยู่ที่ไหน
Kamran Shahid

3
อยู่ที่ / tmp php อาจถูกตั้งค่าให้ใช้ตำแหน่งอื่นคุณสามารถค้นหาได้โดยทำ php -i | grep wsdl_cache_dir
siliconrockstar

นี่คือสำหรับฉัน หมายเหตุ: ผมใช้นักเทียบท่า-เขียนดังนั้นฉันต้องวิ่งRM-นักเทียบท่าเขียน <คอนเทนเนอร์>ก่อนที่จะทำใหม่นักเทียบท่า-เขียนขึ้น
conradkleinespel

คุณสามารถค้นหาโฟลเดอร์สำหรับแคช wsdl ด้วย "php -i | grep soap.wsdl_cache_dir"
Daniel Müller

13

หากคุณปรับใช้โค้ดแล้วหรือไม่สามารถเปลี่ยนแปลงการกำหนดค่าใด ๆ คุณสามารถลบไฟล์ temp ทั้งหมดออกจาก wsdl:

rm /tmp/wsdl-*

2
นอกจากนี้ยังเป็นสิ่งที่ฉันทำแน่นอนในกรณีที่คุณใช้ WSDL_CACHE_DISK
carlosvini

ใน Windows จะมีค่าเริ่มต้นเป็น c: \ tmp
b3wii

12

ขอแนะนำให้ใช้ cache-buster ใน wsdl url

ในแอพของเราเราใช้ SVN Revision id ใน wsdl url เพื่อให้ไคลเอนต์รู้ทันทีถึงการเปลี่ยนแปลงโครงสร้าง สิ่งนี้ใช้ได้กับแอพของเราเพราะทุกครั้งที่เราเปลี่ยนฝั่งเซิร์ฟเวอร์เราจำเป็นต้องปรับไคลเอนต์ให้สอดคล้องกันด้วย

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

ต้องกำหนดค่า svn ให้ถูกต้อง ไม่ได้อยู่ในที่เก็บทั้งหมดซึ่งถูกเปิดใช้งานโดยค่าเริ่มต้น

ในกรณีที่คุณไม่รับผิดชอบต่อส่วนประกอบทั้งสอง (เซิร์ฟเวอร์ไคลเอนต์) หรือคุณไม่ได้ใช้ SVN คุณอาจพบตัวบ่งชี้อื่นที่สามารถใช้เป็นตัวจัดการแคชใน URL wsdl


7
เซิร์ฟเวอร์ SOAP บางตัวจะไม่ให้บริการ WSDL หากมีพารามิเตอร์อื่นอยู่
Raphael Riel

4

ด้วยเหตุผลของเอกสาร:

ตอนนี้ (2014) สังเกตว่าจากแนวทางที่มีคุณค่าและถูกต้องทั้งหมดนี้มีเพียงแนวทางเดียวเท่านั้นที่ประสบความสำเร็จ ฉันได้เพิ่มฟังก์ชันให้กับ WSDL บนเซิร์ฟเวอร์แล้วและไคลเอนต์ไม่รู้จักฟังก์ชันใหม่

  • การเพิ่มWSDL_CACHE_NONEพารามิเตอร์ไม่ได้ช่วยอะไร
  • การเพิ่มแคชบัสเตอร์ไม่ได้ช่วยอะไร
  • การตั้งค่าsoap.wsdl_cache_enabledเป็น PHP ini ช่วยได้

ตอนนี้ฉันไม่แน่ใจว่ามันเป็นการรวมกันของทั้งสามหรือถ้าคุณสมบัติบางอย่างถูกนำไปใช้อย่างมากดังนั้นคุณสมบัติเหล่านี้อาจยังคงไร้ประโยชน์แบบสุ่มหรือหากมีลำดับชั้นของคุณสมบัติบางอย่างที่ไม่เข้าใจ

ในที่สุดคาดว่าคุณต้องตรวจสอบทั้งสามเพื่อแก้ปัญหาเหล่านี้


FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); ทำงานได้ดีสำหรับฉัน
hobailey

0

แก้ไขphp.iniไฟล์ของคุณค้นหาsoap.wsdl_cache_enabledและตั้งค่าเป็น0

[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.