
GitHub Actions वर्कफ़्लो सैंडबॉक्स CVE-2025-46820 प्रजनन के लिए
PHP के मूल DOMDocument के ऊपर निर्मित, यह प्रोजेक्ट आधुनिक DOM APIs तक पहुंच प्रदान करता है, जैसा कि आप ब्राउज़र में क्लाइंट-साइड कोड के साथ काम करते समय अपेक्षा करेंगे।
अपने सर्वर-साइड कोड में DOM हेरफेर करने से गतिशील पृष्ठों के निर्माण का तरीका बेहतर होता है। एक मानकीकृत ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस का उपयोग करने का मतलब है कि पृष्ठ को पहले से संसाधित किया जा सकता है, जिससे ब्राउज़र, वेबसर्वर और कंटेंट डिलीवरी नेटवर्क को लाभ होता है।
महत्वपूर्ण नोट: यहां दिखाया गया उदाहरण केवल चित्रण के उद्देश्य से है, लेकिन तत्वों के मानों में सीधे डेटा सेट करने के लिए DOM का उपयोग करना तर्क को दृश्य से कसकर जोड़ता है, जिसे खराब अभ्यास माना जाता है। कृपया DOM में डेटा बाइंडिंग के लिए अधिक मजबूत समाधान हेतु DomTemplate लाइब्रेरी देखें।
एक फॉर्म वाले पृष्ठ पर विचार करें, जिसमें आपका नाम दर्ज करने के लिए एक इनपुट तत्व है। जब फॉर्म सबमिट किया जाता है, तो पृष्ठ को आपको आपके नाम से अभिवादन करना चाहिए।
यह एक सरल उदाहरण है कि कैसे स्रोत HTML फ़ाइलों को टेम्पलेट के रूप में माना जा सकता है। इसे आसानी से अधिक उन्नत टेम्पलेट पृष्ठों पर लागू किया जा सकता है ताकि गतिशील सामग्री प्रदान की जा सके, बिना गैर-मानक तकनीकों जैसे {{कर्ली ब्रेसेस}} प्लेसहोल्डर के लिए, या PHP के भीतर से echo '<div class='easy-mistake'>' . $content['opa'] . '</div>' त्रुटि-प्रवण HTML निर्माण की आवश्यकता के बिना।
name.html)<!doctype html>
<h1>
Hello, <span class="name-output">you</span> !
</h1>
<form>
<input name="name" placeholder="Your name, please" required />
<button>Submit</button>
</form>
index.php)<?php
use Gt\Dom\HTMLDocument;
use Gt\Dom\HTMLElement\HTMLSpanElement;
require "vendor/autoload.php";
$html = file_get_contents("name.html");
$document = new HTMLDocument($html);
if(isset($_GET["name"])) {
$span = $document->querySelector(".name-output");
$span->innerText = $_GET["name"];
}
echo $document;
Element प्रकार सभी HTMLElement विनिर्देशों का प्रतिनिधित्व करता है, जैसे HTMLAnchorElement (<a>), HTMLButtonElement (<button>), HTMLInputElement (<input>), HTMLTableSectionElement (<thead>, <tbody>, <tfoot>), आदि। विशेष प्रकार का पता Element::getElementType() से लगाया जा सकता है, जो ElementType enum मानों में से एक लौटाता है।DOMException एक्सटेंशन, जैसे EnumeratedValueException, HierarchyRequestError, IndexSizeException, आदि।FileList, StyleSheet, VideoTrackList, WindowProxy, आदि के लिए क्लास शामिल हैं।Element::querySelector() और (Element::querySelectorAll()) के माध्यम सेClassList का उपयोग करके तत्वों के क्लास जोड़ें/हटाएं/टॉगल करेंElement::previousElementSibling, Element::nextElementSibling, Element::children और Element::lastElementChild और firstElementChild आदि के साथ केवल Element-नोड्स को ट्रैवर्स करें।HTMLDocument पर मानक गुण:
यह रिपॉजिटरी https://dom.spec.whatwg.org/ पर DOM विनिर्देश के जितना संभव हो उतना सटीक होने का लक्ष्य रखती है - v4.0.0 के अनुसार सभी कार्यक्षमता निम्नलिखित मामूली लेकिन अपरिहार्य मानक से विचलन के साथ लागू की गई है:
tagName संपत्ति अपरकेस में है।HTMLElement प्रकार की जांच करने के लिए, Element::getElementType() को कॉल किया जाना चाहिए - उदाहरण के लिए, instanceof के साथ उपयोग के लिए Element का कोई उपवर्ग उपलब्ध नहीं है।HTMLInputElement::files एक FileList लौटाता है जो उन सभी फ़ाइलों की गणना करता है जिन्हें उपयोगकर्ता ब्राउज़र के इंटरफ़ेस के माध्यम से चुनता है। इस प्रकार की कार्यक्षमता सर्वर-साइड पर लागू करना असंभव है, लेकिन विनिर्देश के साथ स्थिरता के लिए इसे स्टब किया गया है। इस लाइब्रेरी के भीतर क्लाइंट-साइड कार्यक्षमता का उपयोग करने का प्रयास ClientSideOnlyFunctionalityException फेंकता है।यह रिपॉजिटरी DOM विनिर्देश के जितना संभव हो उतना सटीक होने का इरादा रखती है। रिपॉजिटरी का एक एक्सटेंशन https://php.gt/domtemplate पर उपलब्ध है जो कस्टम तत्वों और टेम्पलेट विशेषताओं के माध्यम से पेज टेम्पलेटिंग और डेटा बाइंडिंग जोड़ता है, जो WebComponents जैसी सर्वरसाइड कार्यक्षमता पेश करता है।
PHP 8.4 के रिलीज़ के बाद से, PHP में मूल रूप से एक नया नेटिव HTMLDocument क्लास शामिल किया गया है। इसके नेटिव बाइंडिंग होने के कारण, सभी ऑपरेशन बहुत तेज़ हैं। PHPGT के Dom कार्यान्वयन को नए नेटिव कोड का उपयोग करने के लिए काम शुरू किया गया है। सौभाग्य से, DOM एक बहुत अच्छी तरह से परिभाषित मानक है, इसलिए जो भी हो, आपके कोड में न्यूनतम या कोई बदलाव की आवश्यकता नहीं होगी।
php84-benchmark शाखा पर बेंचमार्क स्वयं देखें: अधिकांश ऑपरेशनों में नेटिव कार्यान्वयन पर स्विच करके गति में 90% या उससे अधिक की वृद्धि दर्ज की गई है!
जब नेटिव क्लास के कार्यान्वयन की दिशा में अधिक काम किया जाएगा तो readme में अधिक जानकारी दी जाएगी।
ChildNode::remove()