XML-RPC ಗೆ ಪರಿಚಯ. ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಸ್ಪರ್ಧೆಗಳು ರೇಖಾಚಿತ್ರದಲ್ಲಿ ಏನು ನೋಡಬಹುದು

ಕೆಲವು ದಿನಗಳ ಹಿಂದೆ, ಹೋಸ್ಟಿಂಗ್‌ನಲ್ಲಿ ನನ್ನ ಸೈಟ್‌ಗಳಲ್ಲಿ ಲೋಡ್ ಗಮನಾರ್ಹವಾಗಿ ಹೆಚ್ಚಾಗಿದೆ ಎಂದು ನಾನು ಗಮನಿಸಿದ್ದೇನೆ. ಸಾಮಾನ್ಯವಾಗಿ ಇದು ಸುಮಾರು 100-120 "ಗಿಳಿಗಳು" (CP) ಆಗಿದ್ದರೆ, ಕಳೆದ ಕೆಲವು ದಿನಗಳಲ್ಲಿ ಇದು 400-500 CP ಗೆ ಹೆಚ್ಚಾಗಿದೆ. ಇದರ ಬಗ್ಗೆ ಉತ್ತಮವಾದ ಏನೂ ಇಲ್ಲ, ಏಕೆಂದರೆ ಹೋಸ್ಟರ್ ಹೆಚ್ಚು ದುಬಾರಿ ಸುಂಕಕ್ಕೆ ಬದಲಾಯಿಸಬಹುದು, ಅಥವಾ ಸೈಟ್ಗಳಿಗೆ ಸಂಪೂರ್ಣವಾಗಿ ಪ್ರವೇಶವನ್ನು ಹೊಂದಬಹುದು, ಹಾಗಾಗಿ ನಾನು ಅದನ್ನು ನೋಡಲು ಪ್ರಾರಂಭಿಸಿದೆ.

ಆದರೆ ನಾನು XML-RPC ಕಾರ್ಯವನ್ನು ಸಂರಕ್ಷಿಸುವ ವಿಧಾನವನ್ನು ಆಯ್ಕೆ ಮಾಡಿದ್ದೇನೆ: XML-RPC Pingback ಪ್ಲಗಿನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ. ಇದು "ಅಪಾಯಕಾರಿ" ವಿಧಾನಗಳಾದ pingback.ping ಮತ್ತು pingback.extensions.getPingbacks ಅನ್ನು ಮಾತ್ರ ತೆಗೆದುಹಾಕುತ್ತದೆ, XML-RPC ಕಾರ್ಯವನ್ನು ಬಿಟ್ಟುಬಿಡುತ್ತದೆ. ಒಮ್ಮೆ ಸ್ಥಾಪಿಸಿದ ನಂತರ, ಪ್ಲಗಿನ್ ಅನ್ನು ಮಾತ್ರ ಸಕ್ರಿಯಗೊಳಿಸಬೇಕಾಗಿದೆ - ಹೆಚ್ಚಿನ ಸಂರಚನೆಯ ಅಗತ್ಯವಿಲ್ಲ.

ದಾರಿಯುದ್ದಕ್ಕೂ, ನಾನು ಅವರ ಪ್ರವೇಶವನ್ನು ನಿರ್ಬಂಧಿಸಲು ನನ್ನ ಸೈಟ್‌ಗಳ .htaccess ಫೈಲ್‌ಗೆ ಎಲ್ಲಾ ಆಕ್ರಮಣಕಾರರ IP ಗಳನ್ನು ನಮೂದಿಸಿದೆ. ನಾನು ಫೈಲ್‌ನ ಕೊನೆಯಲ್ಲಿ ಸೇರಿಸಿದ್ದೇನೆ:

5.196.5.116 37.59.120.214 92.222.35.159 ರಿಂದ ಎಲ್ಲಾ ನಿರಾಕರಿಸಿ ಅನುಮತಿಸಿ, ನಿರಾಕರಿಸಿ ಅನುಮತಿಸಿ ಆದೇಶ

ಅಷ್ಟೆ, ಈಗ ನಾವು xmlrpc.php ಬಳಸಿಕೊಂಡು ಬ್ಲಾಗ್ ಅನ್ನು ಮತ್ತಷ್ಟು ದಾಳಿಯಿಂದ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿ ರಕ್ಷಿಸಿದ್ದೇವೆ. ನಮ್ಮ ಸೈಟ್‌ಗಳು ವಿನಂತಿಗಳೊಂದಿಗೆ ಹೋಸ್ಟಿಂಗ್ ಅನ್ನು ಲೋಡ್ ಮಾಡುವುದನ್ನು ನಿಲ್ಲಿಸಿವೆ, ಹಾಗೆಯೇ ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಸೈಟ್‌ಗಳಲ್ಲಿ DDoS ದಾಳಿಗಳು.

ಶನಿವಾರ ಮಧ್ಯಾಹ್ನದಿಂದ, ಸುಮಾರು 25 ವರ್ಡ್‌ಪ್ರೆಸ್ ಸೈಟ್‌ಗಳನ್ನು ಹೋಸ್ಟ್ ಮಾಡಿರುವ ನನ್ನ ಸರ್ವರ್ ತೀವ್ರ ನಿಧಾನಗತಿಯನ್ನು ಅನುಭವಿಸಲು ಪ್ರಾರಂಭಿಸಿತು. ನಾನು ಹಿಂದಿನ ದಾಳಿಗಳನ್ನು (, ) ಗಮನಿಸದೆ ಬದುಕಲು ನಿರ್ವಹಿಸುತ್ತಿದ್ದರಿಂದ, ಏನಾಗುತ್ತಿದೆ ಎಂದು ನನಗೆ ತಕ್ಷಣ ಅರ್ಥವಾಗಲಿಲ್ಲ.

ನಾನು ಅದನ್ನು ಕಂಡುಕೊಂಡಾಗ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ವಿವೇಚನಾರಹಿತವಾಗಿ ಬಲವಂತಪಡಿಸಲಾಗುತ್ತಿದೆ + XMLRPC ಗೆ ಹಲವು ವಿನಂತಿಗಳು.

ಪರಿಣಾಮವಾಗಿ, ತಕ್ಷಣವೇ ಅಲ್ಲದಿದ್ದರೂ ನಾವು ಎಲ್ಲವನ್ನೂ ಕತ್ತರಿಸುವಲ್ಲಿ ಯಶಸ್ವಿಯಾಗಿದ್ದೇವೆ. ಇದನ್ನು ತಪ್ಪಿಸುವ ಮೂರು ಸರಳ ತಂತ್ರಗಳು ಇಲ್ಲಿವೆ.

ಈ ತಂತ್ರಗಳು ಎಲ್ಲರಿಗೂ ತಿಳಿದಿರುವ ಸಾಧ್ಯತೆಯಿದೆ, ಆದರೆ ವಿವರಣೆಯಲ್ಲಿ ನಾನು ಕಾಣದ ಒಂದೆರಡು ತಪ್ಪುಗಳನ್ನು ನಾನು ಮಾಡಿದ್ದೇನೆ - ಬಹುಶಃ ಇದು ಯಾರಿಗಾದರೂ ಸಮಯವನ್ನು ಉಳಿಸುತ್ತದೆ.

1. ಹುಡುಕಾಟವನ್ನು ನಿಲ್ಲಿಸಿ, ಮಿತಿ ಲಾಗಿನ್ ಪ್ರಯತ್ನಗಳ ಪ್ಲಗಿನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ - ಅದನ್ನು ಸ್ಥಾಪಿಸಿ, ಏಕೆಂದರೆ ಇತರ ರಕ್ಷಣೆಗಳು ಸರ್ವರ್ ಅನ್ನು ಬಹಳವಾಗಿ ನಿಧಾನಗೊಳಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ, ಲಾಗಿನ್ ಸೆಕ್ಯುರಿಟಿ ಸೊಲ್ಯೂಷನ್ ಪ್ಲಗಿನ್ ಅನ್ನು ಬಳಸುವಾಗ, ಅರ್ಧ ಘಂಟೆಯ ನಂತರ ಸರ್ವರ್ ಸತ್ತುಹೋಯಿತು, ಪ್ಲಗಿನ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಹೆಚ್ಚು ಲೋಡ್ ಮಾಡುತ್ತದೆ .

ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ, "ಪ್ರಾಕ್ಸಿಗಾಗಿ" ಚೆಕ್‌ಬಾಕ್ಸ್ ಅನ್ನು ಆನ್ ಮಾಡಲು ಮರೆಯದಿರಿ - ಇಲ್ಲದಿದ್ದರೆ ಅದು ಎಲ್ಲರಿಗೂ ನಿಮ್ಮ ಸರ್ವರ್‌ನ IP ಅನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ ಮತ್ತು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಎಲ್ಲರನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ.
ನವೀಕರಿಸಿ, ಧನ್ಯವಾದಗಳು, ಕಾಮೆಂಟ್‌ಗಳಲ್ಲಿ ವಿವರಗಳು ಕೆಳಗಿವೆ - "ನೇರ ಸಂಪರ್ಕ" ಸಕ್ರಿಯಗೊಳಿಸಿದಾಗ ವ್ಯಾಖ್ಯಾನವು ಕಾರ್ಯನಿರ್ವಹಿಸದಿದ್ದರೆ ಮಾತ್ರ "ಪ್ರಾಕ್ಸಿಗಾಗಿ" ಚೆಕ್‌ಬಾಕ್ಸ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ

2. XML-RPC ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ - XML-RPC ಪ್ಲಗಿನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ (ಸಕ್ರಿಯಗೊಳಿಸಲು ಸುಲಭ ಮತ್ತು ಅದು ಇಲ್ಲಿದೆ).

3. wp-login.php ಅನ್ನು ಮುಚ್ಚಿ - ನೀವು IP ಮೂಲಕ ಸೈಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿದರೆ, ಪ್ಲಗಿನ್ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ ಮತ್ತು ಪಿಕ್ಕರ್ಗಳು ಸೈಟ್ ಅನ್ನು ಕ್ರ್ಯಾಶ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರೆಸುತ್ತವೆ. ಇದನ್ನು ತಪ್ಪಿಸಲು, .htaccess ಗೆ ಸೇರಿಸಿ:

ಆದೇಶ ನಿರಾಕರಿಸಿ, ಎಲ್ಲರಿಂದ ನಿರಾಕರಿಸಲು ಅನುಮತಿಸಿ

ನಾವು wp-ಲಾಗಿನ್ ಫೈಲ್ ಅನ್ನು ನಕಲಿಸುತ್ತೇವೆ, ಅದನ್ನು ಯಾವುದೇ ವಿಚಿತ್ರ ಹೆಸರಿಗೆ ಮರುಹೆಸರಿಸುತ್ತೇವೆ, ಉದಾಹರಣೆಗೆ poletnormalny.php, ಮತ್ತು ಫೈಲ್ ಒಳಗೆ, ಎಲ್ಲಾ wp-login.php ಶಾಸನಗಳನ್ನು poletnormalny.php ಗೆ ಬದಲಾಯಿಸಲು ಸ್ವಯಂ ಸರಿಪಡಿಸುವಿಕೆಯನ್ನು ಬಳಸಿ.
ಅಷ್ಟೆ, ಈಗ ನೀವು ನಿಮ್ಮ ಫೈಲ್ ಬಳಸಿ ಮಾತ್ರ ನಿರ್ವಾಹಕ ಫಲಕವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು.

ಈ 3 ಸರಳ ಹಂತಗಳ ನಂತರ, ಸೈಟ್ಗಳು ಮತ್ತೆ ಹಾರಲು ಪ್ರಾರಂಭಿಸಿದವು ಮತ್ತು ಶಾಂತಿ ಬಂದಿತು.

ಸರಿ, ಇದ್ದಕ್ಕಿದ್ದಂತೆ ಇದು ಆಸಕ್ತಿದಾಯಕವಾಗಿದೆ

ನಿಮ್ಮ ಮೇಲೆ ದಾಳಿ ಮಾಡಲಾಗುತ್ತಿದೆಯೇ ಎಂದು ನೋಡುವುದು ಒಂದು ಆಯ್ಕೆಯಾಗಿದೆ. ಇದನ್ನು nginx ಲಾಗ್‌ಗಳಲ್ಲಿ ಕಾಣಬಹುದು (ಉದಾಹರಣೆಗೆ, Debian /var/log/nginx access.log ಫೈಲ್‌ಗಾಗಿ ಮಾರ್ಗ ಇಲ್ಲಿದೆ).

XML-RPC ತಂತ್ರಜ್ಞಾನವನ್ನು WordPress ವ್ಯವಸ್ಥೆಯಲ್ಲಿ ಪಿಂಗ್‌ಬ್ಯಾಕ್‌ಗಳು, ಟ್ರ್ಯಾಕ್‌ಬ್ಯಾಕ್‌ಗಳು, ನಿರ್ವಾಹಕ ಫಲಕಕ್ಕೆ ಲಾಗ್ ಇನ್ ಮಾಡದೆಯೇ ರಿಮೋಟ್ ಸೈಟ್ ನಿರ್ವಹಣೆ ಮುಂತಾದ ವಿವಿಧ ಉತ್ತಮ ವೈಶಿಷ್ಟ್ಯಗಳಿಗಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ. ದುರದೃಷ್ಟವಶಾತ್, ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ DDoS ದಾಳಿಗಳನ್ನು ಮಾಡಲು ಆಕ್ರಮಣಕಾರರು ಇದನ್ನು ಬಳಸಬಹುದು. ಅಂದರೆ, ನಿಮಗಾಗಿ ಅಥವಾ ಆದೇಶಿಸಲು ನೀವು ಸುಂದರವಾದ, ಆಸಕ್ತಿದಾಯಕ WP ಯೋಜನೆಗಳನ್ನು ರಚಿಸುತ್ತೀರಿ ಮತ್ತು ಅದೇ ಸಮಯದಲ್ಲಿ, ಯಾವುದನ್ನೂ ಅನುಮಾನಿಸದೆ, ನೀವು DDoS ಬಾಟ್ನೆಟ್ನ ಭಾಗವಾಗಬಹುದು. ಹತ್ತಾರು ಮತ್ತು ನೂರಾರು ಸಾವಿರ ಸೈಟ್‌ಗಳನ್ನು ಒಟ್ಟಿಗೆ ಸಂಪರ್ಕಿಸುವ ಮೂಲಕ, ಕೆಟ್ಟ ಜನರು ತಮ್ಮ ಬಲಿಪಶುವಿನ ಮೇಲೆ ಪ್ರಬಲ ದಾಳಿಯನ್ನು ಸೃಷ್ಟಿಸುತ್ತಾರೆ. ಅದೇ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ ಸೈಟ್ ಸಹ ನರಳುತ್ತದೆ, ಏಕೆಂದರೆ... ಲೋಡ್ ಅದು ಇರುವ ಹೋಸ್ಟಿಂಗ್‌ಗೆ ಹೋಗುತ್ತದೆ.

ಅಂತಹ ಕೆಟ್ಟ ಚಟುವಟಿಕೆಯ ಪುರಾವೆಗಳು ಸರ್ವರ್ ಲಾಗ್‌ಗಳಲ್ಲಿರಬಹುದು (nginx ನಲ್ಲಿ Access.log), ಈ ಕೆಳಗಿನ ಸಾಲುಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ:

103.238.80.27 - - "POST /wp-login.php HTTP/1.0" 200 5791 "-" "-"

ಆದರೆ ನಾವು XML-RPC ದುರ್ಬಲತೆಗೆ ಹಿಂತಿರುಗೋಣ. ದೃಷ್ಟಿಗೋಚರವಾಗಿ, ಇದು ನಿಮ್ಮ ಸರ್ವರ್‌ನಲ್ಲಿ ಸೈಟ್‌ಗಳನ್ನು ನಿಧಾನವಾಗಿ ತೆರೆಯುವಲ್ಲಿ ಅಥವಾ ಅವುಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ಅಸಮರ್ಥತೆಯಲ್ಲಿ ಸ್ವತಃ ಸ್ಪಷ್ಟವಾಗಿ ಗೋಚರಿಸುತ್ತದೆ (502 ಬ್ಯಾಡ್ ಗೇಟ್‌ವೇ ದೋಷ). ನನ್ನ FASTVPS ಹೋಸ್ಟ್‌ನ ತಾಂತ್ರಿಕ ಬೆಂಬಲವು ನನ್ನ ಊಹೆಗಳನ್ನು ದೃಢೀಕರಿಸಿದೆ ಮತ್ತು ಸಲಹೆ ನೀಡಿದೆ:

  1. ಪ್ಲಗಿನ್‌ಗಳ ಜೊತೆಗೆ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಗೆ WordPress ಅನ್ನು ನವೀಕರಿಸಿ. ಸಾಮಾನ್ಯವಾಗಿ, ನೀವು ಅನುಸರಿಸಿದರೆ, ಇತ್ತೀಚಿನ 4.2.3 ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಅಗತ್ಯತೆಯ ಬಗ್ಗೆ ನೀವು ಓದಿರಬಹುದು. ಭದ್ರತಾ ಟೀಕೆಗಳಿಂದಾಗಿ (ಹಿಂದಿನ ಆವೃತ್ತಿಗಳಂತೆಯೇ). ಸಂಕ್ಷಿಪ್ತವಾಗಿ, ನವೀಕರಿಸುವುದು ಒಳ್ಳೆಯದು.
  1. ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ XML-RPC Pingback ಪ್ಲಗಿನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ.

WordPress ನಲ್ಲಿ XML-RPC ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ

ಹಿಂದೆ, XML-RPC ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ/ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವ ಆಯ್ಕೆಯು ಸಿಸ್ಟಮ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಎಲ್ಲೋ ಇತ್ತು ಎಂದು ನನಗೆ ತೋರುತ್ತದೆ, ಆದರೆ ಈಗ ನಾನು ಅದನ್ನು ಅಲ್ಲಿ ಹುಡುಕಲು ಸಾಧ್ಯವಿಲ್ಲ. ಆದ್ದರಿಂದ, ಅದನ್ನು ತೊಡೆದುಹಾಕಲು ಸುಲಭವಾದ ಮಾರ್ಗವೆಂದರೆ ಸೂಕ್ತವಾದ ಪ್ಲಗಿನ್ ಅನ್ನು ಬಳಸುವುದು.

XML-RPC Pingback ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಅಥವಾ ಸಿಸ್ಟಮ್ ನಿರ್ವಾಹಕ ಫಲಕದಿಂದ ನೇರವಾಗಿ ಸ್ಥಾಪಿಸಿ ಮತ್ತು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ. ನೀವು ಹೆಚ್ಚುವರಿ ಏನನ್ನೂ ಕಾನ್ಫಿಗರ್ ಮಾಡುವ ಅಗತ್ಯವಿಲ್ಲ, ಮಾಡ್ಯೂಲ್ ತಕ್ಷಣವೇ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಪ್ರಾರಂಭಿಸುತ್ತದೆ. ಇದು XML-RPC ಇಂಟರ್‌ಫೇಸ್‌ನಿಂದ pingback.ping ಮತ್ತು pingback.extensions.getPingbacks ವಿಧಾನಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಇದು HTTP ಹೆಡರ್‌ಗಳಿಂದ X-Pingback ಅನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ.

ಬ್ಲಾಗ್‌ಗಳಲ್ಲಿ ಒಂದರಲ್ಲಿ XML-RPC ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವಿಕೆಯನ್ನು ತೆಗೆದುಹಾಕಲು ನಾನು ಒಂದೆರಡು ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳನ್ನು ಕಂಡುಕೊಂಡಿದ್ದೇನೆ.

1. ಟೆಂಪ್ಲೇಟ್‌ನಲ್ಲಿ XML-RPC ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ.

ಇದನ್ನು ಮಾಡಲು, ಥೀಮ್‌ನ functions.php ಫೈಲ್‌ಗೆ ಕೆಳಗಿನ ಸಾಲನ್ನು ಸೇರಿಸಿ:

ಆದೇಶ ನಿರಾಕರಿಸಿ, ಎಲ್ಲರಿಂದ ನಿರಾಕರಿಸಲು ಅನುಮತಿಸಿ

ನಾನು ವೈಯಕ್ತಿಕವಾಗಿ ಕೊನೆಯ ಎರಡು ವಿಧಾನಗಳನ್ನು ಬಳಸಲಿಲ್ಲ, ಏಕೆಂದರೆ... ನಾನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ XML-RPC Pingback ಪ್ಲಗಿನ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿದೆ - ಇದು ಸಾಕಷ್ಟು ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ. ಅನಗತ್ಯ ಅನುಸ್ಥಾಪನೆಗಳನ್ನು ಇಷ್ಟಪಡದವರಿಗೆ, ನಾನು ಪರ್ಯಾಯ ಆಯ್ಕೆಗಳನ್ನು ಸೂಚಿಸಿದೆ.

ಮೆಮೊರಿಯ ಸಮರ್ಥ ಬಳಕೆಯೊಂದಿಗೆ ಥ್ರೆಡ್ ಸಂಸ್ಕರಣೆಯ ಸಂಘಟನೆ

ಎಲಿಯಟ್ ರಸ್ಟಿ ಹೆರಾಲ್ಡ್
10/11/2007 ರಂದು ಪ್ರಕಟಿಸಲಾಗಿದೆ

PHP 5 XMLReader ಅನ್ನು ಪರಿಚಯಿಸಿತು, ಎಕ್ಸ್‌ಟೆನ್ಸಿಬಲ್ ಮಾರ್ಕಪ್ ಲಾಂಗ್ವೇಜ್ (XML) ಅನ್ನು ಓದಲು ಹೊಸ ವರ್ಗ. ಸರಳ XML ಅಥವಾ ಡಾಕ್ಯುಮೆಂಟ್ ಆಬ್ಜೆಕ್ಟ್ ಮಾಡೆಲ್ (DOM) ಗಿಂತ ಭಿನ್ನವಾಗಿ, XMLReader ಸ್ಟ್ರೀಮಿಂಗ್ ಮೋಡ್‌ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಅಂದರೆ, ಇದು ಮೊದಲಿನಿಂದ ಕೊನೆಯವರೆಗೆ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಓದುತ್ತದೆ. ನೀವು ಅಂತ್ಯವನ್ನು ನೋಡುವ ಮೊದಲು ಡಾಕ್ಯುಮೆಂಟ್‌ನ ಪ್ರಾರಂಭದಲ್ಲಿ ಡಾಕ್ಯುಮೆಂಟ್‌ನ ವಿಷಯದೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಪ್ರಾರಂಭಿಸಬಹುದು. ಇದು ಅತ್ಯಂತ ವೇಗವಾಗಿ, ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮತ್ತು ಮೆಮೊರಿಯನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮಾಡುತ್ತದೆ. ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬೇಕಾದ ದಾಖಲೆಗಳ ಗಾತ್ರವು ದೊಡ್ಡದಾಗಿದೆ, ಇದು ಹೆಚ್ಚು ಮುಖ್ಯವಾಗಿದೆ.

libxml

ವಿವರಿಸಿದ XMLReader API, C ಮತ್ತು C++ ಗಾಗಿ Gnome Project ನ libxml ಲೈಬ್ರರಿಯನ್ನು ಆಧರಿಸಿದೆ. ವಾಸ್ತವದಲ್ಲಿ, XMLReader ಎಂಬುದು libxml XmlTextReader API ಮೇಲಿನ ತೆಳುವಾದ PHP ಪದರವಾಗಿದೆ. XmlTextReader ಅನ್ನು ಸಹ .NET ತರಗತಿಗಳು XmlTextReader ಮತ್ತು XmlReader ನಂತರ (ಆದರೂ ಅದೇ ಕೋಡ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದಿಲ್ಲ) ಮಾದರಿಯಾಗಿದೆ.

ಸರಳ XML API (SAX) ಗಿಂತ ಭಿನ್ನವಾಗಿ, XMLReader ಪುಶ್ ಪಾರ್ಸರ್‌ಗಿಂತ ಪುಲ್ ಪಾರ್ಸರ್ ಆಗಿದೆ. ಇದರರ್ಥ ಪ್ರೋಗ್ರಾಂ ನಿಯಂತ್ರಣದಲ್ಲಿದೆ. ಪಾರ್ಸರ್ ಅದನ್ನು ನೋಡಿದಾಗ ಅದು ಏನು ನೋಡುತ್ತದೆ ಎಂದು ಹೇಳುವ ಬದಲು; ಡಾಕ್ಯುಮೆಂಟ್‌ನ ಮುಂದಿನ ಭಾಗಕ್ಕೆ ಯಾವಾಗ ಹೋಗಬೇಕೆಂದು ನೀವು ಪಾರ್ಸರ್‌ಗೆ ಹೇಳುತ್ತೀರಿ. ನೀವು ಅದಕ್ಕೆ ಪ್ರತಿಕ್ರಿಯಿಸುವ ಬದಲು ವಿಷಯವನ್ನು ಕೇಳುತ್ತಿದ್ದೀರಿ. ಬೇರೆ ರೀತಿಯಲ್ಲಿ ಹೇಳುವುದಾದರೆ, ನೀವು ಇದನ್ನು ಈ ರೀತಿ ಯೋಚಿಸಬಹುದು: XMLReader ಎಂಬುದು ಇಟರೇಟರ್ ರಚನೆಯ ಅನುಷ್ಠಾನವಾಗಿದೆ, ವೀಕ್ಷಕ ರಚನೆಯಲ್ಲ.

ಮಾದರಿ ಕಾರ್ಯ

ಸರಳ ಉದಾಹರಣೆಯೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸೋಣ. ನೀವು XML-RPC ವಿನಂತಿಗಳನ್ನು ಸ್ವೀಕರಿಸುವ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ರಚಿಸುವ PHP ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಬರೆಯುತ್ತಿರುವಿರಿ ಎಂದು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ. ಹೆಚ್ಚು ನಿರ್ದಿಷ್ಟವಾಗಿ, ಪಟ್ಟಿ 1 ನಂತೆ ಕಾಣುವ ಪ್ರಶ್ನೆಗಳನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ. ಮೂಲ ಡಾಕ್ಯುಮೆಂಟ್ ಅಂಶವೆಂದರೆ ಮೆಥಡ್ಕಾಲ್ , ಇದು ಮೆಥಡ್ ನೇಮ್ ಮತ್ತು ಪ್ಯಾರಾಮ್ ಅಂಶಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ವಿಧಾನದ ಹೆಸರು sqrt. ಪ್ಯಾರಮ್ ಅಂಶವು ಒಂದು ಪ್ಯಾರಮ್ ಅಂಶವನ್ನು ಒಳಗೊಂಡಿದೆ, ಇದು ಡಬಲ್ ಅನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ - ನೀವು ಹೊರತೆಗೆಯಲು ಬಯಸುವ ವರ್ಗಮೂಲದ ಸಂಖ್ಯೆ. ನೇಮ್‌ಸ್ಪೇಸ್‌ಗಳನ್ನು ಬಳಸಲಾಗುವುದಿಲ್ಲ.

ಪಟ್ಟಿ 1. XML-RPC ವಿನಂತಿ
ಚದರ 36.0

PHP ಸ್ಕ್ರಿಪ್ಟ್ ಏನು ಮಾಡಬೇಕು:

  1. ವಿಧಾನದ ಹೆಸರನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಅದು sqrt ಅಲ್ಲದಿದ್ದರೆ ದೋಷ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ರಚಿಸಿ (ಈ ಸ್ಕ್ರಿಪ್ಟ್‌ನಿಂದ ನಿರ್ವಹಿಸಬಹುದಾದ ಏಕೈಕ ವಿಧಾನ).
  2. ಆರ್ಗ್ಯುಮೆಂಟ್ ಅನ್ನು ಹುಡುಕಿ ಮತ್ತು ಅದು ಕಾಣೆಯಾಗಿದೆ ಅಥವಾ ತಪ್ಪಾಗಿದ್ದರೆ, ವೈಫಲ್ಯದ ಸಂಕೇತವನ್ನು ರಚಿಸಿ.
  3. ಇಲ್ಲದಿದ್ದರೆ, ವರ್ಗಮೂಲವನ್ನು ಲೆಕ್ಕ ಹಾಕಿ.
  4. ಪಟ್ಟಿ 2 ರಲ್ಲಿ ತೋರಿಸಿರುವ ರೂಪದಲ್ಲಿ ಫಲಿತಾಂಶವನ್ನು ಹಿಂತಿರುಗಿ.
ಪಟ್ಟಿ 2. XML-RPC ಪ್ರತಿಕ್ರಿಯೆ
6.0

ಅದನ್ನು ಹಂತ ಹಂತವಾಗಿ ತೆಗೆದುಕೊಳ್ಳೋಣ.

ಪಾರ್ಸರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವುದು ಮತ್ತು ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ

ಹೊಸ ಪಾರ್ಸರ್ ವಸ್ತುವನ್ನು ರಚಿಸುವುದು ಮೊದಲ ಹಂತವಾಗಿದೆ. ಇದನ್ನು ಮಾಡುವುದು ಸುಲಭ:

$ರೀಡರ್ = ಹೊಸ XMLReader();
ಕಳುಹಿಸಲಾಗುತ್ತಿರುವ ಮೂಲ ಡೇಟಾಗೆ ಮಾಹಿತಿಯನ್ನು ಸೇರಿಸಲಾಗುತ್ತಿದೆ

$HTTP_RAW_POST_DATA ಖಾಲಿಯಾಗಿದೆ ಎಂದು ನೀವು ಕಂಡುಕೊಂಡರೆ, ನಿಮ್ಮ php.ini ಫೈಲ್‌ಗೆ ಈ ಕೆಳಗಿನ ಸಾಲನ್ನು ಸೇರಿಸಿ:

always_populate_raw_post_data = ಆನ್

$request = $HTTP_RAW_POST_DATA; $ರೀಡರ್->XML($request);

ನೀವು ಯಾವುದೇ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಬಹುದು, ನೀವು ಅದನ್ನು ಎಲ್ಲಿಂದ ಪಡೆದರೂ ಪರವಾಗಿಲ್ಲ. ಉದಾಹರಣೆಗೆ, ಇದು ಪ್ರೋಗ್ರಾಂ ಅಥವಾ ಫೈಲ್‌ನ ವಿಷಯಗಳಲ್ಲಿ ಸ್ಟ್ರಿಂಗ್ ಅಕ್ಷರಶಃ ಸ್ಥಿರವಾಗಿರುತ್ತದೆ. ತೆರೆದ() ಕಾರ್ಯವನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ಬಾಹ್ಯ URL ನಿಂದ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಬಹುದು. ಉದಾಹರಣೆಗೆ, ಈ ಕೆಳಗಿನ ಸೂಚನೆಯು ಪಾರ್ಸಿಂಗ್‌ಗಾಗಿ Atom ಚಾನಲ್‌ಗಳಲ್ಲಿ ಒಂದನ್ನು ಸಿದ್ಧಪಡಿಸುತ್ತದೆ:

$reader->XML("http://www.cafeaulait.org/today.atom");

ನಿಮ್ಮ ಮೂಲ ಡೇಟಾವನ್ನು ನೀವು ಎಲ್ಲಿಂದ ತೆಗೆದುಕೊಂಡಿದ್ದೀರಿ, ರೀಡರ್ ಅನ್ನು ಈಗ ಸ್ಥಾಪಿಸಲಾಗಿದೆ ಮತ್ತು ವಿಶ್ಲೇಷಣೆ ಮಾಡಲು ಸಿದ್ಧವಾಗಿದೆ.

ಡಾಕ್ಯುಮೆಂಟ್ ಓದುವುದು

ಓದು() ಕಾರ್ಯವು ಪಾರ್ಸರ್ ಅನ್ನು ಮುಂದಿನ ಟೋಕನ್‌ಗೆ ಚಲಿಸುತ್ತದೆ. ಡಾಕ್ಯುಮೆಂಟ್‌ನಾದ್ಯಂತ ಸ್ವಲ್ಪ ಸಮಯದ ಲೂಪ್ ಅನ್ನು ಪುನರಾವರ್ತಿಸುವುದು ಸರಳವಾದ ವಿಧಾನವಾಗಿದೆ:

ಹಾಗೆಯೇ ($reader->ಓದಲು()) ( // ಪ್ರಕ್ರಿಯೆ ಕೋಡ್... )

ಮುಗಿದ ನಂತರ, ಅದು ತೆಗೆದುಕೊಳ್ಳುತ್ತಿರುವ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಮುಕ್ತಗೊಳಿಸಲು ಪಾರ್ಸರ್ ಅನ್ನು ಮುಚ್ಚಿ ಮತ್ತು ಕೆಳಗಿನ ಡಾಕ್ಯುಮೆಂಟ್‌ಗಾಗಿ ಅದನ್ನು ಮರುಸಂರಚಿಸಿ:

$ರೀಡರ್->ಮುಚ್ಚಿ();

ಲೂಪ್ ಒಳಗೆ, ಪಾರ್ಸರ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟ ನೋಡ್‌ನಲ್ಲಿ ಇರಿಸಲಾಗುತ್ತದೆ: ಅಂಶದ ಆರಂಭದಲ್ಲಿ, ಅಂಶದ ಕೊನೆಯಲ್ಲಿ, ಪಠ್ಯ ನೋಡ್‌ನಲ್ಲಿ, ಕಾಮೆಂಟ್‌ನಲ್ಲಿ, ಇತ್ಯಾದಿ. ಪಾರ್ಸರ್ ಪ್ರಸ್ತುತ ಏನನ್ನು ವೀಕ್ಷಿಸುತ್ತಿದೆ ಎಂಬುದನ್ನು ಕೆಳಗಿನ ಗುಣಲಕ್ಷಣಗಳು ನಿಮಗೆ ತಿಳಿಸುತ್ತವೆ:

  • localName ಎಂಬುದು ಸ್ಥಳೀಯ, ಪೂರ್ವನಿರ್ಧರಿತವಲ್ಲದ ಹೋಸ್ಟ್ ಹೆಸರು.
  • ಹೆಸರು - ಸಂಭವನೀಯ ಪೂರ್ವನಿರ್ಧರಿತ ನೋಡ್ ಹೆಸರು. ಕಾಮೆಂಟ್‌ಗಳಂತಹ ಹೆಸರುಗಳನ್ನು ಹೊಂದಿರದ ನೋಡ್‌ಗಳಿಗೆ, ಇವುಗಳು DOM (ಡಾಕ್ಯುಮೆಂಟ್ ಆಬ್ಜೆಕ್ಟ್ ಮಾಡೆಲ್) ನಲ್ಲಿರುವಂತೆ # ಕಾಮೆಂಟ್ , # ಪಠ್ಯ , # ಡಾಕ್ಯುಮೆಂಟ್ , ಇತ್ಯಾದಿ.
  • namespaceURI ಎಂಬುದು ಹೋಸ್ಟ್ ನೇಮ್‌ಸ್ಪೇಸ್‌ಗಾಗಿ ಏಕರೂಪದ ಸಂಪನ್ಮೂಲ ಗುರುತಿಸುವಿಕೆ (URI) ಆಗಿದೆ.
  • ನೋಡ್‌ಟೈಪ್ ನೋಡ್‌ನ ಪ್ರಕಾರವನ್ನು ಪ್ರತಿನಿಧಿಸುವ ಪೂರ್ಣಾಂಕವಾಗಿದೆ - ಉದಾಹರಣೆಗೆ, ಗುಣಲಕ್ಷಣ ನೋಡ್‌ಗೆ 2 ಮತ್ತು ಸಂಸ್ಕರಣಾ ಹೇಳಿಕೆಗಾಗಿ 7.
  • ಪೂರ್ವಪ್ರತ್ಯಯವು ನೋಡ್‌ನ ನೇಮ್‌ಸ್ಪೇಸ್ ಪೂರ್ವಪ್ರತ್ಯಯವಾಗಿದೆ.
  • ಮೌಲ್ಯವು ನೋಡ್‌ನ ಪಠ್ಯ ವಿಷಯವಾಗಿದೆ.
  • hasValue - ನೋಡ್ ಪಠ್ಯ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿದ್ದರೆ ಸರಿ ಮತ್ತು ಇಲ್ಲದಿದ್ದರೆ ತಪ್ಪು.

ಸಹಜವಾಗಿ, ಎಲ್ಲಾ ನೋಡ್ ಪ್ರಕಾರಗಳು ಈ ಎಲ್ಲಾ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿಲ್ಲ. ಉದಾಹರಣೆಗೆ, ಪಠ್ಯ ನೋಡ್‌ಗಳು, CDATA ವಿಭಾಗಗಳು, ಕಾಮೆಂಟ್‌ಗಳು, ಪ್ರಕ್ರಿಯೆ ಹೇಳಿಕೆಗಳು, ಗುಣಲಕ್ಷಣಗಳು, ಸ್ಪೇಸ್ ಕ್ಯಾರೆಕ್ಟರ್, ಡಾಕ್ಯುಮೆಂಟ್ ಪ್ರಕಾರಗಳು ಮತ್ತು XML ವಿವರಣೆಗಳು ಅರ್ಥಗಳನ್ನು ಹೊಂದಿವೆ. ಇತರ ರೀತಿಯ ನೋಡ್‌ಗಳು (ವಿಶೇಷವಾಗಿ ಅಂಶಗಳು ಮತ್ತು ದಾಖಲೆಗಳು) ಮಾಡುವುದಿಲ್ಲ. ಸಾಮಾನ್ಯವಾಗಿ ಯಾವುದನ್ನು ವೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಲು ಮತ್ತು ಅದಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಪ್ರತಿಕ್ರಿಯಿಸಲು ಪ್ರೋಗ್ರಾಂ ನೋಡ್‌ಟೈಪ್ ಆಸ್ತಿಯನ್ನು ಬಳಸುತ್ತದೆ. ಪಟ್ಟಿ 3 ಇದು ನೋಡುತ್ತಿರುವುದನ್ನು ಔಟ್‌ಪುಟ್ ಮಾಡಲು ಈ ಕಾರ್ಯಗಳನ್ನು ಬಳಸುವ ಸರಳ ಲೂಪ್ ಅನ್ನು ತೋರಿಸುತ್ತದೆ. ಪಟ್ಟಿ 1 ಅನ್ನು ಇನ್‌ಪುಟ್ ಆಗಿ ನೀಡಿದಾಗ ಪಟ್ಟಿ 4 ಈ ಪ್ರೋಗ್ರಾಂನ ಔಟ್‌ಪುಟ್ ಅನ್ನು ತೋರಿಸುತ್ತದೆ.

ಪಟ್ಟಿ 3. ಪಾರ್ಸರ್ ಏನು ನೋಡುತ್ತಾನೆ
ಹಾಗೆಯೇ ($ರೀಡರ್->ಓದಿ()) (ಪ್ರತಿಧ್ವನಿ $ರೀಡರ್->ಹೆಸರು; ವೇಳೆ ($ರೀಡರ್->ಮೌಲ್ಯ) (ಪ್ರತಿಧ್ವನಿ ": ". $ರೀಡರ್->ಮೌಲ್ಯ; ) ಪ್ರತಿಧ್ವನಿ "\n"; )
ಪಟ್ಟಿ 4. ಪಟ್ಟಿಯಿಂದ ಔಟ್‌ಪುಟ್ 3
ವಿಧಾನ ಕರೆ #ಪಠ್ಯ: ವಿಧಾನ ಹೆಸರು #ಪಠ್ಯ: sqrt ವಿಧಾನಹೆಸರು

ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ರಮಗಳು ಸಾರ್ವತ್ರಿಕವಾಗಿಲ್ಲ. ಅವರು ಇನ್ಪುಟ್ ಡೇಟಾವನ್ನು ನಿರ್ದಿಷ್ಟ ರೂಪದಲ್ಲಿ ಸ್ವೀಕರಿಸುತ್ತಾರೆ ಮತ್ತು ಅದನ್ನು ನಿರ್ದಿಷ್ಟ ರೀತಿಯಲ್ಲಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತಾರೆ. XML-RPC ಉದಾಹರಣೆಯಲ್ಲಿ, ಇನ್‌ಪುಟ್‌ನಿಂದ ಕೇವಲ ಒಂದು ಪ್ಯಾರಾಮೀಟರ್ ಅನ್ನು ಓದುವ ಅಗತ್ಯವಿದೆ: ಡಬಲ್ ಎಲಿಮೆಂಟ್, ಅದರಲ್ಲಿ ಒಂದು ಮಾತ್ರ ಇರಬೇಕು. ಇದನ್ನು ಮಾಡಲು, ಡಬಲ್ ಹೆಸರಿನ ಅಂಶದ ಪ್ರಾರಂಭವನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ:

ವೇಳೆ ($ರೀಡರ್->ಹೆಸರು == "ಡಬಲ್" && $ರೀಡರ್->ನೋಡ್ಎಲೆಮೆಂಟ್ಟೈಪ್ == XMLReader::ಎಲಿಮೆಂಟ್) (// ... )

ಈ ಅಂಶವು ಒಂದೇ ಪಠ್ಯ ಚೈಲ್ಡ್ ನೋಡ್ ಅನ್ನು ಸಹ ಹೊಂದಿದೆ, ಪಾರ್ಸರ್ ಅನ್ನು ಮುಂದಿನ ನೋಡ್‌ಗೆ ಸರಿಸುವ ಮೂಲಕ ಓದಬಹುದು:

ವೇಳೆ ($ರೀಡರ್->ಹೆಸರು == "ಡಬಲ್" && $ರೀಡರ್->ನೋಡ್‌ಟೈಪ್ == XMLReader::ELEMENT) ( $reader->read(); ಪ್ರತಿಕ್ರಿಯಿಸಿ($reader->value); )

ಇಲ್ಲಿ, ಪ್ರತಿಕ್ರಿಯೆ() ಕಾರ್ಯವು XML-RPC ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ರಚಿಸುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಕ್ಲೈಂಟ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ. ಆದಾಗ್ಯೂ, ನಾನು ಇದನ್ನು ತೋರಿಸುವ ಮೊದಲು, ಇನ್ನೂ ಒಂದು ವಿಷಯವನ್ನು ಹೇಳಬೇಕಾಗಿದೆ. ವಿನಂತಿ ಡಾಕ್ಯುಮೆಂಟ್‌ನಲ್ಲಿನ ಡಬಲ್ ಎಲಿಮೆಂಟ್ ಕೇವಲ ಒಂದು ಪಠ್ಯ ನೋಡ್ ಅನ್ನು ಹೊಂದಿದೆ ಎಂಬುದಕ್ಕೆ ಯಾವುದೇ ಗ್ಯಾರಂಟಿ ಇಲ್ಲ. ಇದು ಬಹು ನೋಡ್‌ಗಳು, ಹಾಗೆಯೇ ಕಾಮೆಂಟ್‌ಗಳು ಮತ್ತು ಹೇಳಿಕೆಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಉದಾಹರಣೆಗೆ, ಇದು ಈ ರೀತಿ ಕಾಣಿಸಬಹುದು:

6.0
ನೆಸ್ಟೆಡ್ ಎಲಿಮೆಂಟ್ಸ್

ಈ ಸರ್ಕ್ಯೂಟ್ನಲ್ಲಿ ಒಂದು ಸಂಭವನೀಯ ದೋಷವಿದೆ. ನೆಸ್ಟೆಡ್ ಡಬಲ್ ಎಲಿಮೆಂಟ್ಸ್, ಉದಾಹರಣೆಗೆ, 61.2ಈ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಮುರಿಯಬಹುದು. ಇದು ಕೆಟ್ಟ XML-RPC ಆಗಿದೆ, ಮತ್ತು ಅಂತಹ ಎಲ್ಲಾ ದಾಖಲೆಗಳನ್ನು ತಿರಸ್ಕರಿಸಲು RELAX NG ಮೌಲ್ಯೀಕರಣವನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದನ್ನು ನೀವು ಶೀಘ್ರದಲ್ಲೇ ನೋಡುತ್ತೀರಿ. ಡಾಕ್ಯುಮೆಂಟ್ ಪ್ರಕಾರಗಳಾದ ಎಕ್ಸ್‌ಟೆನ್ಸಿಬಲ್ ಹೈಪರ್‌ಟೆಕ್ಸ್ಟ್ ಮಾರ್ಕಪ್ ಲಾಂಗ್ವೇಜ್ (XHTML) ನಲ್ಲಿ ಒಂದೇ ರೀತಿಯ ಅಂಶಗಳನ್ನು ಪರಸ್ಪರ ಗೂಡುಕಟ್ಟಲು ಅನುಮತಿಸುತ್ತದೆ (ಉದಾಹರಣೆಗೆ, ಟೇಬಲ್‌ನೊಳಗಿನ ಟೇಬಲ್), ಎಂಡ್ ಟ್ಯಾಗ್ ಅನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನೀವು ಅಂಶಗಳ ಆಳವನ್ನು ಸಹ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬೇಕಾಗುತ್ತದೆ ಪ್ರಾರಂಭದ ಟ್ಯಾಗ್‌ಗೆ ಸರಿಯಾಗಿ ಮ್ಯಾಪ್ ಮಾಡಲಾಗಿದೆ.

ಸಮಸ್ಯೆಗೆ ಸಮರ್ಥನೀಯ ಪರಿಹಾರವೆಂದರೆ ಡಬಲ್ ಟೆಕ್ಸ್ಟ್ ನೋಡ್‌ನ ಎಲ್ಲಾ ಮಕ್ಕಳನ್ನು ಪಡೆಯುವುದು, ಅವುಗಳನ್ನು ಒಟ್ಟಿಗೆ ಜೋಡಿಸುವುದು ಮತ್ತು ನಂತರ ಮಾತ್ರ ಫಲಿತಾಂಶವನ್ನು ದ್ವಿಗುಣಕ್ಕೆ ಪರಿವರ್ತಿಸುವುದು. ಯಾವುದೇ ಕಾಮೆಂಟ್‌ಗಳು ಅಥವಾ ಇತರ ಪಠ್ಯೇತರ ನೋಡ್‌ಗಳನ್ನು ತಪ್ಪಿಸಬೇಕು. ಇದು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಜಟಿಲವಾಗಿದೆ, ಆದರೆ ತುಂಬಾ ಸಂಕೀರ್ಣವಾಗಿಲ್ಲ, ಪಟ್ಟಿ 5 ತೋರಿಸುತ್ತದೆ.

ಪಟ್ಟಿ 5. ಅಂಶದ ಎಲ್ಲಾ ಪಠ್ಯ ವಿಷಯವನ್ನು ಸಾರಾಂಶಗೊಳಿಸಿ
ಹಾಗೆಯೇ ($reader->read()) ( if ($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA || $reader->nodeType == XMLReader::WHITESPACE || ") (ವಿರಾಮ;))

ಸದ್ಯಕ್ಕೆ, ಡಾಕ್ಯುಮೆಂಟ್‌ನ ಉಳಿದ ವಿಷಯವನ್ನು ನಿರ್ಲಕ್ಷಿಸಬಹುದು. (ನಾನು ನಂತರ ದೋಷ ನಿರ್ವಹಣೆಯನ್ನು ವಿವರಿಸಲು ಹೋಗುತ್ತೇನೆ.)

ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ

ಹೆಸರೇ ಸೂಚಿಸುವಂತೆ, XMLReader ಓದಲು ಮಾತ್ರ. ಅನುಗುಣವಾದ XMLWriter ವರ್ಗವು ಪ್ರಸ್ತುತ ಅಭಿವೃದ್ಧಿಯಲ್ಲಿದೆ, ಆದರೆ ಇನ್ನೂ ಸಿದ್ಧವಾಗಿಲ್ಲ. ಅದೃಷ್ಟವಶಾತ್, XML ಬರೆಯುವುದು ಅದನ್ನು ಓದುವುದಕ್ಕಿಂತ ಸುಲಭವಾಗಿದೆ. ಮೊದಲಿಗೆ, ನೀವು ಹೆಡರ್ () ಕಾರ್ಯವನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರತಿಕ್ರಿಯೆಯ ಮಾಧ್ಯಮ ಪ್ರಕಾರವನ್ನು ಹೊಂದಿಸಬೇಕು. XML-RPC ಗಾಗಿ ಇದು ಅಪ್ಲಿಕೇಶನ್/xml ಆಗಿದೆ. ಉದಾಹರಣೆಗೆ:

ಹೆಡರ್ ("ವಿಷಯ-ಪ್ರಕಾರ: ಅಪ್ಲಿಕೇಶನ್/xml");
ಪಟ್ಟಿ 6. XML ಮ್ಯಾಪಿಂಗ್
ಕಾರ್ಯ ಪ್ರತಿಕ್ರಿಯೆ ($ಇನ್ಪುಟ್) (ಪ್ರತಿಧ್ವನಿ " ". sqrt($input) ." "; }

ನೀವು HTML ನಲ್ಲಿ ಮಾಡುವಂತೆಯೇ ನೀವು ಉತ್ತರದ ಅಕ್ಷರದ ಭಾಗಗಳನ್ನು ನೇರವಾಗಿ PHP ಪುಟಕ್ಕೆ ಸೇರಿಸಬಹುದು. ಈ ತಂತ್ರಜ್ಞಾನವನ್ನು ಪಟ್ಟಿ 7 ರಲ್ಲಿ ತೋರಿಸಲಾಗಿದೆ.

ಪಟ್ಟಿ 7. ಲಿಟರಲ್ XML
ಕಾರ್ಯ ಪ್ರತಿಕ್ರಿಯೆ ($ಇನ್ಪುಟ್) ( ?> "

ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ದೋಷ

ಇಲ್ಲಿಯವರೆಗೆ, ಇನ್‌ಪುಟ್ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಸರಿಯಾಗಿ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಲಾಗಿದೆ ಎಂದು ಭಾವಿಸಲಾಗಿತ್ತು. ಆದಾಗ್ಯೂ, ಇದನ್ನು ಯಾರೂ ಖಾತರಿಪಡಿಸುವುದಿಲ್ಲ. ಯಾವುದೇ XML ಪಾರ್ಸರ್‌ನಂತೆ, ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ದೋಷವನ್ನು ಎದುರಿಸಿದ ತಕ್ಷಣ XMLReader ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಬೇಕು. ಇದು ಸಂಭವಿಸಿದಲ್ಲಿ, ಓದು() ಕಾರ್ಯವು ತಪ್ಪು ಎಂದು ಹಿಂತಿರುಗಿಸುತ್ತದೆ.

ಸಿದ್ಧಾಂತದಲ್ಲಿ, ಪಾರ್ಸರ್ ಎದುರಿಸುವ ಮೊದಲ ದೋಷದವರೆಗೆ ಡೇಟಾವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬಹುದು. ಸಣ್ಣ ದಾಖಲೆಗಳೊಂದಿಗಿನ ನನ್ನ ಪ್ರಯೋಗಗಳಲ್ಲಿ, ಅದು ತಕ್ಷಣವೇ ದೋಷವನ್ನು ಎದುರಿಸುತ್ತದೆ. ಆಧಾರವಾಗಿರುವ ಪಾರ್ಸರ್ ಡಾಕ್ಯುಮೆಂಟ್‌ನ ಹೆಚ್ಚಿನ ಭಾಗವನ್ನು ಪೂರ್ವ ಪಾರ್ಸ್ ಮಾಡುತ್ತದೆ, ಅದನ್ನು ಕ್ಯಾಶ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ನಂತರ ಅದನ್ನು ತುಂಡು ತುಂಡು ಮಾಡುತ್ತದೆ. ಹೀಗಾಗಿ, ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಪ್ರಾಥಮಿಕ ಹಂತದಲ್ಲಿ ದೋಷಗಳನ್ನು ಗುರುತಿಸುತ್ತದೆ. ಭದ್ರತಾ ಕಾರಣಗಳಿಗಾಗಿ, ಮೊದಲ ವಿನ್ಯಾಸ ದೋಷದ ಮೊದಲು ನೀವು ವಿಷಯ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಮಾಡಬಹುದು ಎಂಬ ಅಂಶಕ್ಕೆ ಜವಾಬ್ದಾರಿಯನ್ನು ತೆಗೆದುಕೊಳ್ಳದಿರುವುದು ಉತ್ತಮ. ಇದಲ್ಲದೆ, ಪಾರ್ಸರ್ ವಿಫಲಗೊಳ್ಳುವ ಮೊದಲು ನೀವು ಯಾವುದೇ ವಿಷಯವನ್ನು ನೋಡುವುದಿಲ್ಲ ಎಂದು ಭಾವಿಸಬೇಡಿ. ನೀವು ಸಂಪೂರ್ಣ, ಸರಿಯಾಗಿ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಲಾದ ಡಾಕ್ಯುಮೆಂಟ್‌ಗಳನ್ನು ಮಾತ್ರ ಸ್ವೀಕರಿಸಬೇಕಾದರೆ, ಡಾಕ್ಯುಮೆಂಟ್‌ನ ಕೊನೆಯವರೆಗೂ ಸ್ಕ್ರಿಪ್ಟ್ ಬದಲಾಯಿಸಲಾಗದ ಯಾವುದನ್ನೂ ಮಾಡುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.

ಪಾರ್ಸರ್ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ದೋಷವನ್ನು ಎದುರಿಸಿದರೆ, ಓದು() ಕಾರ್ಯವು ಇದೇ ರೀತಿಯ ದೋಷ ಸಂದೇಶವನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ (ವಿವರವಾದ ದೋಷ ವರದಿಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿದ್ದರೆ, ಅದು ಅಭಿವೃದ್ಧಿ ಸರ್ವರ್‌ನಲ್ಲಿರಬೇಕು):


ಎಚ್ಚರಿಕೆ: XMLReader::read() [function.read]:< value>10ಒಳಗೆ /var/www/root.phpಸಾಲಿನಲ್ಲಿ 35

ಬಳಕೆದಾರರಿಗೆ ಪ್ರಸ್ತುತಪಡಿಸಲಾದ HTML ಪುಟಕ್ಕೆ ವರದಿಯನ್ನು ನಕಲಿಸಲು ನೀವು ಬಯಸದೇ ಇರಬಹುದು. ದೋಷ ಸಂದೇಶವನ್ನು $php_errormsg ಪರಿಸರ ವೇರಿಯೇಬಲ್‌ನಲ್ಲಿ ಸೆರೆಹಿಡಿಯುವುದು ಉತ್ತಮ. ಇದನ್ನು ಮಾಡಲು, ನೀವು php.ini ಫೈಲ್‌ನಲ್ಲಿ track_errors ಕಾನ್ಫಿಗರೇಶನ್ ಆಯ್ಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು:

track_errors = ಆನ್

ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ, track_errors ಆಯ್ಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ, ಇದನ್ನು php.ini ನಲ್ಲಿ ಸ್ಪಷ್ಟವಾಗಿ ಹೇಳಲಾಗಿದೆ, ಆದ್ದರಿಂದ ಈ ಸಾಲನ್ನು ಬದಲಾಯಿಸಲು ಮರೆಯದಿರಿ. ನೀವು php.ini ನ ಪ್ರಾರಂಭಕ್ಕೆ ಮೇಲೆ ತೋರಿಸಿರುವ ಸಾಲನ್ನು ಸೇರಿಸಿದರೆ, ನಂತರ ಕೆಳಗಿನ ಸಾಲು track_errors = Off ಅದನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ.

ಈ ಪ್ರೋಗ್ರಾಂ ಸಂಪೂರ್ಣ, ಸರಿಯಾಗಿ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಿದ ಇನ್‌ಪುಟ್‌ಗೆ ಮಾತ್ರ ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಕಳುಹಿಸಬೇಕು. (ಸಹ ವಿಶ್ವಾಸಾರ್ಹ, ಆದರೆ ನಂತರ ಹೆಚ್ಚು.) ಹೀಗಾಗಿ, ಡಾಕ್ಯುಮೆಂಟ್ ವಿಶ್ಲೇಷಣೆ ಪೂರ್ಣಗೊಳ್ಳಲು ನೀವು ಕಾಯಬೇಕಾಗುತ್ತದೆ (ವೇಳೆ ಲೂಪ್‌ನಿಂದ ನಿರ್ಗಮಿಸುವುದು). $php_errormsg ಮೌಲ್ಯವು ಬದಲಾಗಿದೆಯೇ ಎಂದು ಈಗ ಪರಿಶೀಲಿಸಿ. ಇಲ್ಲದಿದ್ದರೆ, ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಸರಿಯಾಗಿ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು XML-RPC ಪ್ರತಿಕ್ರಿಯೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತದೆ. ವೇರಿಯೇಬಲ್ ಅನ್ನು ಹೊಂದಿಸಿದರೆ, ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಸರಿಯಾಗಿ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಲಾಗಿಲ್ಲ ಮತ್ತು XML-RPC ವೈಫಲ್ಯದ ಸಂಕೇತವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತದೆ ಎಂದರ್ಥ. ಋಣಾತ್ಮಕ ಸಂಖ್ಯೆಯ ವರ್ಗಮೂಲವನ್ನು ವಿನಂತಿಸಿದರೆ ವೈಫಲ್ಯದ ಸಂಕೇತವನ್ನು ಸಹ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. ಪಟ್ಟಿ 8 ನೋಡಿ.

ಪಟ್ಟಿ 8. ಸರಿಯಾದ ಫಾರ್ಮ್ಯಾಟಿಂಗ್‌ಗಾಗಿ ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ
// ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ $request = $HTTP_RAW_POST_DATA; ದೋಷ_ವರದಿ ಮಾಡುವಿಕೆ(E_ERROR | E_WARNING | E_PARSE); (isset($php_errormsg)) ಹೊಂದಿಸದಿದ್ದರೆ (($php_errormsg); // ರೀಡರ್ ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ರಚಿಸುವುದು (ರೀಡರ್) $ರೀಡರ್ = ಹೊಸ XMLReader(); // $reader->setRelaxNGschema("request.rng"); $reader- > XML($request); ಹಾಗೆಯೇ ($reader->read()) ( if ($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA || $reader->nodeType == XMLReader::WHITESPACE |. | " ) ( ಬ್ರೇಕ್; ) ) ಬ್ರೇಕ್; ) // (isset($php_errormsg)) ದೋಷ (21, $php_errormsg) ವೇಳೆ ಇನ್‌ಪುಟ್ ಮಾಹಿತಿಯ ಸರಿಯಾದ ಸ್ವರೂಪವನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ;< 0) fault(20, "Cannot take square root of negative number"); else respond($input);

ಸಾಮಾನ್ಯ XML ಸ್ಟ್ರೀಮ್ ಪ್ರಕ್ರಿಯೆ ಮಾದರಿಯ ಸರಳೀಕೃತ ಆವೃತ್ತಿ ಇಲ್ಲಿದೆ. ಪಾರ್ಸರ್ ಡೇಟಾ ರಚನೆಯನ್ನು ಜನಪ್ರಿಯಗೊಳಿಸುತ್ತದೆ, ಅದರ ಪ್ರಕಾರ ಡಾಕ್ಯುಮೆಂಟ್ ಕೊನೆಗೊಂಡಾಗ ಕ್ರಿಯೆಗಳನ್ನು ಮಾಡಲಾಗುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ ಡೇಟಾ ರಚನೆಯು ಡಾಕ್ಯುಮೆಂಟ್ಗಿಂತ ಸರಳವಾಗಿದೆ. ಇಲ್ಲಿ ಡೇಟಾ ರಚನೆಯು ವಿಶೇಷವಾಗಿ ಸರಳವಾಗಿದೆ: ಒಂದೇ ಸಾಲು.

ಮೌಲ್ಯೀಕರಣ

libxml ಆವೃತ್ತಿ

XMLReader ಅವಲಂಬಿಸಿರುವ libxml ನ ಆರಂಭಿಕ ಆವೃತ್ತಿಗಳು ಗಂಭೀರವಾದ RELAX NG ನ್ಯೂನತೆಗಳನ್ನು ಹೊಂದಿದ್ದವು. ನೀವು ಕನಿಷ್ಟ ಆವೃತ್ತಿ 2.06.26 ಅನ್ನು ಬಳಸುತ್ತಿರುವಿರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. Mac OS X ಟೈಗರ್ ಸೇರಿದಂತೆ ಹಲವು ವ್ಯವಸ್ಥೆಗಳು ನ್ಯೂನತೆಗಳೊಂದಿಗೆ ಹಿಂದಿನ ಬಿಡುಗಡೆಯನ್ನು ಒಳಗೊಂಡಿವೆ.

ಇಲ್ಲಿಯವರೆಗೆ, ಡೇಟಾವು ನಿಜವಾಗಿ ನಾನು ಭಾವಿಸುವ ಸ್ಥಳದಲ್ಲಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಲು ನಾನು ಹೆಚ್ಚು ಒತ್ತು ನೀಡಿಲ್ಲ. ಈ ಚೆಕ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಸುಲಭವಾದ ಮಾರ್ಗವೆಂದರೆ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ರೇಖಾಚಿತ್ರದೊಂದಿಗೆ ಹೋಲಿಸುವುದು. XMLReader RELAX NG ಸ್ಕೀಮಾ ವಿವರಣೆ ಭಾಷೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ; XML-RPC ವಿನಂತಿಯ ಈ ನಿರ್ದಿಷ್ಟ ರೂಪಕ್ಕೆ ಸರಳವಾದ RELAX NG ಸ್ಕೀಮಾವನ್ನು ಪಟ್ಟಿ 9 ತೋರಿಸುತ್ತದೆ.

ಪಟ್ಟಿ 9. XML-RPC ವಿನಂತಿ
ಚದರ

ಸ್ಕೀಮಾವನ್ನು ನೇರವಾಗಿ PHP ಸ್ಕ್ರಿಪ್ಟ್‌ಗೆ ಸೆಟ್‌ರಿಲಾಕ್ಸ್‌ಎನ್‌ಜಿಎಸ್‌ಕೆಮಾಸೋರ್ಸ್‌() ಬಳಸಿ ಅಕ್ಷರಶಃ ಸ್ಟ್ರಿಂಗ್‌ನಂತೆ ಸೇರಿಸಬಹುದು ಅಥವಾ ಬಾಹ್ಯ ಫೈಲ್ ಅಥವಾ URL ನಿಂದ setRelaxNGSchema() ಬಳಸಿ ಓದಬಹುದು. ಉದಾಹರಣೆಗೆ, ಪಟ್ಟಿ 9 ರ ವಿಷಯಗಳನ್ನು sqrt.rng ಫೈಲ್‌ನಲ್ಲಿ ಬರೆಯಲಾಗಿದೆ ಎಂದು ಭಾವಿಸಿದರೆ, ಸ್ಕೀಮಾ ಈ ರೀತಿ ಲೋಡ್ ಆಗುತ್ತದೆ:

ರೀಡರ್->ಸೆಟ್‌ರಿಲಾಕ್ಸ್‌ಎನ್‌ಜಿ ಸ್ಕೀಮಾ("sqrt.rng")

ಅದನ್ನು ಮಾಡು ಮೊದಲುನೀವು ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಪ್ರಾರಂಭಿಸುವುದಕ್ಕಿಂತ. ಪಾರ್ಸರ್ ಓದುವಾಗ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಸ್ಕೀಮಾದೊಂದಿಗೆ ಹೋಲಿಸುತ್ತಾನೆ. ಡಾಕ್ಯುಮೆಂಟ್ ಮಾನ್ಯವಾಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಲು, isValid() ಫಂಕ್ಷನ್ ಅನ್ನು ಕರೆ ಮಾಡಿ, ಡಾಕ್ಯುಮೆಂಟ್ ಮಾನ್ಯವಾಗಿದ್ದರೆ (ಈ ಹಂತದಲ್ಲಿ) ಸರಿ ಮತ್ತು ಇಲ್ಲದಿದ್ದರೆ ತಪ್ಪು ಎಂದು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಪಟ್ಟಿ 10 ಎಲ್ಲಾ ದೋಷ ನಿರ್ವಹಣೆಯನ್ನು ಒಳಗೊಂಡಿರುವ ಸಂಪೂರ್ಣ ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ತೋರಿಸುತ್ತದೆ. ಪ್ರೋಗ್ರಾಂ ಯಾವುದೇ ಮಾನ್ಯವಾದ ಇನ್‌ಪುಟ್ ಅನ್ನು ಸ್ವೀಕರಿಸಬೇಕು ಮತ್ತು ಸರಿಯಾದ ಮೌಲ್ಯಗಳನ್ನು ಹಿಂತಿರುಗಿಸಬೇಕು ಮತ್ತು ಎಲ್ಲಾ ತಪ್ಪಾದ ವಿನಂತಿಗಳನ್ನು ತಿರಸ್ಕರಿಸಬೇಕು. ಏನಾದರೂ ತಪ್ಪಾದಲ್ಲಿ XML-RPC ದೋಷವನ್ನು ಕಳುಹಿಸುವ ದೋಷ() ವಿಧಾನವನ್ನು ಸಹ ನಾನು ಸೇರಿಸಿದ್ದೇನೆ.

ಪಟ್ಟಿ 10. XML-RPC ವರ್ಗಮೂಲ ಬ್ಯಾಕೆಂಡ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಿ
ಚದರ "; ವೇಳೆ (!isset($HTTP_RAW_POST_DATA)) ( ದೋಷ(22, "ದಯವಿಟ್ಟು ಯಾವಾಗಲೂ_populate_raw_post_data = php.ini ನಲ್ಲಿ ಆನ್ ಆಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ); ) ಬೇರೆ ( // ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ $request = $HTTP_RAW_POST_DATA; EWER_reporting |(E_RORNORING | E_PARSE // ರೀಡರ್ ಅನ್ನು ರಚಿಸುವುದು = ಹೊಸ XMLReader ("request.rng") ($reader-> read()) ವೇಳೆ ($reader->nodeType == "ಡಬಲ್" && $reader->nodeType == XMLReader::ELEMENT) (ಆದರೆ ($reader->read()) ( if ($reader->nodeType = = XMLReader::TEXT ||. $reader->nodeType == XMLReader::CDATA || $reader::WHITESPACE ||. ; >isValid()) ದೋಷ (19, "ಅಮಾನ್ಯ ವಿನಂತಿ" ಇಲ್ಲದಿದ್ದರೆ ($ಇನ್ಪುಟ್)< 0) fault(20, "Cannot take square root of negative number"); else respond($input); $reader->ಮುಚ್ಚಿ (); ) ಕಾರ್ಯ ಪ್ರತಿಕ್ರಿಯೆ ($ಇನ್ಪುಟ್) ( ?> ತಪ್ಪು ಕೋಡ್ ". $ಕೋಡ್." ತಪ್ಪುಸ್ಟ್ರಿಂಗ್ ". $ಸಂದೇಶ." "; }

ಗುಣಲಕ್ಷಣಗಳು

ಸಾಮಾನ್ಯ ವಿಶ್ಲೇಷಣೆಯ ಸಮಯದಲ್ಲಿ ಗುಣಲಕ್ಷಣಗಳು ಗೋಚರಿಸುವುದಿಲ್ಲ. ಗುಣಲಕ್ಷಣಗಳನ್ನು ಓದಲು, ನೀವು ಅಂಶದ ಪ್ರಾರಂಭದಲ್ಲಿ ನಿಲ್ಲಿಸಬೇಕು ಮತ್ತು ಹೆಸರು ಅಥವಾ ಸಂಖ್ಯೆಯ ಮೂಲಕ ನಿರ್ದಿಷ್ಟ ಗುಣಲಕ್ಷಣಕ್ಕಾಗಿ ಪ್ರಶ್ನಿಸಬೇಕು.

ಪ್ರಸ್ತುತ ಅಂಶದಲ್ಲಿ ನೀವು ಹುಡುಕಲು ಬಯಸುವ ಗುಣಲಕ್ಷಣದ ಹೆಸರನ್ನು getAttribute() ಕಾರ್ಯಕ್ಕೆ ರವಾನಿಸಿ. ಉದಾಹರಣೆಗೆ, ಈ ಕೆಳಗಿನ ರಚನೆಯು ಪ್ರಸ್ತುತ ಅಂಶದ ಐಡಿ ಗುಣಲಕ್ಷಣವನ್ನು ವಿನಂತಿಸುತ್ತದೆ:

$id = $reader->getAttribute("id");

ಗುಣಲಕ್ಷಣವು ನೇಮ್‌ಸ್ಪೇಸ್‌ನಲ್ಲಿದ್ದರೆ, ಉದಾಹರಣೆಗೆ xlink:href , ನಂತರ getAttributeNS() ಅನ್ನು ಕರೆ ಮಾಡಿ ಮತ್ತು ಸ್ಥಳೀಯ ಹೆಸರು ಮತ್ತು ನೇಮ್‌ಸ್ಪೇಸ್ URI ಅನ್ನು ಕ್ರಮವಾಗಿ ಮೊದಲ ಮತ್ತು ಎರಡನೆಯ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳಾಗಿ ರವಾನಿಸಿ (ಪೂರ್ವಪ್ರತ್ಯಯವು ಅಪ್ರಸ್ತುತವಾಗುತ್ತದೆ). ಉದಾಹರಣೆಗೆ, ಈ ಹೇಳಿಕೆಯು http://www.w3.org/1999/xlink/ ನೇಮ್‌ಸ್ಪೇಸ್‌ನಲ್ಲಿ xlink:href ಗುಣಲಕ್ಷಣದ ಮೌಲ್ಯವನ್ನು ಪ್ರಶ್ನಿಸುತ್ತದೆ:

$href = $reader->getAttributeNS("href", "http://www.w3.org/1999/xlink/");

ಗುಣಲಕ್ಷಣವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದಿದ್ದರೆ, ಎರಡೂ ವಿಧಾನಗಳು ಖಾಲಿ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. (ಇದು ತಪ್ಪಾಗಿದೆ ಏಕೆಂದರೆ ಅವುಗಳು ಶೂನ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತವೆ. ಈ ಅನುಷ್ಠಾನವು ಗುಣಲಕ್ಷಣಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ಕಷ್ಟಕರವಾಗಿಸುತ್ತದೆ, ಅದರ ಮೌಲ್ಯವು ಖಾಲಿ ಸ್ಟ್ರಿಂಗ್ ಮತ್ತು ಯಾವುದೇ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿಲ್ಲ.)

ಗುಣಲಕ್ಷಣ ಕ್ರಮ

XML ದಾಖಲೆಗಳಲ್ಲಿ, ಗುಣಲಕ್ಷಣಗಳ ಕ್ರಮವು ಅಪ್ರಸ್ತುತವಾಗುತ್ತದೆ ಮತ್ತು ಪಾರ್ಸರ್ನಿಂದ ಸಂರಕ್ಷಿಸಲ್ಪಡುವುದಿಲ್ಲ. ಇದು ಅನುಕೂಲಕ್ಕಾಗಿ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಸೂಚಿಸಲು ಸಂಖ್ಯೆಗಳನ್ನು ಬಳಸುತ್ತದೆ. ಆರಂಭಿಕ ಟ್ಯಾಗ್‌ನಲ್ಲಿನ ಮೊದಲ ಗುಣಲಕ್ಷಣವು ಗುಣಲಕ್ಷಣ 1 ಆಗಿರುತ್ತದೆ, ಎರಡನೆಯದು ಗುಣಲಕ್ಷಣ 2, ಇತ್ಯಾದಿ ಎಂದು ಯಾವುದೇ ಗ್ಯಾರಂಟಿ ಇಲ್ಲ. ಗುಣಲಕ್ಷಣಗಳ ಕ್ರಮವನ್ನು ಅವಲಂಬಿಸಿರುವ ಕೋಡ್ ಅನ್ನು ಬರೆಯಬೇಡಿ.

ಒಂದು ಅಂಶದ ಎಲ್ಲಾ ಗುಣಲಕ್ಷಣಗಳನ್ನು ನೀವು ತಿಳಿದುಕೊಳ್ಳಬೇಕಾದರೆ, ಆದರೆ ಅವುಗಳ ಹೆಸರುಗಳು ಮುಂಚಿತವಾಗಿ ತಿಳಿದಿಲ್ಲದಿದ್ದರೆ, ಅಂಶದ ಮೇಲೆ ಓದುವ ಭಾಗವನ್ನು ಹೊಂದಿಸಿದಾಗ moveToNextAttribute() ಅನ್ನು ಕರೆ ಮಾಡಿ. ಪಾರ್ಸರ್ ಆಟ್ರಿಬ್ಯೂಟ್ ನೋಡ್‌ನಲ್ಲಿದ್ದರೆ, ನೀವು ಅದರ ಹೆಸರು, ನೇಮ್‌ಸ್ಪೇಸ್ ಮತ್ತು ಮೌಲ್ಯವನ್ನು ಅಂಶಗಳಿಗೆ ಬಳಸಿದ ಅದೇ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಓದಬಹುದು. ಉದಾಹರಣೆಗೆ, ಈ ಕೆಳಗಿನ ಕೋಡ್ ತುಣುಕು ಪ್ರಸ್ತುತ ಅಂಶದ ಎಲ್ಲಾ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಮುದ್ರಿಸುತ್ತದೆ:

ಒಂದು ವೇಳೆ ($reader->hasAttributes ಮತ್ತು $reader->nodeType == XMLReader::ELEMENT) (ಆದರೆ ($reader->moveToNextAttribute()) (echo $reader->ಹೆಸರು . "="" . $reader->ಮೌಲ್ಯ . ""\n"; ) ಪ್ರತಿಧ್ವನಿ "\n"; )

XML API ಗಾಗಿ ತುಂಬಾ ಅಸಾಮಾನ್ಯ, XMLReader ನಿಮಗೆ ಮೊದಲಿನಿಂದಲೂ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಓದಲು ಅನುಮತಿಸುತ್ತದೆ, ಒಂದೋ ಕೊನೆಯಿಂದಅಂಶ. ಡಬಲ್ ಎಣಿಕೆಯನ್ನು ತಪ್ಪಿಸಲು, ನೋಡ್ ಪ್ರಕಾರವು XMLReader::ELEMENT ಮತ್ತು XMLReader ಅಲ್ಲ::END_ELEMENT , ಇದು ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು ಮುಖ್ಯವಾಗಿದೆ.

ತೀರ್ಮಾನ

XMLReader PHP ಪ್ರೋಗ್ರಾಮರ್‌ನ ಟೂಲ್‌ಕಿಟ್‌ಗೆ ಉಪಯುಕ್ತ ಸೇರ್ಪಡೆಯಾಗಿದೆ. SimpleXML ಗಿಂತ ಭಿನ್ನವಾಗಿ, ಇದು ಪೂರ್ಣ XML ಪಾರ್ಸರ್ ಆಗಿದ್ದು ಅದು ಕೆಲವು ಡಾಕ್ಯುಮೆಂಟ್‌ಗಳನ್ನು ಮಾತ್ರ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದಿಲ್ಲ. DOM ಗಿಂತ ಭಿನ್ನವಾಗಿ, ಇದು ಲಭ್ಯವಿರುವ ಮೆಮೊರಿಗಿಂತ ದೊಡ್ಡದಾದ ದಾಖಲೆಗಳನ್ನು ನಿಭಾಯಿಸಬಲ್ಲದು. SAX ಗಿಂತ ಭಿನ್ನವಾಗಿ, ಇದು ಪ್ರೋಗ್ರಾಂ ಮೇಲೆ ನಿಯಂತ್ರಣವನ್ನು ಸ್ಥಾಪಿಸುತ್ತದೆ. PHP ಪ್ರೋಗ್ರಾಂಗಳು XML ಇನ್‌ಪುಟ್ ಅನ್ನು ಸ್ವೀಕರಿಸಬೇಕಾದರೆ, ನೀವು XMLReader ಅನ್ನು ಬಳಸುವುದನ್ನು ಗಂಭೀರವಾಗಿ ಪರಿಗಣಿಸಬೇಕು.

XML-RPC ಗೆ ಪರಿಚಯ

ಬಳಕೆದಾರರಿಗೆ ನಿರ್ದಿಷ್ಟ ಮಾಹಿತಿಯನ್ನು ಒದಗಿಸುವ ಹಲವಾರು ವಿಭಿನ್ನ ಸಂಪನ್ಮೂಲಗಳು ಅಂತರ್ಜಾಲದಲ್ಲಿವೆ. ಇದು ಸಾಮಾನ್ಯ ಸ್ಥಿರ ಪುಟಗಳ ಅರ್ಥವಲ್ಲ, ಆದರೆ, ಉದಾಹರಣೆಗೆ, ಡೇಟಾಬೇಸ್ ಅಥವಾ ಆರ್ಕೈವ್‌ಗಳಿಂದ ಮರುಪಡೆಯಲಾದ ಡೇಟಾವನ್ನು. ಇದು ಹಣಕಾಸಿನ ಡೇಟಾದ ಆರ್ಕೈವ್ ಆಗಿರಬಹುದು (ವಿನಿಮಯ ದರಗಳು, ಸೆಕ್ಯುರಿಟೀಸ್ ಉಲ್ಲೇಖಗಳ ಡೇಟಾ), ಹವಾಮಾನ ಡೇಟಾ ಅಥವಾ ಹೆಚ್ಚು ದೊಡ್ಡ ಮಾಹಿತಿ - ಸುದ್ದಿ, ಲೇಖನಗಳು, ವೇದಿಕೆಗಳಿಂದ ಸಂದೇಶಗಳು. ಅಂತಹ ಮಾಹಿತಿಯನ್ನು ಪುಟದ ಸಂದರ್ಶಕರಿಗೆ ಪ್ರಸ್ತುತಪಡಿಸಬಹುದು, ಉದಾಹರಣೆಗೆ, ಒಂದು ಫಾರ್ಮ್ ಮೂಲಕ, ವಿನಂತಿಯ ಪ್ರತಿಕ್ರಿಯೆಯಾಗಿ, ಅಥವಾ ಅದನ್ನು ಪ್ರತಿ ಬಾರಿ ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ರಚಿಸಬಹುದು. ಆದರೆ ತೊಂದರೆಯೆಂದರೆ, ಅಂತಹ ಮಾಹಿತಿಯು ಅಂತಿಮ ಬಳಕೆದಾರರಿಗೆ - ಒಬ್ಬ ವ್ಯಕ್ತಿಗೆ ಹೆಚ್ಚು ಅಗತ್ಯವಿಲ್ಲ, ಆದರೆ ಈ ಡೇಟಾವನ್ನು ಅವರ ಲೆಕ್ಕಾಚಾರಗಳು ಅಥವಾ ಇತರ ಅಗತ್ಯಗಳಿಗಾಗಿ ಬಳಸುವ ಇತರ ವ್ಯವಸ್ಥೆಗಳು ಮತ್ತು ಪ್ರೋಗ್ರಾಂಗಳಿಂದ.

ನಿಜವಾದ ಉದಾಹರಣೆ: ಕರೆನ್ಸಿ ಉಲ್ಲೇಖಗಳನ್ನು ಪ್ರದರ್ಶಿಸುವ ಬ್ಯಾಂಕಿಂಗ್ ವೆಬ್‌ಸೈಟ್‌ನ ಪುಟ. ನೀವು ಸಾಮಾನ್ಯ ಬಳಕೆದಾರರಾಗಿ ಪುಟವನ್ನು ಪ್ರವೇಶಿಸಿದರೆ, ಬ್ರೌಸರ್ ಮೂಲಕ, ನೀವು ಎಲ್ಲಾ ಪುಟ ವಿನ್ಯಾಸ, ಬ್ಯಾನರ್‌ಗಳು, ಮೆನುಗಳು ಮತ್ತು ಹುಡುಕಾಟದ ನಿಜವಾದ ಉದ್ದೇಶವನ್ನು "ಫ್ರೇಮ್" ಮಾಡುವ ಇತರ ಮಾಹಿತಿಯನ್ನು ನೋಡುತ್ತೀರಿ - ಕರೆನ್ಸಿ ಉಲ್ಲೇಖಗಳು. ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಸ್ಟೋರ್‌ಗೆ ನೀವು ಈ ಉಲ್ಲೇಖಗಳನ್ನು ನಮೂದಿಸಬೇಕಾದರೆ, ಅಗತ್ಯ ಡೇಟಾವನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ಅದನ್ನು ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ಮೂಲಕ ನಿಮ್ಮ ವೆಬ್‌ಸೈಟ್‌ಗೆ ವರ್ಗಾಯಿಸಲು ಬೇರೆ ಏನೂ ಉಳಿದಿಲ್ಲ. ಮತ್ತು ನೀವು ಇದನ್ನು ಪ್ರತಿದಿನ ಮಾಡಬೇಕು. ನಿಜವಾಗಿಯೂ ಹೊರಬರಲು ಯಾವುದೇ ಮಾರ್ಗವಿಲ್ಲವೇ?

ನೀವು ಸಮಸ್ಯೆಯನ್ನು ನೇರವಾಗಿ ಪರಿಹರಿಸಿದರೆ, ನಂತರ ಪರಿಹಾರವು ತಕ್ಷಣವೇ ಉದ್ಭವಿಸುತ್ತದೆ: ಡೇಟಾ ಅಗತ್ಯವಿರುವ ಪ್ರೋಗ್ರಾಂ (ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ಸ್ಕ್ರಿಪ್ಟ್) ಸರ್ವರ್‌ನಿಂದ “ನಿಯಮಿತ ಬಳಕೆದಾರ” ಎಂದು ಪುಟವನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ, ಪರಿಣಾಮವಾಗಿ html ಕೋಡ್ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಿ (ಪಾರ್ಸ್ ಮಾಡುತ್ತದೆ) ಮತ್ತು ಹೊರತೆಗೆಯುತ್ತದೆ ಅದರಿಂದ ಅಗತ್ಯ ಮಾಹಿತಿ. ಇದನ್ನು ನಿಯಮಿತ ನಿಯಮಿತ ಅಭಿವ್ಯಕ್ತಿಯೊಂದಿಗೆ ಅಥವಾ ಯಾವುದೇ html ಪಾರ್ಸರ್ ಬಳಸಿ ಮಾಡಬಹುದು. ವಿಧಾನದ ತೊಂದರೆಯು ಅದರ ನಿಷ್ಪರಿಣಾಮಕಾರಿತ್ವದಲ್ಲಿದೆ. ಮೊದಲನೆಯದಾಗಿ, ಡೇಟಾದ ಒಂದು ಸಣ್ಣ ಭಾಗವನ್ನು ಸ್ವೀಕರಿಸಲು (ಕರೆನ್ಸಿಗಳ ಮೇಲಿನ ಡೇಟಾ ಅಕ್ಷರಶಃ ಒಂದು ಡಜನ್ ಅಥವಾ ಎರಡು ಅಕ್ಷರಗಳು), ನೀವು ಸಂಪೂರ್ಣ ಪುಟವನ್ನು ಸ್ವೀಕರಿಸಬೇಕು, ಇದು ಕನಿಷ್ಠ ಹಲವಾರು ಹತ್ತಾರು ಕಿಲೋಬೈಟ್‌ಗಳು. ಎರಡನೆಯದಾಗಿ, ಪುಟದ ಕೋಡ್‌ನಲ್ಲಿ ಯಾವುದೇ ಬದಲಾವಣೆಯೊಂದಿಗೆ, ಉದಾಹರಣೆಗೆ, ವಿನ್ಯಾಸವು ಬದಲಾಗಿದೆ ಅಥವಾ ಬೇರೆ ಯಾವುದಾದರೂ, ನಮ್ಮ ಪಾರ್ಸಿಂಗ್ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಪುನಃ ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಮತ್ತು ಇದು ಸಾಕಷ್ಟು ಪ್ರಮಾಣದ ಸಂಪನ್ಮೂಲಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ.

ಆದ್ದರಿಂದ, ಅಭಿವರ್ಧಕರು ಒಂದು ನಿರ್ಧಾರಕ್ಕೆ ಬಂದರು - ಪಾರದರ್ಶಕ (ಪ್ರೋಟೋಕಾಲ್ ಮತ್ತು ಪ್ರಸರಣ ಮಧ್ಯಮ ಮಟ್ಟದಲ್ಲಿ) ಮತ್ತು ಯಾವುದೇ ಭಾಷೆಯಲ್ಲಿ ಬರೆಯಬಹುದಾದ ಪ್ರೋಗ್ರಾಂಗಳ ನಡುವೆ ಡೇಟಾವನ್ನು ಸುಲಭವಾಗಿ ವಿನಿಮಯ ಮಾಡಲು ಅನುಮತಿಸುವ ಕೆಲವು ರೀತಿಯ ಸಾರ್ವತ್ರಿಕ ಕಾರ್ಯವಿಧಾನವನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವುದು ಅವಶ್ಯಕ. ಮತ್ತು ಯಾವುದೇ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ ಅಡಿಯಲ್ಲಿ ಮತ್ತು ಯಾವುದೇ ಹಾರ್ಡ್‌ವೇರ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ನಲ್ಲಿ ರನ್ ಆಗುತ್ತದೆ. ಅಂತಹ ಕಾರ್ಯವಿಧಾನವನ್ನು ಈಗ ಜೋರಾಗಿ "ವೆಬ್ ಸೇವೆಗಳು" (ವೆಬ್-ಸೇವೆ), "SOAP", "ಸೇವಾ-ಆಧಾರಿತ ವಾಸ್ತುಶಿಲ್ಪ" ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಡೇಟಾ ವಿನಿಮಯಕ್ಕಾಗಿ, ತೆರೆದ ಮತ್ತು ಸಮಯ-ಪರೀಕ್ಷಿತ ಮಾನದಂಡಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ - ಸಂದೇಶಗಳನ್ನು ರವಾನಿಸಲು HTTP ಪ್ರೋಟೋಕಾಲ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ (ಇತರ ಪ್ರೋಟೋಕಾಲ್ಗಳನ್ನು ಬಳಸಬಹುದು - SMTP, ಉದಾಹರಣೆಗೆ). ಡೇಟಾವನ್ನು ಸ್ವತಃ (ನಮ್ಮ ಉದಾಹರಣೆಯಲ್ಲಿ, ವಿನಿಮಯ ದರಗಳು) ಕ್ರಾಸ್-ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಸ್ವರೂಪದಲ್ಲಿ ಪ್ಯಾಕ್ ಮಾಡಲಾಗುತ್ತದೆ - XML ​​ದಾಖಲೆಗಳ ರೂಪದಲ್ಲಿ. ಈ ಉದ್ದೇಶಕ್ಕಾಗಿ, ವಿಶೇಷ ಮಾನದಂಡವನ್ನು ಕಂಡುಹಿಡಿಯಲಾಯಿತು - SOAP.

ಹೌದು, ಈಗ ವೆಬ್ ಸೇವೆಗಳು, SOAP ಮತ್ತು XML ಎಲ್ಲರ ಬಾಯಲ್ಲೂ ಇವೆ, ಅವುಗಳು ಸಕ್ರಿಯವಾಗಿ ಕಾರ್ಯಗತಗೊಳ್ಳಲು ಪ್ರಾರಂಭಿಸಿವೆ ಮತ್ತು IBM ಮತ್ತು Microsoft ನಂತಹ ದೊಡ್ಡ ನಿಗಮಗಳು ವೆಬ್ ಸೇವೆಗಳ ಸಂಪೂರ್ಣ ಅನುಷ್ಠಾನಕ್ಕೆ ಸಹಾಯ ಮಾಡಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಹೊಸ ಉತ್ಪನ್ನಗಳನ್ನು ಬಿಡುಗಡೆ ಮಾಡುತ್ತಿವೆ.

ಆದರೆ! ಬ್ಯಾಂಕ್‌ನ ವೆಬ್‌ಸೈಟ್‌ನಿಂದ ಆನ್‌ಲೈನ್ ಸ್ಟೋರ್ ಎಂಜಿನ್‌ಗೆ ರವಾನಿಸಬೇಕಾದ ವಿನಿಮಯ ದರಗಳೊಂದಿಗೆ ನಮ್ಮ ಉದಾಹರಣೆಗಾಗಿ, ಅಂತಹ ಪರಿಹಾರವು ತುಂಬಾ ಕಷ್ಟಕರವಾಗಿರುತ್ತದೆ. ಎಲ್ಲಾ ನಂತರ, ಕೇವಲ SOAP ಮಾನದಂಡದ ವಿವರಣೆಯು ಅಶ್ಲೀಲ ಒಂದೂವರೆ ಸಾವಿರ ಪುಟಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ, ಮತ್ತು ಅದು ಅಷ್ಟೆ ಅಲ್ಲ. ಪ್ರಾಯೋಗಿಕ ಬಳಕೆಗಾಗಿ, ನೀವು ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಲೈಬ್ರರಿಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳೊಂದಿಗೆ ಹೇಗೆ ಕೆಲಸ ಮಾಡಬೇಕೆಂದು ಕಲಿಯಬೇಕಾಗುತ್ತದೆ (PHP 5.0 ನಿಂದ ಪ್ರಾರಂಭಿಸಿ ಇದು SOAP ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಲೈಬ್ರರಿಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ), ಮತ್ತು ನಿಮ್ಮ ಸ್ವಂತ ಕೋಡ್‌ನ ನೂರಾರು ಮತ್ತು ಸಾವಿರಾರು ಸಾಲುಗಳನ್ನು ಬರೆಯಿರಿ. ಮತ್ತು ಕೆಲವು ಅಕ್ಷರಗಳು ಮತ್ತು ಸಂಖ್ಯೆಗಳನ್ನು ಪಡೆಯಲು ಇದೆಲ್ಲವೂ ಬಹಳ ತೊಡಕಿನ ಮತ್ತು ಅಭಾಗಲಬ್ಧವಾಗಿದೆ.

ಆದ್ದರಿಂದ, ಮತ್ತೊಂದು ಇದೆ, ಒಬ್ಬರು ಹೇಳಬಹುದು, ಮಾಹಿತಿ ವಿನಿಮಯಕ್ಕಾಗಿ ಪರ್ಯಾಯ ಮಾನದಂಡ - XML-RPC. ಯೂಸರ್‌ಲ್ಯಾಂಡ್ ಸಾಫ್ಟ್‌ವೇರ್ ಇಂಕ್‌ನಿಂದ ಮೈಕ್ರೋಸಾಫ್ಟ್ ಭಾಗವಹಿಸುವಿಕೆಯೊಂದಿಗೆ ಇದನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಲಾಗಿದೆ ಮತ್ತು ಇಂಟರ್ನೆಟ್‌ನಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ನಡುವೆ ಏಕೀಕೃತ ಡೇಟಾ ವರ್ಗಾವಣೆಗಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ನೈಜ ವೆಬ್ ಸೇವೆಗಳ ಎಲ್ಲಾ "ಉದ್ಯಮ" ಸಾಮರ್ಥ್ಯಗಳು ಅಗತ್ಯವಿಲ್ಲದ ಸರಳ ಸೇವೆಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ ಇದು SOAP ಅನ್ನು ಬದಲಾಯಿಸಬಹುದು.

XML-RPC ಎಂಬ ಸಂಕ್ಷೇಪಣದ ಅರ್ಥವೇನು? RPC ಎಂದರೆ ರಿಮೋಟ್ ಪ್ರೊಸೀಜರ್ ಕರೆ. ಇದರರ್ಥ ಒಂದು ಅಪ್ಲಿಕೇಶನ್ (ಸರ್ವರ್‌ನಲ್ಲಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಅಥವಾ ಕ್ಲೈಂಟ್ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಸಾಮಾನ್ಯ ಅಪ್ಲಿಕೇಶನ್ ಆಗಿರಲಿ) ಭೌತಿಕವಾಗಿ ಅಳವಡಿಸಲಾದ ಮತ್ತು ಇನ್ನೊಂದು ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸುವ ವಿಧಾನವನ್ನು ಪಾರದರ್ಶಕವಾಗಿ ಬಳಸಬಹುದು. ರವಾನಿಸಲಾದ ಡೇಟಾವನ್ನು ವಿವರಿಸಲು ಸಾರ್ವತ್ರಿಕ ಸ್ವರೂಪವನ್ನು ಒದಗಿಸಲು XML ಅನ್ನು ಇಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ. ಸಾರಿಗೆಯಾಗಿ, ಸಂದೇಶಗಳನ್ನು ರವಾನಿಸಲು HTTP ಪ್ರೋಟೋಕಾಲ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ, ಇದು ಯಾವುದೇ ನೆಟ್ವರ್ಕ್ ಸಾಧನಗಳ ಮೂಲಕ ಡೇಟಾವನ್ನು ಮನಬಂದಂತೆ ವಿನಿಮಯ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ - ರೂಟರ್ಗಳು, ಫೈರ್ವಾಲ್ಗಳು, ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್ಗಳು.

ಆದ್ದರಿಂದ, ಬಳಸಲು ನೀವು ಹೊಂದಿರಬೇಕಾದದ್ದು: ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ವಿಧಾನಗಳನ್ನು ಒದಗಿಸುವ XML-RPC ಸರ್ವರ್, ಸರಿಯಾದ ವಿನಂತಿಯನ್ನು ರಚಿಸುವ ಮತ್ತು ಸರ್ವರ್ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬಲ್ಲ XML-RPC ಕ್ಲೈಂಟ್, ಮತ್ತು ಯಶಸ್ವಿ ಕಾರ್ಯಾಚರಣೆಗೆ ಅಗತ್ಯವಾದ ಸರ್ವರ್ ನಿಯತಾಂಕಗಳನ್ನು ಸಹ ತಿಳಿದಿರುತ್ತದೆ - ವಿಳಾಸ, ವಿಧಾನದ ಹೆಸರು ಮತ್ತು ಪಾಸ್ ಮಾಡಿದ ನಿಯತಾಂಕಗಳು.

XML-RPC ಯೊಂದಿಗಿನ ಎಲ್ಲಾ ಕೆಲಸಗಳು “ವಿನಂತಿ-ಪ್ರತಿಕ್ರಿಯೆ” ಮೋಡ್‌ನಲ್ಲಿ ಸಂಭವಿಸುತ್ತವೆ, ಇದು ತಂತ್ರಜ್ಞಾನ ಮತ್ತು SOAP ಮಾನದಂಡದ ನಡುವಿನ ವ್ಯತ್ಯಾಸಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ, ಅಲ್ಲಿ ವಹಿವಾಟಿನ ಪರಿಕಲ್ಪನೆಗಳು ಮತ್ತು ವಿಳಂಬಿತ ಕರೆಗಳನ್ನು ಮಾಡುವ ಸಾಮರ್ಥ್ಯ (ಸರ್ವರ್ ಉಳಿಸಿದಾಗ) ಇವೆ. ವಿನಂತಿ ಮತ್ತು ಭವಿಷ್ಯದಲ್ಲಿ ಒಂದು ನಿರ್ದಿಷ್ಟ ಸಮಯದಲ್ಲಿ ಅದಕ್ಕೆ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತದೆ). ಈ ಹೆಚ್ಚುವರಿ ವೈಶಿಷ್ಟ್ಯಗಳು ಶಕ್ತಿಯುತ ಕಾರ್ಪೊರೇಟ್ ಸೇವೆಗಳಿಗೆ ಹೆಚ್ಚು ಉಪಯುಕ್ತವಾಗಿವೆ, ಅವು ಸರ್ವರ್‌ಗಳ ಅಭಿವೃದ್ಧಿ ಮತ್ತು ಬೆಂಬಲವನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಸಂಕೀರ್ಣಗೊಳಿಸುತ್ತವೆ ಮತ್ತು ಕ್ಲೈಂಟ್ ಪರಿಹಾರಗಳ ಡೆವಲಪರ್‌ಗಳ ಮೇಲೆ ಹೆಚ್ಚುವರಿ ಅವಶ್ಯಕತೆಗಳನ್ನು ಇರಿಸುತ್ತವೆ.

XML-RPC ಯೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ವಿಧಾನವು ವಿನಂತಿಯನ್ನು ರೂಪಿಸುವುದರೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. ವಿಶಿಷ್ಟ ವಿನಂತಿಯು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

POST /RPC2 HTTP/1.0
ಬಳಕೆದಾರ-ಏಜೆಂಟ್: eshop-test/1.1.1 (FreeBSD)
ಹೋಸ್ಟ್: server.localnet.com
ವಿಷಯ-ಪ್ರಕಾರ: ಪಠ್ಯ/xml
ವಿಷಯ-ಉದ್ದ: 172



ಪರೀಕ್ಷಾ ವಿಧಾನ
ಹಲೋ XML-RPC!


ಮೊದಲ ಸಾಲುಗಳು ಪ್ರಮಾಣಿತ HTTP POST ವಿನಂತಿಯ ಹೆಡರ್ ಅನ್ನು ರೂಪಿಸುತ್ತವೆ. ಅಗತ್ಯವಿರುವ ನಿಯತಾಂಕಗಳು ಹೋಸ್ಟ್, ಡೇಟಾ ಪ್ರಕಾರ (MIME ಪ್ರಕಾರ), ಪಠ್ಯ/xml ಮತ್ತು ಸಂದೇಶದ ಉದ್ದವನ್ನು ಒಳಗೊಂಡಿರಬೇಕು. ಬಳಕೆದಾರ-ಏಜೆಂಟ್ ಕ್ಷೇತ್ರವನ್ನು ಭರ್ತಿ ಮಾಡಬೇಕು ಎಂದು ಮಾನದಂಡವು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ, ಆದರೆ ಅನಿಯಂತ್ರಿತ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿರಬಹುದು.

ಮುಂದೆ XML ಡಾಕ್ಯುಮೆಂಟ್‌ನ ಸಾಮಾನ್ಯ ಹೆಡರ್ ಬರುತ್ತದೆ. ವಿನಂತಿಯ ಮೂಲ ಅಂಶವಾಗಿದೆ , ಕೇವಲ ಒಂದು ಇರಬಹುದು, ಮತ್ತು ಮಕ್ಕಳಂತೆ ಅಂತಹ ನೋಡ್ಗಳನ್ನು ಹೊಂದಿರಬಾರದು. ಇದರರ್ಥ ಒಂದು ವಿನಂತಿಯು ಸರ್ವರ್‌ನಲ್ಲಿ ಒಂದು ವಿಧಾನವನ್ನು ಮಾತ್ರ ಕರೆಯಬಹುದು.

ಸಾಲು ಪರೀಕ್ಷಾ ವಿಧಾನನಾವು TestMetod ಎಂಬ ವಿಧಾನವನ್ನು ಕರೆಯುತ್ತಿದ್ದೇವೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ. ಅಗತ್ಯವಿದ್ದರೆ, ಇಲ್ಲಿ ನೀವು ವಿಧಾನವನ್ನು ಹೊಂದಿರುವ ಪ್ರೋಗ್ರಾಂ ಅಥವಾ ಮಾಡ್ಯೂಲ್‌ನ ಹೆಸರನ್ನು ಮತ್ತು ಅದರ ಮಾರ್ಗವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು. XML-RPC ಸ್ಪೆಸಿಫಿಕೇಶನ್, ಇದು ಒಂದು ವಿಧಾನವನ್ನು ಸೂಚಿಸಲು ಬಳಸಬಹುದಾದ ಅಕ್ಷರಗಳ ಸೆಟ್‌ಗೆ ಕೆಲವು ನಿರ್ಬಂಧಗಳನ್ನು ವಿಧಿಸುತ್ತದೆಯಾದರೂ, ಅವುಗಳನ್ನು ಹೇಗೆ ಅರ್ಥೈಸುವುದು ಎಂಬುದು ಸರ್ವರ್ ಅನುಷ್ಠಾನದ ಮೇಲೆ ಸಂಪೂರ್ಣವಾಗಿ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ.

ಮುಂದೆ, ಹರಡುವ ನಿಯತಾಂಕಗಳನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ. ಇದಕ್ಕಾಗಿ ಈ ವಿಭಾಗವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಇದು ಅನಿಯಂತ್ರಿತ ಸಂಖ್ಯೆಯ ಉಪ ಅಂಶಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು ಇದು ಟ್ಯಾಗ್‌ನಿಂದ ವಿವರಿಸಿದ ಪ್ಯಾರಾಮೀಟರ್ ಅನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ . ನಾವು ಪ್ಯಾರಾಮೀಟರ್‌ಗಳು ಮತ್ತು ಡೇಟಾ ಪ್ರಕಾರಗಳನ್ನು ಸ್ವಲ್ಪ ಮುಂದೆ ನೋಡುತ್ತೇವೆ. ನಮ್ಮ ಆವೃತ್ತಿಯಲ್ಲಿ, ವಿಧಾನವನ್ನು ಟ್ಯಾಗ್‌ನಲ್ಲಿ ಸುತ್ತುವರಿದ ಒಂದು ಸ್ಟ್ರಿಂಗ್ ಪ್ಯಾರಾಮೀಟರ್ ಅನ್ನು ರವಾನಿಸಲಾಗಿದೆ .

ಎಲ್ಲಾ ನಿಯತಾಂಕಗಳ ವಿವರಣೆಯನ್ನು ಮುಚ್ಚುವ ಟ್ಯಾಗ್‌ಗಳ ಮೂಲಕ ಅನುಸರಿಸಲಾಗುತ್ತದೆ. XML-RPC ಯಲ್ಲಿನ ವಿನಂತಿ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆಯು ಸಾಮಾನ್ಯ XML ಡಾಕ್ಯುಮೆಂಟ್‌ಗಳಾಗಿವೆ, ಆದ್ದರಿಂದ ಎಲ್ಲಾ ಟ್ಯಾಗ್‌ಗಳನ್ನು ಮುಚ್ಚಬೇಕು. ಆದರೆ XML-RPC ಯಲ್ಲಿ ಒಂದೇ ಟ್ಯಾಗ್‌ಗಳಿಲ್ಲ, ಆದರೂ ಅವು XML ಮಾನದಂಡದಲ್ಲಿವೆ.

ಈಗ ಸರ್ವರ್‌ನ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನೋಡೋಣ. HTTP ಪ್ರತಿಕ್ರಿಯೆ ಹೆಡರ್ ಸಾಮಾನ್ಯವಾಗಿದೆ, ವಿನಂತಿಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿದರೆ, ಸರ್ವರ್ HTTP/1.1 200 OK ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನೀಡುತ್ತದೆ. ವಿನಂತಿಯಲ್ಲಿರುವಂತೆಯೇ, ನೀವು MIME ಪ್ರಕಾರ, ಸಂದೇಶದ ಉದ್ದ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ ಉತ್ಪಾದನೆಯ ದಿನಾಂಕವನ್ನು ಸರಿಯಾಗಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು.

ಪ್ರತಿಕ್ರಿಯೆ ದೇಹವು ಈ ಕೆಳಗಿನಂತಿರುತ್ತದೆ:



ನಿಜ


ಈಗ ರೂಟ್ ಟ್ಯಾಗ್ ಬದಲಿಗೆ ಟ್ಯಾಗ್ ಅನ್ನು ಸೂಚಿಸಲಾಗುತ್ತದೆ , ಇದು ತಕ್ಷಣವೇ ವಿನಂತಿಯ ಪ್ರಕ್ರಿಯೆಯ ಫಲಿತಾಂಶಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ದುರದೃಷ್ಟವಶಾತ್, ಪ್ರತಿಕ್ರಿಯೆಯು ವಿಧಾನದ ಹೆಸರನ್ನು ರವಾನಿಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ನೀವು ಒಂದೇ ಸಮಯದಲ್ಲಿ ವಿಭಿನ್ನ ವಿಧಾನಗಳನ್ನು ಕರೆದರೆ ಗೊಂದಲವನ್ನು ತಪ್ಪಿಸಲು ಕ್ಲೈಂಟ್ ಬದಿಯಲ್ಲಿ ಅದನ್ನು ಸಂಗ್ರಹಿಸಬೇಕು.

ನಿಮ್ಮ ವಿನಂತಿಯನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ ದೋಷ ಸಂಭವಿಸಿದಲ್ಲಿ, ಬದಲಿಗೆ ಪ್ರತಿಕ್ರಿಯೆಯು ಅಂಶವನ್ನು ಹೊಂದಿರುತ್ತದೆ , ಇದರಲ್ಲಿ ದೋಷವನ್ನು ವಿವರಿಸುವ ರಚನೆಯನ್ನು ನೆಸ್ಟ್ ಮಾಡಲಾಗುತ್ತದೆ. ದೋಷ ವಿವರಣೆಯು ಸಂಖ್ಯಾ ದೋಷ ಕೋಡ್ ಮತ್ತು ಪಠ್ಯ ವಿವರಣೆಯನ್ನು ಒಳಗೊಂಡಿದೆ.

ಈಗ XML-RPC ಯಲ್ಲಿನ ಡೇಟಾ ಪ್ರಕಾರಗಳನ್ನು ಸಂಕ್ಷಿಪ್ತವಾಗಿ ನೋಡೋಣ. ಒಟ್ಟು 9 ಡೇಟಾ ಪ್ರಕಾರಗಳಿವೆ - ಏಳು ಸರಳ ಪ್ರಕಾರಗಳು ಮತ್ತು 2 ಸಂಕೀರ್ಣವಾದವುಗಳು. ಪ್ರತಿಯೊಂದು ಪ್ರಕಾರವನ್ನು ತನ್ನದೇ ಆದ ಟ್ಯಾಗ್ ಅಥವಾ ಟ್ಯಾಗ್‌ಗಳ ಸೆಟ್‌ನಿಂದ ವಿವರಿಸಲಾಗಿದೆ (ಸಂಕೀರ್ಣ ಪ್ರಕಾರಗಳಿಗೆ).

ಸರಳ ವಿಧಗಳು:

ಪೂರ್ಣ ಸಂಖ್ಯೆಗಳು- ಟ್ಯಾಗ್ ಅಥವಾ ;

ಬೂಲಿಯನ್ ಪ್ರಕಾರ- ಟ್ಯಾಗ್ , 0/1 ಮತ್ತು ಸರಿ/ತಪ್ಪು ಎರಡೂ ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು;

ASCII ಸ್ಟ್ರಿಂಗ್- ಟ್ಯಾಗ್ ಮೂಲಕ ವಿವರಿಸಲಾಗಿದೆ ಮತ್ತು ಅಕ್ಷರಗಳ ಅನಿಯಂತ್ರಿತ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಒಳಗೊಂಡಿರಬಹುದು;

ಫ್ಲೋಟಿಂಗ್ ಪಾಯಿಂಟ್ ಸಂಖ್ಯೆಗಳು- ಟ್ಯಾಗ್ , ಒಂದು ಸಂಖ್ಯೆಯ ಚಿಹ್ನೆಯನ್ನು ಸಹ ಹೊಂದಿರಬಹುದು, ಭಾಗಶಃ ಭಾಗವನ್ನು ಚುಕ್ಕೆಯಿಂದ ಬೇರ್ಪಡಿಸಲಾಗುತ್ತದೆ;

ದಿನಾಂಕ ಮತ್ತು ಸಮಯ- ಟ್ಯಾಗ್ ಮೂಲಕ ವಿವರಿಸಲಾಗಿದೆ ಮತ್ತು iso8601 ಸ್ವರೂಪವನ್ನು ಅನುಸರಿಸಬೇಕು. ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳಲ್ಲಿ ಹೆಚ್ಚಿನ ಪ್ರಕ್ರಿಯೆಗಾಗಿ, ಈ ಸ್ವರೂಪವು ಸ್ವಲ್ಪ ಅನಾನುಕೂಲವಾಗಿದೆ, ಆದ್ದರಿಂದ ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸುವಾಗ / ಸ್ವೀಕರಿಸುವಾಗ ಅದನ್ನು ಯಾವಾಗಲೂ ಪರಿವರ್ತಿಸಲಾಗುತ್ತದೆ. ಲೈಬ್ರರಿಯೊಳಗಿನ ವಿಶೇಷ ಕಾರ್ಯದಿಂದ ಇದನ್ನು ಮಾಡಬಹುದು, ಅಥವಾ ಯಾವುದೂ ಇಲ್ಲದಿದ್ದರೆ, ಡೆವಲಪರ್ ದಿನಾಂಕವನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಪರಿವರ್ತಿಸಬೇಕು.

ಕೊನೆಯ ಸರಳ ವಿಧವಾಗಿದೆ ಬೇಸ್ 64 ಎನ್ಕೋಡ್ ಮಾಡಿದ ಸ್ಟ್ರಿಂಗ್, ಇದು ಟ್ಯಾಗ್ ಮೂಲಕ ವಿವರಿಸಲಾಗಿದೆ . ಈ ಪ್ರಕಾರವು ಸಾರ್ವತ್ರಿಕವಾಗಿದೆ; ಕ್ಲೈಂಟ್ ಮತ್ತು ಸರ್ವರ್ ನಡುವೆ ಯಾವುದೇ ಡೇಟಾವನ್ನು ವರ್ಗಾಯಿಸಲು ಇದನ್ನು ಬಳಸಬಹುದು, ಆದಾಗ್ಯೂ ಅಂತಹ ಎನ್ಕೋಡಿಂಗ್ನಿಂದ ವರ್ಗಾವಣೆಗೊಂಡ ಡೇಟಾದ ಪ್ರಮಾಣವು ಹೆಚ್ಚಾಗುತ್ತದೆ. ಆದರೆ ಇದು ಪ್ರೋಟೋಕಾಲ್ ಮತ್ತು ನಿರ್ದಿಷ್ಟವಾಗಿ XML ಸ್ವರೂಪದ ಪಠ್ಯ ಸ್ವರೂಪದ ಪರಿಣಾಮವಾಗಿದೆ.

ಸಂಕೀರ್ಣ ಪ್ರಕಾರಗಳನ್ನು ರಚನೆಗಳು ಮತ್ತು ರಚನೆಗಳಿಂದ ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತದೆ. ರಚನೆಯನ್ನು ಮೂಲ ಅಂಶದಿಂದ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ , ಇದು ಅನಿಯಂತ್ರಿತ ಸಂಖ್ಯೆಯ ಅಂಶಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು , ರಚನೆಯ ಪ್ರತಿ ಸದಸ್ಯರನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವುದು. ರಚನೆಯ ಸದಸ್ಯರನ್ನು ಎರಡು ಟ್ಯಾಗ್‌ಗಳಿಂದ ವಿವರಿಸಲಾಗಿದೆ: ಮೊದಲನೆಯದು, , ಸದಸ್ಯರ ಹೆಸರನ್ನು ವಿವರಿಸುತ್ತದೆ, ಎರಡನೆಯದು, , ಸದಸ್ಯರ ಮೌಲ್ಯವನ್ನು ಒಳಗೊಂಡಿದೆ (ಡೇಟಾ ಪ್ರಕಾರವನ್ನು ವಿವರಿಸುವ ಟ್ಯಾಗ್ ಜೊತೆಗೆ).

ಅರೇಗಳಿಗೆ ಯಾವುದೇ ಹೆಸರುಗಳಿಲ್ಲ ಮತ್ತು ಟ್ಯಾಗ್ ಮೂಲಕ ವಿವರಿಸಲಾಗಿದೆ ಇದು ಒಂದು ಅಂಶವನ್ನು ಒಳಗೊಂಡಿದೆ , ಮತ್ತು ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಮಕ್ಕಳ ಅಂಶಗಳು , ಅಲ್ಲಿ ನಿರ್ದಿಷ್ಟ ಡೇಟಾವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ. ಒಂದು ಶ್ರೇಣಿಯು ಯಾವುದೇ ಕ್ರಮದಲ್ಲಿ ಯಾವುದೇ ಇತರ ಪ್ರಕಾರಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು, ಹಾಗೆಯೇ ಇತರ ಸರಣಿಗಳು, ಇದು ಬಹುಆಯಾಮದ ಸರಣಿಗಳನ್ನು ವಿವರಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ನೀವು ರಚನೆಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ಸಹ ವಿವರಿಸಬಹುದು. ಆದರೆ ರಚನೆಯು ಹೆಸರನ್ನು ಹೊಂದಿಲ್ಲ ಎಂಬ ಅಂಶವು ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ಸಂಕೀರ್ಣ ಡೇಟಾವನ್ನು ವರ್ಗಾಯಿಸಲು ಅದರ ಬಳಕೆಯನ್ನು ಸಂಕೀರ್ಣಗೊಳಿಸುತ್ತದೆ, ಅವುಗಳನ್ನು ಪದೇ ಪದೇ ಇತರ ಪ್ರಕಾರಗಳಲ್ಲಿ ಪ್ಯಾಕ್ ಮಾಡಬೇಕು (ಉದಾಹರಣೆಗೆ, ಹಲವಾರು ಸರಣಿಗಳನ್ನು ವರ್ಗಾಯಿಸಲು, ನೀವು ಪ್ರತಿ ರಚನೆಯನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಪ್ಯಾಕ್ ಮಾಡಬಹುದು. , ತದನಂತರ ಈ ರಚನೆಗಳಿಂದ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ರಚಿಸಿ).

ಸಹಜವಾಗಿ, ಅಂತಹ ಡೇಟಾ ಪ್ರಕಾರಗಳ ಪಟ್ಟಿಯು ತುಂಬಾ ಕಳಪೆಯಾಗಿದೆ ಮತ್ತು "ವಿಸ್ತರಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುವುದಿಲ್ಲ" ಎಂದು ಯಾರಾದರೂ ಹೇಳುತ್ತಾರೆ. ಹೌದು, ನೀವು ಸಂಕೀರ್ಣ ವಸ್ತುಗಳು ಅಥವಾ ಹೆಚ್ಚಿನ ಪ್ರಮಾಣದ ಡೇಟಾವನ್ನು ವರ್ಗಾಯಿಸಬೇಕಾದರೆ, ನಂತರ SOAP ಅನ್ನು ಬಳಸುವುದು ಉತ್ತಮ. ಮತ್ತು ಸಣ್ಣ, ಅಪೇಕ್ಷಿಸದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ, XML-RPC ಸಾಕಷ್ಟು ಸೂಕ್ತವಾಗಿದೆ, ಆಗಾಗ್ಗೆ ಅದರ ಸಾಮರ್ಥ್ಯಗಳು ಸಹ ತುಂಬಾ ಹೆಚ್ಚು! ನಿಯೋಜನೆಯ ಸುಲಭತೆಯನ್ನು ಪರಿಗಣಿಸಿ, ಯಾವುದೇ ಭಾಷೆ ಮತ್ತು ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗೆ ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಗ್ರಂಥಾಲಯಗಳು ಮತ್ತು PHP ನಲ್ಲಿ ವ್ಯಾಪಕ ಬೆಂಬಲ, ನಂತರ XML-RPC ಸಾಮಾನ್ಯವಾಗಿ ಯಾವುದೇ ಪ್ರತಿಸ್ಪರ್ಧಿಗಳನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ. ಸಾರ್ವತ್ರಿಕ ಪರಿಹಾರವಾಗಿ ತಕ್ಷಣವೇ ಶಿಫಾರಸು ಮಾಡಲಾಗದಿದ್ದರೂ - ಪ್ರತಿಯೊಂದು ನಿರ್ದಿಷ್ಟ ಪ್ರಕರಣದಲ್ಲಿ ಸಂದರ್ಭಗಳಿಗೆ ಅನುಗುಣವಾಗಿ ನಿರ್ಧರಿಸಬೇಕು.