jSQL इंजेक्शन वापरण्यासाठी सूचना, काली लिनक्समध्ये एसक्यूएल इंजेक्शन्स शोधण्यासाठी आणि त्यांचे शोषण करण्यासाठी एक मल्टीफंक्शनल साधन. एसक्यूएल इंजेक्शन शोधल्यानंतर फाइल ऑपरेशन्स

इतर मॉडेल 21.02.2019
इतर मॉडेल

cURL आहे विशेष साधन, जे URL वाक्यरचना वापरून फायली आणि डेटा हस्तांतरित करण्यासाठी डिझाइन केलेले आहे. हे तंत्रज्ञान HTTP, FTP, TELNET आणि इतर अनेक प्रोटोकॉल्सना समर्थन देते. cURL मूलतः एक साधन म्हणून डिझाइन केले होते कमांड लाइन. आमच्यासाठी सुदैवाने, cURL लायब्ररी भाषेद्वारे समर्थित आहे PHP प्रोग्रामिंग. या लेखात आम्ही कर्ल आणि कव्हरची काही प्रगत वैशिष्ट्ये पाहू व्यावहारिक वापर PHP वापरून ज्ञान मिळवले.

कर्ल का?

खरं तर, अनेक आहेत पर्यायी मार्गवेब पृष्ठ सामग्रीचे नमुने. बर्याच बाबतीत, मुख्यतः आळशीपणामुळे, मी साधे वापरले PHP फंक्शन्सकर्ल ऐवजी:

$content = file_get_contents("http://www.nettuts.com"); // किंवा $lines = फाइल("http://www.nettuts.com"); // किंवा वाचा फाइल("http://www.nettuts.com");

तथापि, या फंक्शन्समध्ये अक्षरशः लवचिकता नसते आणि त्रुटी हाताळणी इत्यादींच्या बाबतीत मोठ्या संख्येने कमतरता असतात. शिवाय, अशी काही कार्ये आहेत जी तुम्ही यासह सोडवू शकत नाही मानक कार्ये: कुकीजसह परस्परसंवाद, प्रमाणीकरण, फॉर्म सबमिशन, फाइल अपलोड इ.

cURL ही एक शक्तिशाली लायब्ररी आहे जी अनेकांना समर्थन देते विविध प्रोटोकॉल, पर्याय आणि प्रदान तपशीलवार माहितीURL विनंतीओह.

मूलभूत रचना

  • आरंभ करणे
  • पॅरामीटर्सची नियुक्ती
  • अंमलबजावणी आणि परिणाम आणणे
  • स्मृती मुक्त करणे

// 1. आरंभीकरण $ch = curl_init(); // 2. url curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com") सह पॅरामीटर्स निर्दिष्ट करा; curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. परिणाम म्हणून HTML मिळवा $output = curl_exec($ch); // 4. कनेक्शन बंद करा curl_close($ch);

पायरी # 2 (म्हणजे, curl_setopt()) या लेखात इतर सर्व चरणांपेक्षा जास्त चर्चा केली जाईल, कारण या टप्प्यावर, आपल्याला माहित असणे आवश्यक असलेल्या सर्व सर्वात मनोरंजक आणि उपयुक्त गोष्टी घडतात. CURL मध्ये मोठ्या संख्येने भिन्न पर्याय आहेत जे सर्वात काळजीपूर्वक URL विनंती कॉन्फिगर करण्यास सक्षम होण्यासाठी निर्दिष्ट करणे आवश्यक आहे. आम्ही संपूर्ण यादीचा विचार करणार नाही, परंतु या धड्यासाठी मला जे आवश्यक आणि उपयुक्त वाटते त्यावरच लक्ष केंद्रित करू. हा विषय तुम्हाला स्वारस्य असल्यास तुम्ही स्वतः इतर सर्व गोष्टींचा अभ्यास करू शकता.

त्रुटी तपासत आहे

याव्यतिरिक्त, आपण देखील वापरू शकता सशर्त विधानेयशस्वीतेसाठी ऑपरेशन तपासण्यासाठी:

// ... $आउटपुट = curl_exec($ch); जर ($आउटपुट === असत्य) ( echo "cURL त्रुटी: " . curl_error($ch); ) // ...

येथे मी तुम्हाला स्वतःसाठी लक्षात घेण्यास सांगतो महत्वाचा मुद्दा: आपण तुलना करण्यासाठी “== असत्य” ऐवजी “=== असत्य” वापरावे. ज्यांना माहिती नाही त्यांच्यासाठी, हे आम्हाला रिक्त परिणाम आणि बुलियन व्हॅल्यू असत्य यातील फरक ओळखण्यास मदत करेल, जे त्रुटी दर्शवेल.

माहिती घेत आहे

दुसरी अतिरिक्त पायरी म्हणजे कर्ल विनंती कार्यान्वित झाल्यानंतर त्याबद्दल डेटा प्राप्त करणे.

// ... curl_exec($ch); $info = curl_getinfo($ch); इको "घेतले". $माहिती["एकूण_वेळ"] . "url साठी सेकंद". $info["url"]; //…

परत केलेल्या ॲरेमध्ये खालील माहिती आहे:

  • "url"
  • "सामग्री_प्रकार"
  • "http_code"
  • "हेडर_आकार"
  • "विनंती_आकार"
  • "फाइलटाइम"
  • "ssl_verify_result"
  • "पुनर्निर्देशित_गणना"
  • "पूर्ण वेळ"
  • "namelookup_time"
  • "कनेक्ट_टाइम"
  • "हस्तांतरण_पूर्व वेळ"
  • "आकार_अपलोड"
  • "आकार_डाउनलोड"
  • "स्पीड_डाउनलोड"
  • "स्पीड_अपलोड"
  • "डाउनलोड_सामग्री_लांबी"
  • "अपलोड_सामग्री_लांबी"
  • "starttransfer_time"
  • "पुनर्निर्देशित_वेळ"

ब्राउझरवर अवलंबून पुनर्निर्देशन शोध

या पहिल्या उदाहरणामध्ये, आम्ही कोड लिहू जो आधारित URL पुनर्निर्देशने शोधू शकतो विविध सेटिंग्जब्राउझर उदाहरणार्थ, काही वेबसाइट ब्राउझर पुनर्निर्देशित करतात सेल फोन, किंवा इतर कोणतेही उपकरण.

आम्ही वापरकर्त्याच्या ब्राउझर नावासह आमचे आउटगोइंग HTTP शीर्षलेख परिभाषित करण्यासाठी CURLOPT_HTTPHEADER पर्याय वापरणार आहोत आणि उपलब्ध भाषा. अखेरीस आम्ही हे निर्धारित करण्यात सक्षम होऊ की कोणत्या साइट आम्हाला वेगवेगळ्या URL वर पुनर्निर्देशित करत आहेत.

// URL $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com" ची चाचणी करा; // चाचणी ब्राउझर $browsers = array("standard" => array ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5 .6 (.NET CLR 3.5.30729)", "language" => "en-us,en;q=0.5"), "iphone" => array ("user_agent" => "Mozilla/5.0 (iPhone; U ; CPU जसे Mac OS X => "Mozilla/4.0 (सुसंगत; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5")); foreach ($urls $url म्हणून) ( प्रतिध्वनी "URL: $url\n"; foreach ($browsers $test_name => $browser) ( $ch = curl_init(); // url curl_setopt($ch, CURLOPT_URL) निर्दिष्ट करा , $url); // ब्राउझर curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Accept-Language: ($browser["language"] साठी हेडर निर्दिष्ट करा )" )); // आम्हाला पृष्ठ सामग्रीची आवश्यकता नाही curl_setopt($ch, CURLOPT_NOBODY, 1); // आम्हाला HTTP शीर्षलेख curl_setopt($ch, CURLOPT_HEADER, 1); // आउटपुटऐवजी परिणाम परत करणे आवश्यक आहे curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_close($ch); , $matches) ( प्रतिध्वनी " $test_name: $matches\n" वर पुनर्निर्देशित करते; ) इतर ( प्रतिध्वनी "$test_name: कोणतेही पुनर्निर्देशन नाही\n"; ) ) प्रतिध्वनी "\n\n" )

प्रथम आम्ही सूचित करतो URL ची सूचीज्या साइट्स आम्ही तपासू. अधिक स्पष्टपणे, आम्हाला या साइट्सचे पत्ते आवश्यक आहेत. पुढे आपल्याला या प्रत्येक URL ची चाचणी करण्यासाठी ब्राउझर सेटिंग्ज परिभाषित करण्याची आवश्यकता आहे. यानंतर, आपण एक लूप वापरू ज्यामध्ये आपण प्राप्त केलेल्या सर्व परिणामांमधून जाऊ.

CURL सेटिंग्ज सेट करण्यासाठी आम्ही या उदाहरणात जी युक्ती वापरतो ती आम्हाला पृष्ठाची सामग्री नाही तर फक्त HTTP शीर्षलेख ($output मध्ये संग्रहित) मिळविण्याची अनुमती देईल. पुढे, एक साधा regex वापरून, प्राप्त शीर्षलेखांमध्ये “स्थान:” ही स्ट्रिंग उपस्थित होती की नाही हे आपण निर्धारित करू शकतो.

जेव्हा तुम्ही धावता हा कोड, तुम्हाला खालील परिणामासारखे काहीतरी मिळाले पाहिजे:

विशिष्ट URL वर POST विनंती तयार करणे

तयार करताना विनंती मिळवाप्रसारित केलेला डेटा URL वर "क्वेरी स्ट्रिंग" द्वारे पास केला जाऊ शकतो. उदाहरणार्थ, जेव्हा तुम्ही Google वर शोधता, तेव्हा शोध संज्ञा मध्ये स्थित असतात पत्ता लिहायची जागानवीन URL:

http://www.google.com/search?q=ruseller

अनुकरण करण्यासाठी ही विनंती, तुम्हाला कर्ल सुविधा वापरण्याची गरज नाही. आळस तुमच्यावर पूर्णपणे मात करत असल्यास, परिणाम मिळविण्यासाठी “file_get_contents()” फंक्शन वापरा.

पण गोष्ट अशी आहे की काही HTML फॉर्म सबमिट करतात पोस्ट विनंती s या फॉर्ममधील डेटा शरीराद्वारे वाहून नेला जातो HTTP विनंती, आणि मागील केस प्रमाणे नाही. उदाहरणार्थ, जर तुम्ही फोरमवर एक फॉर्म भरला आणि शोध बटणावर क्लिक केले, तर बहुधा POST विनंती केली जाईल:

http://codeigniter.com/forums/do_search/

आपण लिहू शकतो PHP स्क्रिप्ट, जे या प्रकारच्या विनंती URL चे अनुकरण करू शकते. प्रथम स्वीकारण्यासाठी आणि प्रदर्शित करण्यासाठी एक साधी फाइल तयार करूया पोस्ट डेटा. याला post_output.php म्हणू या:

Print_r($_POST);

मग आम्ही कर्ल विनंती करण्यासाठी PHP स्क्रिप्ट तयार करतो:

$url = "http://localhost/post_output.php"; $post_data = ॲरे ("foo" => "bar", "query" => "Nettuts", "कृती" => "सबमिट करा"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // सूचित करा की आमच्याकडे POST विनंती curl_setopt($ch, CURLOPT_POST, 1); // curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_data) व्हेरिएबल्स जोडा; $आउटपुट = curl_exec($ch); curl_close($ch); echo $output;

जेव्हा तुम्ही ही स्क्रिप्ट चालवता तेव्हा तुम्हाला असा परिणाम मिळावा:

अशाप्रकारे, POST विनंती post_output.php स्क्रिप्टवर पाठवली गेली, जी सुपरग्लोबल $_POST ॲरे आउटपुट करते, ज्याची सामग्री आम्ही cURL वापरून मिळवली.

फाइल अपलोड करत आहे

प्रथम, ती तयार करण्यासाठी फाईल तयार करूया आणि ती upload_output.php फाईलवर पाठवू:

Print_r($_FILES);

आणि येथे स्क्रिप्ट कोड आहे जो वरील कार्यक्षमता करतो:

$url = "http://localhost/upload_output.php"; $post_data = array ("foo" => "bar", // फाइल अपलोड करण्यासाठी "upload" => "@C:/wamp/www/test.zip"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $आउटपुट = curl_exec($ch); curl_close($ch); echo $output;

जेव्हा तुम्हाला फाइल अपलोड करायची असेल, तेव्हा तुम्हाला फक्त ती सामान्य पोस्ट व्हेरिएबल म्हणून पास करायची आहे, त्याच्या आधी @ चिन्ह असेल. जेव्हा तुम्ही लिखित स्क्रिप्ट चालवता तेव्हा तुम्हाला खालील परिणाम मिळतील:

एकाधिक कर्ल

सर्वात एक शक्ती cURL ही "एकाधिक" cURL हँडलर तयार करण्याची क्षमता आहे. हे तुम्हाला एकाच वेळी आणि असिंक्रोनस एकाधिक URL चे कनेक्शन उघडण्याची अनुमती देते.

क्लासिक आवृत्ती मध्ये cURL विनंतीस्क्रिप्ट कार्यान्वित करणे निलंबित केले आहे आणि स्क्रिप्ट चालू ठेवण्यापूर्वी URL विनंती ऑपरेशन पूर्ण होण्याची प्रतीक्षा करते. तुम्हाला संपूर्ण URL सह संवाद साधण्याचा इरादा असल्यास, यामुळे वेळेची लक्षणीय गुंतवणूक होईल, कारण क्लासिक आवृत्तीमध्ये तुम्ही एकावेळी एका URL सह कार्य करू शकता. तथापि, आम्ही त्याचे निराकरण करू शकतो ही परिस्थिती, विशेष हँडलर वापरून.

मी php.net वरून घेतलेला उदाहरण कोड पाहू:

// अनेक cURL संसाधने तयार करा $ch1 = curl_init(); $ch2 = curl_init(); // URL आणि इतर पॅरामीटर्स निर्दिष्ट करा curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt($ch2, CURLOPT_HEADER, 0); // एकाधिक cURL हँडलर तयार करा $mh = curl_multi_init(); //अनेक हँडलर जोडा curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $active = शून्य; // कार्यान्वित करा ( $mrc ​​= curl_multi_exec($mh, $active); ) तर ($mrc == CURLM_CALL_MULTI_PERFORM); ($active && $mrc ​​== CURLM_OK) ( जर (curl_multi_select($mh) != -1) ( do ( $mrc ​​= curl_multi_exec($mh, $active); ) तर ($mrc == CURLM_CALL_MULTI_PERFORM); ) // curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);

कल्पना अशी आहे की तुम्ही एकाधिक कर्ल हँडलर वापरू शकता. साध्या लूपचा वापर करून, कोणत्या विनंत्या अद्याप पूर्ण झाल्या नाहीत याचा मागोवा ठेवू शकता.

या उदाहरणात दोन मुख्य लूप आहेत. पहिला do-while लूप curl_multi_exec() फंक्शन कॉल करते. हे कार्य अवरोधित करण्यायोग्य नाही. हे शक्य तितक्या वेगाने चालते आणि विनंतीची स्थिती परत करते. जोपर्यंत परत केलेले मूल्य 'CURLM_CALL_MULTI_PERFORM' स्थिर आहे, तोपर्यंत याचा अर्थ कार्य अद्याप पूर्ण झालेले नाही (उदाहरणार्थ, मध्ये हा क्षणपाठवणे चालू आहे http शीर्षलेख URL मध्ये); म्हणूनच जोपर्यंत आम्हाला वेगळा निकाल मिळत नाही तोपर्यंत आम्ही हे परतावा मूल्य तपासत राहतो.

पुढील लूपमध्ये आपण $active = "true" व्हेरिएबल असताना स्थिती तपासू. हे curl_multi_exec() फंक्शनचे दुसरे पॅरामीटर आहे. जोपर्यंत विद्यमान बदल सक्रिय आहेत तोपर्यंत या व्हेरिएबलचे मूल्य "सत्य" असेल. पुढे आपण curl_multi_select() फंक्शन म्हणतो. प्रतिसाद प्राप्त होईपर्यंत, किमान एक सक्रिय कनेक्शन असताना त्याची अंमलबजावणी "अवरोधित" केली जाते. जेव्हा असे होते, तेव्हा आम्ही क्वेरी कार्यान्वित करणे सुरू ठेवण्यासाठी मुख्य लूपवर परत येतो.

आता आपण जे शिकलो ते एका उदाहरणावर लागू करूया जे खरोखर उपयोगी पडेल मोठ्या प्रमाणातलोकांचे.

वर्डप्रेस मध्ये दुवे तपासत आहे

यासह ब्लॉगची कल्पना करा एक मोठी रक्कमपोस्ट आणि मेसेज, त्यांपैकी प्रत्येकामध्ये लिंक्स असतात बाह्य इंटरनेटसंसाधने यापैकी काही लिंक्स विविध कारणेआधीच "मृत" असू शकते. कदाचित पृष्ठ हटविले गेले असेल किंवा साइट कदाचित कार्य करत नसेल.

आम्ही एक स्क्रिप्ट तयार करणार आहोत जी सर्व लिंक्सचे विश्लेषण करेल आणि लोड न होणाऱ्या वेबसाइट्स आणि 404 पृष्ठे शोधेल आणि नंतर आम्हाला तपशीलवार अहवाल देईल.

मी लगेच सांगेन की हे वर्डप्रेससाठी प्लगइन तयार करण्याचे उदाहरण नाही. आमच्या चाचण्यांसाठी हे एक उत्तम चाचणी मैदान आहे.

चला शेवटी सुरुवात करूया. प्रथम आपल्याला डेटाबेसमधून सर्व दुवे आणण्याची आवश्यकता आहे:

// कॉन्फिगरेशन $db_host = "स्थानिक होस्ट"; $db_user = "रूट"; $db_pass = ""; $db_name = "वर्डप्रेस"; $excluded_domains = array("localhost", "www.mydomain.com"); $max_connections = 10; // व्हेरिएबल्सचे आरंभीकरण $url_list = ॲरे(); $working_urls = ॲरे(); $dead_urls = ॲरे(); $not_found_urls = ॲरे(); $active = शून्य; // MySQL शी कनेक्ट करा जर (!mysql_connect($db_host, $db_user, $db_pass)) ( die("कनेक्ट करू शकलो नाही: " . mysql_error()); ) जर (!mysql_select_db($db_name)) ( die("Could db निवडू नका: " . mysql_error()); ) // $q = "wp_posts मधून post_content निवडा जिथे "%href=%" आणि post_status = "प्रकाशित करा" आणि post_type = "पोस्ट" या लिंक्स असलेल्या सर्व प्रकाशित पोस्ट निवडा "; $r = mysql_query($q) किंवा die(mysql_error()); तर ($d = mysql_fetch_assoc($r)) (// वापरून दुवे आणा नियमित अभिव्यक्तीजर (preg_match_all("!href=\"(.*?)\"!", $d["post_content"], $matches)) ( foreach ($ matches as $url) ( $tmp = parse_url($url) ; जर (in_array($tmp["host"], $excluded_domains) ( continue; ) $url_list = $url; ) // $url_list = array_values(array_unique($url_list)); जर (!$url_list) ( die("तपासण्यासाठी URL नाही"); )

प्रथम, आम्ही डेटाबेससह परस्परसंवादासाठी कॉन्फिगरेशन डेटा व्युत्पन्न करतो, त्यानंतर आम्ही डोमेनची सूची लिहितो जी चेकमध्ये सहभागी होणार नाहीत ($excluded_domains). आम्ही आमच्या स्क्रिप्टमध्ये ($max_connections) वापरणार असलेल्या कमाल एकाचवेळी जोडण्यांची संख्या दर्शविणारी संख्या देखील परिभाषित करतो. त्यानंतर आम्ही डेटाबेसमध्ये सामील होतो, लिंक्स असलेल्या पोस्ट्सची निवड करतो आणि त्यांना ॲरे ($url_list) मध्ये जमा करतो.

खालील कोड थोडासा क्लिष्ट आहे, त्यामुळे सुरुवातीपासून ते शेवटपर्यंत चाला:

// 1. एकाधिक हँडलर $mh = curl_multi_init(); // 2. ($i = 0; $i. साठी URL चा संच जोडा< $max_connections; $i++) { add_url_to_multi_handle($mh, $url_list); } // 3. инициализация выполнения do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 4. основной цикл while ($active && $mrc == CURLM_OK) { // 5. если всё прошло успешно if (curl_multi_select($mh) != -1) { // 6. делаем дело do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 7. если есть инфа? if ($mhinfo = curl_multi_info_read($mh)) { // это значит, что запрос завершился // 8. извлекаем инфу $chinfo = curl_getinfo($mhinfo["handle"]); // 9. мёртвая ссылка? if (!$chinfo["http_code"]) { $dead_urls = $chinfo["url"]; // 10. 404? } else if ($chinfo["http_code"] == 404) { $not_found_urls = $chinfo["url"]; // 11. рабочая } else { $working_urls = $chinfo["url"]; } // 12. чистим за собой curl_multi_remove_handle($mh, $mhinfo["handle"]); // в случае зацикливания, закомментируйте हा कॉल curl_close($mhinfo["हँडल"]); // 13. नवीन url जोडा आणि कार्य करणे सुरू ठेवा जर (add_url_to_multi_handle($mh, $url_list)) ( do ( $mrc ​​= curl_multi_exec($mh, $active); ) तर ($mrc == CURLM_CALL_MULTI_PERFORM); ) ) ) ) // 14. पूर्णता curl_multi_close($mh); echo "==डेड URLs==\n"; echo implode("\n",$dead_urls) . "\n\n"; echo "==404 URLs==\n"; echo implode("\n",$not_found_urls) . "\n\n"; echo "==कार्यरत URLs==\n"; echo implode("\n",$working_urls); फंक्शन add_url_to_multi_handle($mh, $url_list) ( static $index = 0; // जर आमच्याकडे अधिक url असतील ज्या पुनर्प्राप्त करणे आवश्यक आहे जर ($url_list[$index]) ( // new curl handler $ch = curl_init(); // url curl_setopt($ch, CURLOPT_URL, $url_list[$index]); निर्दिष्ट करा $mh, $ch);

येथे मी सर्वकाही तपशीलवार सांगण्याचा प्रयत्न करेन. सूचीतील संख्या टिप्पणीमधील संख्यांशी संबंधित आहेत.

  1. 1. एकाधिक हँडलर तयार करा;
  2. 2. आपण add_url_to_multi_handle() फंक्शन थोड्या वेळाने लिहू. प्रत्येक वेळी कॉल केल्यावर, नवीन url ची प्रक्रिया सुरू होईल. सुरुवातीला, आम्ही 10 ($max_connections) URL जोडतो;
  3. 3. प्रारंभ करण्यासाठी, आपण curl_multi_exec() फंक्शन चालवावे. जोपर्यंत ते CURLM_CALL_MULTI_PERFORM परत करत आहे, तोपर्यंत आम्हाला काहीतरी करायचे आहे. मुख्यतः कनेक्शन तयार करण्यासाठी आम्हाला याची आवश्यकता आहे;
  4. 4. पुढे मुख्य लूप येतो, जोपर्यंत आमच्याकडे किमान एक सक्रिय कनेक्शन असेल तोपर्यंत चालेल;
  5. 5. curl_multi_select() प्रतीक्षा करत आहे URL शोधपूर्ण होणार नाही;
  6. 6. पुन्हा एकदा, आम्हाला काही काम करण्यासाठी cURL मिळवणे आवश्यक आहे, म्हणजे रिटर्न प्रतिसाद डेटा आणणे;
  7. 7. माहिती येथे सत्यापित केली आहे. विनंती अंमलात आणण्याच्या परिणामी, ॲरे परत केला जाईल;
  8. 8. परत केलेल्या ॲरेमध्ये एक कर्ल हँडलर आहे. आम्ही त्याचा वापर वेगळ्या कर्ल विनंतीबद्दल माहिती निवडण्यासाठी करू;
  9. 9. जर लिंक मृत झाली असेल किंवा स्क्रिप्ट कालबाह्य झाली असेल, तर आम्ही कोणत्याही शोधू नये http कोडअ;
  10. 10. जर दुव्याने आम्हाला 404 पृष्ठ परत केले, तर http कोडमध्ये 404 मूल्य असेल;
  11. 11. बी अन्यथा, आमच्या समोर एक कार्यरत लिंक आहे. (तुम्ही एरर कोड 500 साठी अतिरिक्त चेक जोडू शकता, इ...);
  12. 12. पुढे आम्ही कर्ल हँडलर काढून टाकतो कारण आम्हाला आता त्याची गरज नाही;
  13. 13. आता आपण दुसरी url जोडू शकतो आणि आपण आधी बोललो ते सर्व चालवू शकतो;
  14. 14. या टप्प्यावर, स्क्रिप्ट त्याचे कार्य पूर्ण करते. आम्हाला आवश्यक नसलेल्या सर्व गोष्टी आम्ही काढून टाकू शकतो आणि अहवाल तयार करू शकतो;
  15. 15. शेवटी, आम्ही एक फंक्शन लिहू जे हँडलरला url जोडेल. स्टॅटिक व्हेरिएबल $इंडेक्स प्रत्येक वेळी वाढवले ​​जाईल हे कार्यम्हटले जाईल.

मी वापरले ही स्क्रिप्टमाझ्या ब्लॉगवर (काही तुटलेल्या दुव्यांसह, जे मी त्याच्या कार्याची चाचणी घेण्यासाठी हेतुपुरस्सर जोडले आहे) आणि खालील परिणाम मिळाले:

माझ्या बाबतीत, स्क्रिप्टला 40 URL मध्ये क्रॉल करण्यासाठी 2 सेकंदांपेक्षा थोडा कमी वेळ लागला. अधिक काम करताना उत्पादकता वाढ लक्षणीय आहे मोठी रक्कम URL पत्ते. तुम्ही एकाच वेळी दहा कनेक्शन उघडल्यास, स्क्रिप्ट दहापट वेगाने कार्यान्वित करू शकते.

इतर उपयुक्त कर्ल पर्यायांबद्दल काही शब्द

HTTP प्रमाणीकरण

चालू असल्यास URL पत्तातुमच्याकडे HTTP प्रमाणीकरण असल्यास, तुम्ही खालील स्क्रिप्ट सहजपणे वापरू शकता:

$url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // वापरकर्तानाव आणि पासवर्ड निर्दिष्ट करा curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // जर पुनर्निर्देशनाला परवानगी असेल तर curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // नंतर आमचा डेटा cURL curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1) मध्ये जतन करा; $आउटपुट = curl_exec($ch); curl_close($ch);

FTP अपलोड

PHP मध्ये FTP सह कार्य करण्यासाठी लायब्ररी देखील आहे, परंतु येथे CURL साधने वापरण्यापासून काहीही प्रतिबंधित करत नाही:

// फाइल उघडा $file = fopen("/path/to/file", "r"); // url मध्ये खालील सामग्री असावी $url = "ftp://username: [ईमेल संरक्षित]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_close($ch);

प्रॉक्सी वापरणे

तुम्ही तुमची URL विनंती प्रॉक्सीद्वारे करू शकता:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // पत्ता निर्दिष्ट करा curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // जर तुम्हाला वापरकर्तानाव आणि पासवर्ड प्रदान करायचा असेल curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $आउटपुट = curl_exec($ch); curl_close($ch);

कॉलबॅक कार्ये

एक फंक्शन निर्दिष्ट करणे देखील शक्य आहे जे cURL विनंती पूर्ण होण्यापूर्वीच ट्रिगर केले जाईल. उदाहरणार्थ, प्रतिसाद सामग्री लोड होत असताना, तुम्ही डेटा पूर्णपणे लोड होण्याची वाट न पाहता वापरणे सुरू करू शकता.

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://net.tutsplus.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function"); curl_exec($ch); curl_close($ch); फंक्शन प्रोग्रेस_फंक्शन($ch,$str) ( echo $str; रिटर्न strlen($str); )

यासारख्या फंक्शनने स्ट्रिंगची लांबी परत करणे आवश्यक आहे, जी एक आवश्यकता आहे.

निष्कर्ष

आज आम्ही शिकलो की तुम्ही तुमच्या मध्ये cURL लायब्ररी कशी वापरू शकता स्वार्थी हेतूने. मला आशा आहे की तुम्हाला हा लेख आवडला असेल.

धन्यवाद! तुमचा दिवस चांगला जावो!

तर, चला सुरुवात करूया. प्रथम, आपल्याला नेमके काय करायचे आहे ते ठरवूया. जेव्हा तुम्ही लिंकवर क्लिक करता तेव्हा क्लिकची संख्या मोजण्यासाठी, आम्हाला क्लिक मोजण्यासाठी एक विशेष स्क्रिप्ट वापरावी लागते आणि नंतर अभ्यागताला त्याला स्वारस्य असलेली माहिती प्रदान करावी लागते (पुनर्निर्देशित आवश्यक फाइल). तत्वतः, अनुक्रम (क्लिक करून आणि माहिती प्रदर्शित करून) उलट केला जाऊ शकतो, परंतु लक्षात ठेवा की जर काउंटरचा वापर फाइल डाउनलोड मोजण्यासाठी केला जात असेल, तर फाइल डाउनलोड केल्यानंतर स्क्रिप्ट कार्यान्वित करण्यासाठी, तुम्हाला लिहावे लागेल. एक विशेष फाइल डाउनलोडर स्क्रिप्ट. तुला कशाला गरज आहे अनावश्यक समस्या? ऑपरेशनचे समान तत्त्व भेट काउंटरवर लागू होईल. या प्रकरणात, पृष्ठ लोडिंगला गती देण्यासाठी, आपण पुनर्निर्देशित न करता करू शकता आणि लोडिंग पृष्ठामध्ये फक्त काउंटर कोड घालू शकता.

असे दिसते की आम्ही ते शोधून काढले आहे, बरोबर? बरं, आता आमच्या सर्व कल्पना अंमलात आणण्यासाठी साध्या कोडचे पृथक्करण सुरू करूया. उदाहरणाच्या साधेपणासाठी, आणि स्क्रिप्ट कोणत्याही होस्टिंगवर कार्य करू शकते म्हणून, आम्ही डेटा फाइलमध्ये संग्रहित करू.


$f = fopen(" stat.dat","a+");
कळप($f ,LOCK_EX);
$count =fread($f,100);
@$count++;
ftruncate($f ,0);
fwrite($f ,$count);
फ्लश($f);
कळप($f ,LOCK_UN);
fclose($f);

होय, तुम्ही ते बरोबर वाचले आहे, ही संपूर्ण स्क्रिप्ट आहे. आता ते काय आणि कसे कार्य करते ते शोधूया.

कोडची पहिली ओळ आहे $f =fopen(" stat.dat","a+"); आम्ही फाइल उघडतो stat.datवाचन आणि लेखनासाठी, आम्ही ते फाइल व्हेरिएबल $f शी जोडतो. ही फाईल आहे जी काउंटरच्या स्थितीबद्दल डेटा संग्रहित करेल. योग्य ऑपरेशनसाठी, मी तुम्हाला या फाईलसाठी 777 किंवा तत्सम पूर्ण वाचन आणि लेखन प्रवेशासह प्रवेश अधिकार सेट करण्याचा सल्ला देतो.

पुढील ओळ flock($f ,LOCK_EX) आहे; स्क्रिप्ट कार्य करण्यासाठी खूप महत्वाचे आहे. ती काय करत आहे? हे स्क्रिप्ट चालू असताना (किंवा ती काढून टाकेपर्यंत) इतर स्क्रिप्ट्स किंवा याच्या प्रतींसाठी फाइलमध्ये प्रवेश अवरोधित करते. हे इतके महत्त्वाचे का आहे? चला एका परिस्थितीची कल्पना करूया: ज्या क्षणी user1 क्लिक मोजणी स्क्रिप्ट लाँच करणाऱ्या लिंकवर क्लिक करतो, तेव्हा user2 त्याच लिंकवर क्लिक करतो, त्याच स्क्रिप्टची प्रत लाँच करतो. तुम्ही खाली पाहाल त्याप्रमाणे, user1 ने लाँच केलेली स्क्रिप्ट कोणत्या टप्प्यावर आहे यावर अवलंबून, user2 ने लॉन्च केलेली स्क्रिप्ट आणि त्याच्या कॉपीच्या समांतर चालणारी स्क्रिप्ट काउंटरला शून्यावर रीसेट करू शकते. जवळजवळ सर्व नवशिक्या PHP प्रोग्रामर समान काउंटर तयार करताना ही चूक करतात. आता, मला वाटते की आम्हाला फाइलमध्ये प्रवेश का अवरोधित करण्याची आवश्यकता आहे हे स्पष्ट आहे - इन या प्रकरणात user2 ने लाँच केलेली स्क्रिप्ट user1 ने लाँच केलेली स्क्रिप्ट पूर्ण होईपर्यंत प्रतीक्षा करेल (यामुळे पेज लोड होण्याचा वेग कमी होईल याची भीती बाळगू नका - अगदी धीमे सर्व्हर देखील ही स्क्रिप्ट एका सेकंदाच्या शंभरावा भागामध्ये कार्यान्वित करतात).

कोडच्या तिसऱ्या ओळीसह $count =fread($f ,100); सर्व स्पष्ट. आपण काउंटर व्हॅल्यू $count व्हेरिएबलमध्ये वाचतो.

आता आपल्याला फाइलमध्ये अपडेट केलेला डेटा लिहायचा आहे. हे करण्यासाठी, तुम्हाला प्रथम ftruncate($f ,0) फाइल साफ करावी लागेल; मी ज्याबद्दल बोललो त्या काउंटर रीसेटिंगसह धोकादायक परिस्थिती येथेच उद्भवू शकते. तथापि, आम्ही फाईल लॉकिंग वापरतो, त्यामुळे घाबरण्याचे काहीच नाही.

काउंटर मूल्य fwrite($f ,$count ) बद्दल अपडेट केलेला डेटा लिहा;

सुरक्षित राहण्यासाठी, आम्ही या फाईल fflush($f) साठी I/O बफर सक्तीने साफ करतो;

फाइल फ्लॉकमधून लॉक काढा($f ,LOCK_UN); खरं तर, तुम्हाला ते काढण्याची गरज नाही - फाइल बंद केल्यावर ती आपोआप काढून टाकली जाते. तथापि, उदाहरणाच्या पूर्णतेसाठी, मी तरीही ते लिहिले.

फाइल बंद करणे fclose($f); आवश्यक कार्य देखील नाही कारण स्क्रिप्टद्वारे उघडलेल्या सर्व फाइल्स, पूर्ण झाल्यानंतर, आपोआप बंद होतात. परंतु पुन्हा, उदाहरणाच्या पूर्णतेसाठी... =) याव्यतिरिक्त, स्क्रिप्ट येथे संपत नसल्यास, आणि आपल्याला यापुढे फाइलसह कार्य करण्याची आवश्यकता नसल्यास, फाइल त्वरित बंद करण्याची शिफारस केली जाते.

ठीक आहे आता सर्व संपले आहे. जसे आपण पाहू शकता, हे सर्व कठीण नाही. आता भेटींची संख्या मोजण्यासाठी, फक्त हा कोड पृष्ठावर पेस्ट करा. आणि जर तुम्हाला फाइलच्या डाउनलोड्सची संख्या मोजायची असेल, तर हा कोड वेगळ्या PHP फाइलमध्ये घाला, फाइलच्या नावातील दुवा या स्क्रिप्टच्या दुव्यासह पुनर्स्थित करा आणि डाउनलोड फाइलच्या शेवटी एक पुनर्निर्देशन जोडा. पटकथा. हे PHP मध्ये उत्तम प्रकारे केले जाते: हेडर(" स्थान:/download_dir/file_to_download.rar");

अरे हो. तुम्हाला काउंटर मूल्य देखील प्रदर्शित करणे आवश्यक आहे, अन्यथा मोजण्यात काही अर्थ नाही =). अर्थात, आम्ही फाइलमधून मूल्ये घेतो. आपण हे काउंटरच्या उदाहरणाप्रमाणे करू शकता:

$f = fopen(" stat.dat","a+");
कळप($f ,LOCK_EX);
$count =fread($f ,100);
कळप($f ,LOCK_UN);
fclose($f);

इको "डाउनलोड्स/क्लिक्सची संख्या: $count";

डाउनलोड केलेली फाइल डबल क्लिक करून चालवा (तुमच्याकडे व्हर्च्युअल मशीन असणे आवश्यक आहे).

3. SQL इंजेक्शनसाठी साइट तपासताना अनामिकता

Kali Linux मध्ये Tor आणि Privoxy सेट करत आहे

[विभाग विकासाधीन]

Windows वर Tor आणि Privoxy सेट करत आहे

[विभाग विकासाधीन]

jSQL इंजेक्शन मध्ये प्रॉक्सी सेटिंग्ज

[विभाग विकासाधीन]

4. jSQL इंजेक्शनसह SQL इंजेक्शनसाठी साइट तपासत आहे

प्रोग्रामसह कार्य करणे अत्यंत सोपे आहे. फक्त वेबसाइट पत्ता प्रविष्ट करा आणि ENTER दाबा.

खालील स्क्रीनशॉट दर्शवितो की साइट तीन प्रकारच्या SQL इंजेक्शन्ससाठी असुरक्षित आहे (त्यांच्याबद्दलची माहिती खालच्या उजव्या कोपर्यात दर्शविली आहे). इंजेक्शनच्या नावांवर क्लिक करून तुम्ही वापरलेली पद्धत बदलू शकता:

तसेच, विद्यमान डेटाबेस आम्हाला आधीच प्रदर्शित केले गेले आहेत.

आपण प्रत्येक सारणीची सामग्री पाहू शकता:

सामान्यतः, टेबलांबद्दल सर्वात मनोरंजक गोष्ट म्हणजे प्रशासक क्रेडेन्शियल्स.

जर तुम्ही भाग्यवान असाल आणि तुम्हाला प्रशासकाचा डेटा सापडला तर आनंद करणे खूप लवकर आहे. हा डेटा कुठे एंटर करायचा हे तुम्हाला अजूनही ॲडमिन पॅनल शोधण्याची गरज आहे.

5. jSQL इंजेक्शनसह प्रशासक पॅनेल शोधा

हे करण्यासाठी, पुढील टॅबवर जा. येथे आम्हाला संभाव्य पत्त्यांच्या यादीसह स्वागत आहे. तपासण्यासाठी तुम्ही एक किंवा अधिक पृष्ठे निवडू शकता:

आपल्याला इतर प्रोग्राम वापरण्याची आवश्यकता नाही या वस्तुस्थितीत सोय आहे.

दुर्दैवाने, असे बरेच निष्काळजी प्रोग्रामर नाहीत जे स्पष्ट मजकूरात संकेतशब्द संग्रहित करतात. बऱ्याचदा पासवर्ड लाइनमध्ये आपण असे काहीतरी पाहतो

8743b52063cd84097a65d1633f5c74f5

हे एक हॅश आहे. ब्रूट फोर्स वापरून तुम्ही ते डिक्रिप्ट करू शकता. आणि... jSQL इंजेक्शनमध्ये अंगभूत ब्रूट फोर्स आहे.

6. jSQL इंजेक्शन वापरून ब्रूट फोर्स हॅश

निःसंशय सुविधा अशी आहे की आपल्याला इतर प्रोग्राम्स शोधण्याची आवश्यकता नाही. बर्याच लोकप्रिय हॅशसाठी समर्थन आहे.

हा सर्वोत्तम पर्याय नाही. डिकोडिंग हॅशमध्ये गुरू होण्यासाठी, रशियन भाषेतील "" पुस्तकाची शिफारस केली जाते.

पण, अर्थातच, जेव्हा इतर कोणताही कार्यक्रम हातात नसतो किंवा अभ्यासासाठी वेळ नसतो, तेव्हा jSQL इंजेक्शन त्याच्या अंगभूत ब्रूट फोर्स फंक्शनसह खूप उपयुक्त ठरेल.

सेटिंग्ज आहेत: पासवर्डमध्ये कोणते वर्ण समाविष्ट केले जातील, पासवर्ड लांबी श्रेणी तुम्ही सेट करू शकता.

7. SQL इंजेक्शन्स शोधल्यानंतर फाइल ऑपरेशन्स

डेटाबेससह ऑपरेशन्स व्यतिरिक्त - ते वाचणे आणि सुधारणे, जर एसक्यूएल इंजेक्शन्स आढळल्यास, खालील फाइल ऑपरेशन्स केल्या जाऊ शकतात:

  • सर्व्हरवर फायली वाचत आहे
  • सर्व्हरवर नवीन फाइल्स अपलोड करत आहे
  • सर्व्हरवर शेल अपलोड करत आहे

आणि हे सर्व jSQL इंजेक्शन मध्ये लागू केले आहे!

निर्बंध आहेत - SQL सर्व्हरकडे फाइल विशेषाधिकार असणे आवश्यक आहे. स्मार्ट सिस्टम प्रशासकांनी त्यांना अक्षम केले आहे आणि ते फाइल सिस्टममध्ये प्रवेश मिळवू शकणार नाहीत.

फाइल विशेषाधिकारांची उपस्थिती तपासणे अगदी सोपे आहे. एका टॅबवर जा (फायली वाचणे, शेल तयार करणे, नवीन फाइल अपलोड करणे) आणि निर्दिष्ट केलेल्या ऑपरेशन्सपैकी एक करण्याचा प्रयत्न करा.

आणखी एक अतिशय महत्त्वाची टीप - आपण ज्या फाईलसह कार्य करू त्याचा अचूक मार्ग आपल्याला माहित असणे आवश्यक आहे - अन्यथा काहीही कार्य करणार नाही.

खालील स्क्रीनशॉट पहा:

फाईलवर ऑपरेट करण्याचा कोणताही प्रयत्न करण्यासाठी, आम्हाला खालील प्रतिसाद प्राप्त होतो: FILE विशेषाधिकार नाही(कोणतेही फाइल विशेषाधिकार नाहीत). आणि येथे काहीही केले जाऊ शकत नाही.

त्याऐवजी तुम्हाला दुसरी त्रुटी असल्यास:

[directory_name] मध्ये लिहिण्यात समस्या

याचा अर्थ असा की तुम्ही फाइल लिहू इच्छित असलेला निरपेक्ष मार्ग चुकीचा निर्दिष्ट केला आहे.

निरपेक्ष मार्गाचा अंदाज लावण्यासाठी, तुम्हाला किमान सर्व्हर चालत असलेली ऑपरेटिंग सिस्टम माहित असणे आवश्यक आहे. हे करण्यासाठी, नेटवर्क टॅबवर स्विच करा.

असा रेकॉर्ड (ओळ Win64) आम्ही Windows OS शी व्यवहार करत आहोत असे मानण्याचे कारण देतो:

Keep-Alive: timeout=5, max=99 सर्व्हर: Apache/2.4.17 (Win64) PHP/7.0.0RC6 कनेक्शन: Keep-Alive पद्धत: HTTP/1.1 200 OK सामग्री-लांबी: 353 तारीख: शुक्र, 11 डिसेंबर 2015 11:48:31 GMT X-द्वारे समर्थित: PHP/7.0.0RC6 सामग्री-प्रकार: मजकूर/html; charset=UTF-8

येथे आमच्याकडे काही युनिक्स (*BSD, Linux):

हस्तांतरण-एनकोडिंग: खंडित तारीख: शुक्र, 11 डिसेंबर 2015 11:57:02 GMT पद्धत: HTTP/1.1 200 OK Keep-Alive: timeout=3, max=100 कनेक्शन: Keep-alive सामग्री-प्रकार: मजकूर/html X- द्वारा समर्थित: PHP/5.3.29 सर्व्हर: Apache/2.2.31 (Unix)

आणि येथे आमच्याकडे CentOS आहे:

पद्धत: HTTP/1.1 200 ओके कालबाह्य होईल: गुरु, 19 नोव्हेंबर 1981 08:52:00 GMT सेट-कुकी: PHPSESSID=9p60gtunrv7g41iurr814h9rd0; path=/ कनेक्शन: Keep-alive X-Cache-Lookup: MISS from t1.hoster.ru:6666 सर्व्हर: Apache/2.2.15 (CentOS) X-Powered by: PHP/5.4.37 X-Cache: MISS from t1.hoster.ru कॅशे-कंट्रोल: नो-स्टोअर, नो-कॅशे, मस्ट-रिव्हॅलिडेट, पोस्ट-चेक=0, प्री-चेक=0 प्राग्मा: नो-कॅशे तारीख: शुक्र, 11 डिसेंबर 2015 12:08:54 GMT हस्तांतरण-एनकोडिंग: खंडित सामग्री-प्रकार: मजकूर/html; charset=WINDOWS-1251

विंडोजवर, साइटसाठी एक सामान्य फोल्डर आहे C:\सर्व्हर\data\htdocs\. परंतु, खरं तर, जर एखाद्याने विंडोजवर सर्व्हर बनवण्याचा "विचार" केला असेल, तर बहुधा, या व्यक्तीने विशेषाधिकारांबद्दल काहीही ऐकले नाही. म्हणून, तुम्ही थेट C:/Windows/ डिरेक्ट्रीमधून प्रयत्न करायला सुरुवात केली पाहिजे:

जसे आपण पाहू शकता, सर्वकाही प्रथमच ठीक झाले.

पण jSQL इंजेक्शन शेल्स स्वतःच माझ्या मनात शंका निर्माण करतात. तुमच्याकडे फाइल विशेषाधिकार असल्यास, तुम्ही वेब इंटरफेससह सहजपणे काहीतरी अपलोड करू शकता.

8. SQL इंजेक्शनसाठी साइट्सची मोठ्या प्रमाणात तपासणी

आणि हे कार्य jSQL Injection मध्ये देखील उपलब्ध आहे. सर्व काही अत्यंत सोपे आहे - साइट्सची सूची डाउनलोड करा (फाइलमधून आयात केली जाऊ शकते), तुम्हाला ज्यांना तपासायचे आहे ते निवडा आणि ऑपरेशन सुरू करण्यासाठी योग्य बटण क्लिक करा.

jSQL इंजेक्शन पासून निष्कर्ष

jSQL इंजेक्शन हे वेबसाइट्सवर आढळणारे SQL इंजेक्शन शोधण्यासाठी आणि नंतर वापरण्यासाठी एक चांगले, शक्तिशाली साधन आहे. त्याचे निःसंशय फायदे: वापरणी सोपी, अंगभूत संबंधित कार्ये. वेबसाइट्सचे विश्लेषण करताना jSQL Injection हा नवशिक्याचा सर्वात चांगला मित्र असू शकतो.

कमतरतांपैकी, मी डेटाबेस संपादित करण्याची अशक्यता लक्षात घेईन (किमान मला ही कार्यक्षमता सापडली नाही). सर्व GUI साधनांप्रमाणे, या प्रोग्रामचा एक तोटा स्क्रिप्टमध्ये वापरल्या जाण्याच्या अक्षमतेला कारणीभूत ठरू शकतो. तरीसुद्धा, या प्रोग्राममध्ये काही ऑटोमेशन देखील शक्य आहे - वस्तुमान साइट स्कॅनिंगच्या अंगभूत कार्याबद्दल धन्यवाद.

jSQL इंजेक्शन प्रोग्राम sqlmap पेक्षा वापरण्यास अधिक सोयीस्कर आहे. परंतु sqlmap अधिक प्रकारच्या SQL इंजेक्शन्सना समर्थन देते, फाइल फायरवॉल आणि काही इतर फंक्शन्ससह कार्य करण्यासाठी पर्याय आहेत.

तळ ओळ: jSQL इंजेक्शन हा नवशिक्या हॅकरचा सर्वात चांगला मित्र आहे.

काली लिनक्स एनसायक्लोपीडियामध्ये या प्रोग्रामसाठी मदत या पृष्ठावर आढळू शकते: http://kali.tools/?p=706

हा लेख बऱ्याच काळापूर्वी पुन्हा लिहायला हवा होता (खूप “सामन्यांवर बचत”), परंतु मी कधीच त्याकडे जाऊ शकलो नाही. आपण आपल्या तारुण्यात किती मूर्ख आहोत याची आठवण करून द्या.
कोणत्याही इंटरनेट संसाधनाच्या यशासाठी मुख्य निकषांपैकी एक म्हणजे त्याच्या ऑपरेशनची गती आणि दरवर्षी वापरकर्ते या निकषाच्या दृष्टीने अधिकाधिक मागणी करत आहेत. PHP स्क्रिप्ट्सचे ऑपरेशन ऑप्टिमाइझ करणे ही सिस्टम गती सुनिश्चित करण्याच्या पद्धतींपैकी एक आहे.
या लेखात, मी स्क्रिप्ट ऑप्टिमायझेशनवरील टिपा आणि तथ्यांचा माझा संग्रह लोकांसमोर मांडू इच्छितो. संग्रह संकलित करण्यासाठी मला बराच वेळ लागला आणि तो अनेक स्त्रोत आणि वैयक्तिक प्रयोगांवर आधारित आहे.
कठोर नियमांऐवजी टिपा आणि तथ्यांचा संग्रह का? कारण, मी पाहिल्याप्रमाणे, "पूर्णपणे योग्य ऑप्टिमायझेशन" नाही. अनेक तंत्रे आणि नियम परस्परविरोधी आहेत आणि त्या सर्वांचे पालन करणे अशक्य आहे. सुरक्षितता आणि सुविधेशी तडजोड न करता वापरण्यास स्वीकारार्ह असलेल्या पद्धतींचा संच तुम्हाला निवडावा लागेल. मी शिफारसीय स्थान घेतले आहे आणि म्हणून माझ्याकडे सल्ला आणि तथ्ये आहेत ज्यांचे तुम्ही अनुसरण करू शकता किंवा करू शकत नाही.
गोंधळ टाळण्यासाठी, मी सर्व टिपा आणि तथ्ये 3 गटांमध्ये विभागली:

  • कोड ऑप्टिमायझेशन
  • निरुपयोगी ऑप्टिमायझेशन
गट सशर्त नियुक्त केले जातात आणि काही आयटम एकाच वेळी त्यापैकी अनेकांना श्रेय दिले जाऊ शकतात. संख्या सरासरी सर्व्हर (LAMP) साठी आहेत. लेख विविध तृतीय-पक्ष तंत्रज्ञान आणि फ्रेमवर्कच्या प्रभावीतेशी संबंधित समस्यांवर चर्चा करत नाही, कारण हा स्वतंत्र चर्चेचा विषय आहे.

ऍप्लिकेशन लॉजिक आणि संस्थेच्या पातळीवर ऑप्टिमायझेशन

या ऑप्टिमायझेशन गटाशी संबंधित अनेक टिपा आणि तथ्ये खूप महत्त्वपूर्ण आहेत आणि खूप मोठा वेळ मिळवून देतात.
  • कोडमधील अडथळे ओळखण्यासाठी तुमचा कोड सर्व्हर (xdebug) आणि क्लायंट (फायरबग) वर सतत प्रोफाइल करा.
    हे लक्षात घ्यावे की सर्व्हर आणि क्लायंट दोन्ही भाग प्रोफाइल करणे आवश्यक आहे, कारण सर्व सर्व्हर त्रुटी सर्व्हरवरच शोधल्या जाऊ शकत नाहीत.
  • प्रोग्राममध्ये वापरल्या जाणाऱ्या वापरकर्त्याच्या फंक्शन्सची संख्या कोणत्याही प्रकारे गतीवर परिणाम करत नाही
    हे प्रोग्रामला असंख्य सानुकूल कार्ये वापरण्यास अनुमती देते.
  • सानुकूल वैशिष्ट्यांचा सक्रिय वापर करा
    आतील फंक्शन्स ऑपरेशन्स केवळ स्थानिक व्हेरिएबल्ससह चालविल्या जातात या वस्तुस्थितीमुळे सकारात्मक परिणाम प्राप्त होतो. याचा परिणाम कस्टम फंक्शन कॉलच्या खर्चापेक्षा जास्त आहे.
  • PHP विस्ताराच्या रूपात तृतीय-पक्ष प्रोग्रामिंग भाषेत "क्रिटिकली हेवी" फंक्शन्स अंमलात आणण्याचा सल्ला दिला जातो.
    यासाठी तृतीय-पक्षाच्या भाषेत प्रोग्रामिंग कौशल्ये आवश्यक आहेत, जे विकासाच्या वेळेत लक्षणीय वाढ करते, परंतु त्याच वेळी PHP च्या क्षमतेच्या पलीकडे तंत्रांचा वापर करण्यास अनुमती देते.
  • स्थिर एचटीएमएल फाइलवर प्रक्रिया करणे हे व्याख्या केलेल्या php फाइलपेक्षा वेगवान आहे
    क्लायंटवरील वेळेतील फरक सुमारे 1 सेकंद असू शकतो, त्यामुळे PHP टूल्सद्वारे व्युत्पन्न केलेल्या पृष्ठांपासून स्थिर पृष्ठे स्पष्टपणे विभक्त करणे अर्थपूर्ण आहे.
  • प्रक्रिया केलेल्या (कनेक्ट केलेल्या) फाईलचा आकार गतीवर परिणाम करतो
    प्रत्येक 2 KB वर प्रक्रिया करण्यासाठी अंदाजे 0.001 सेकंद खर्च केले जातात. ही वस्तुस्थिती आम्हाला स्क्रिप्ट कोड प्रोडक्शन सर्व्हरवर हस्तांतरित करताना कमी करण्यास प्रवृत्त करते.
  • गरज_एकदा किंवा समाविष्ट_एकदा न वापरण्याचा प्रयत्न करा
    जेव्हा फाइल पुन्हा वाचणे शक्य असेल तेव्हा ही फंक्शन्स वापरली जावीत, आवश्यक आणि समाविष्ट करण्याचा सल्ला दिला जातो;
  • अल्गोरिदमची शाखा बनवताना, जर अशी बांधकामे असतील ज्यावर प्रक्रिया केली जाऊ शकत नाही आणि त्यांची व्हॉल्यूम सुमारे 4 KB किंवा त्याहून अधिक असेल, तर ते समाविष्ट वापरून समाविष्ट करणे अधिक इष्टतम आहे.
  • क्लायंटवर पाठवलेल्या डेटाचे सत्यापन वापरणे चांगले
    हे या वस्तुस्थितीमुळे आहे की क्लायंटच्या बाजूने डेटा तपासताना, चुकीच्या डेटासह विनंत्यांची संख्या झपाट्याने कमी होते. क्लायंट-साइड डेटा प्रमाणीकरण प्रणाली प्रामुख्याने JS आणि कठोर फॉर्म घटक (निवडा) वापरून तयार केली जाते.
  • क्लायंटवरील डेटा ॲरेसाठी मोठ्या DOM संरचना तयार करण्याचा सल्ला दिला जातो
    मोठ्या प्रमाणात प्रदर्शित केलेल्या डेटासह कार्य करताना ही एक अतिशय प्रभावी ऑप्टिमायझेशन पद्धत आहे. त्याचे सार खालीलप्रमाणे उकळते: सर्व्हरवर डेटाची ॲरे तयार केली जाते आणि क्लायंटकडे हस्तांतरित केली जाते आणि DOM संरचनांचे बांधकाम जेएस फंक्शन्सना प्रदान केले जाते. परिणामी, लोडचे अंशतः सर्व्हरवरून क्लायंटवर पुनर्वितरण केले जाते.
  • या तंत्रज्ञानाचा वापर न करणाऱ्या प्रणालींपेक्षा AJAX तंत्रज्ञानावर तयार केलेल्या प्रणाली लक्षणीयरीत्या वेगवान आहेत
    हे आउटपुट व्हॉल्यूममध्ये घट आणि क्लायंटवरील लोडचे पुनर्वितरण यामुळे होते. सराव मध्ये, AJAX सह सिस्टमची गती 2-3 पट जास्त आहे. टिप्पणी: AJAX, यामधून, इतर ऑप्टिमायझेशन पद्धतींच्या वापरावर अनेक निर्बंध निर्माण करते, उदाहरणार्थ, बफरसह कार्य करणे.
  • पोस्ट विनंती प्राप्त करताना, नेहमी काहीतरी परत करा, कदाचित एक जागा देखील
    अन्यथा, क्लायंटला अनेक किलोबाइट वजनाचे एरर पृष्ठ पाठवले जाईल. ही त्रुटी AJAX तंत्रज्ञान वापरणाऱ्या प्रणालींमध्ये खूप सामान्य आहे.
  • फाईलमधून डेटा पुनर्प्राप्त करणे डेटाबेसपेक्षा वेगवान आहे
    हे मुख्यत्वे डेटाबेसशी कनेक्ट करण्याच्या खर्चामुळे आहे. माझ्या आश्चर्याची गोष्ट म्हणजे, फायली वापरणे जलद आणि अधिक सोयीस्कर असतानाही, प्रोग्रामरची एक मोठी टक्केवारी वेडेपणाने डेटाबेसमध्ये सर्व डेटा संचयित करतात. टिप्पणी:तुम्ही शोधल्या गेलेल्या फाईल्समध्ये डेटा साठवू शकता अन्यथा, तुम्ही डेटाबेस वापरला पाहिजे;
  • आवश्यक असल्याशिवाय डेटाबेसशी कनेक्ट करू नका
    मला अज्ञात कारणास्तव, बरेच प्रोग्रामर वाचन सेटिंग्जच्या टप्प्यावर डेटाबेसशी कनेक्ट होतात, जरी ते नंतर डेटाबेसमध्ये क्वेरी करू शकत नाहीत. ही एक वाईट सवय आहे ज्याची किंमत सरासरी 0.002 सेकंद आहे.
  • जेव्हा एकाच वेळी कमी संख्येने सक्रिय क्लायंट असतात तेव्हा डेटाबेसशी सतत कनेक्शन वापरा
    डेटाबेसशी कनेक्ट करण्यासाठी खर्चाच्या कमतरतेमुळे वेळेचा फायदा होतो. वेळ फरक अंदाजे 0.002 सेकंद आहे. टिप्पणी:मोठ्या संख्येने वापरकर्ते असल्यास, सतत कनेक्शन वापरणे उचित नाही. सतत कनेक्शनसह काम करताना, कनेक्शन समाप्त करण्यासाठी एक यंत्रणा असणे आवश्यक आहे.
  • अनेक सोप्या प्रश्नांपेक्षा जटिल डेटाबेस क्वेरी वापरणे जलद आहे
    वेळेतील फरक हा अनेक घटकांवर अवलंबून असतो (डेटा व्हॉल्यूम, डेटाबेस सेटिंग्ज इ.) आणि एका सेकंदाच्या हजारव्या आणि काहीवेळा शंभरव्या भागामध्ये मोजला जातो.
  • डेटाबेसमध्ये संचयित केलेल्या डेटासाठी PHP बाजूच्या गणनेपेक्षा DBMS बाजूला गणना वापरणे जलद आहे
    हे या वस्तुस्थितीमुळे आहे की PHP बाजूच्या अशा गणनेसाठी डेटाबेसमध्ये दोन प्रश्नांची आवश्यकता असते (डेटा प्राप्त करणे आणि बदलणे). वेळेतील फरक अनेक घटकांवर अवलंबून असतो (डेटा व्हॉल्यूम, डेटाबेस सेटिंग्ज इ.) आणि सेकंदाच्या हजारव्या आणि शंभरव्या भागांमध्ये मोजला जातो.
  • डेटाबेसमधील नमुना डेटा क्वचितच बदलल्यास आणि बरेच वापरकर्ते या डेटामध्ये प्रवेश करत असल्यास, नमुना डेटा फाइलमध्ये जतन करणे अर्थपूर्ण आहे.
    उदाहरणार्थ, तुम्ही खालील सोप्या पध्दतीचा वापर करू शकता: आम्ही डेटाबेसमधून नमुना डेटा मिळवतो आणि तो फाइलमध्ये अनुक्रमित ॲरे म्हणून सेव्ह करतो, त्यानंतर कोणताही वापरकर्ता फाइलमधील डेटा वापरतो. व्यवहारात, ही ऑप्टिमायझेशन पद्धत स्क्रिप्टच्या अंमलबजावणीच्या गतीमध्ये एकापेक्षा जास्त वाढ देऊ शकते. टिप्पणी:ही पद्धत वापरताना, फाइलमध्ये संग्रहित केलेला डेटा व्युत्पन्न करण्यासाठी आणि बदलण्यासाठी तुम्हाला साधने लिहावी लागतील.
  • कॅशे डेटा जो क्वचितच memcached सह बदलतो
    वेळ नफा लक्षणीय असू शकतो. टिप्पणी:स्थिर डेटासाठी कॅशिंग प्रभावी आहे, प्रभाव कमी होतो आणि नकारात्मक असू शकतो.
  • वस्तूंशिवाय काम करणे (OOP शिवाय) वस्तूंसोबत काम करण्यापेक्षा सुमारे तीनपट जलद आहे
    जास्त स्मरणशक्ती देखील वापरली जाते. दुर्दैवाने, PHP इंटरप्रिटर नियमित फंक्शन्सप्रमाणेच OOP सह लवकर कार्य करू शकत नाही.
  • ॲरेचे परिमाण जितके मोठे असेल तितके ते हळू काम करतात
    नेस्टेड स्ट्रक्चर्स हाताळल्यामुळे वेळेचा अपव्यय होतो.

कोड ऑप्टिमायझेशन

या टिपा आणि तथ्ये मागील गटाच्या तुलनेत वेगात क्षुल्लक वाढ देतात, परंतु ही तंत्रे एकत्र घेतल्यास वेळ चांगला मिळू शकतो.
  • echo आणि print हे printf पेक्षा लक्षणीयरीत्या वेगवान आहेत
    वेळेतील फरक एका सेकंदाच्या अनेक हजारव्या भागापर्यंत पोहोचू शकतो. याचे कारण असे की printf चा वापर फॉरमॅट केलेला डेटा आउटपुट करण्यासाठी केला जातो आणि इंटरप्रिटर अशा डेटासाठी संपूर्ण ओळ तपासतो. printf फक्त डेटा आउटपुट करण्यासाठी वापरला जातो ज्यास फॉरमॅटिंगची आवश्यकता असते.
  • echo $var."text" प्रतिध्वनी "$var मजकूर" पेक्षा वेगवान आहे
    याचे कारण असे की दुसऱ्या प्रकरणात PHP इंजिनला स्ट्रिंगच्या आत व्हेरिएबल्स शोधण्याची सक्ती केली जाते. मोठ्या प्रमाणात डेटा आणि PHP च्या जुन्या आवृत्त्यांसाठी, वेळेतील फरक लक्षात येण्याजोगा आहे.
  • echo "a" हे व्हेरिएबल्सशिवाय स्ट्रिंगसाठी echo "a" पेक्षा वेगवान आहे
    कारण दुसऱ्या प्रकरणात PHP इंजिन व्हेरिएबल्स शोधण्याचा प्रयत्न करत आहे. मोठ्या प्रमाणातील डेटासाठी, वेळेतील फरक लक्षणीय आहेत.
  • प्रतिध्वनी "a","b" प्रतिध्वनी "a"."b" पेक्षा वेगवान आहे
    स्वल्पविरामाने विभक्त केलेला डेटा आउटपुट करणे एका कालावधीपेक्षा वेगवान आहे. कारण दुस-या प्रकरणात स्ट्रिंग जोडणी होते. मोठ्या प्रमाणातील डेटासाठी, वेळेतील फरक लक्षणीय आहेत. टीप:हे केवळ इको फंक्शनसह कार्य करते, जे अनेक ओळी वितर्क म्हणून घेऊ शकतात.
  • $return="a"; $return.="b"; echo $return; इको "ए" पेक्षा वेगवान; इको "बी";
    कारण असे आहे की डेटा आउटपुट करण्यासाठी काही अतिरिक्त ऑपरेशन्स आवश्यक आहेत. मोठ्या प्रमाणातील डेटासाठी, वेळेतील फरक लक्षणीय आहेत.
  • ob_start(); प्रतिध्वनी "ए"; इको "बी"; ob_end_flush(); $return="a" पेक्षा वेगवान; $return.="b"; echo $return;
    कारण व्हेरिएबल्समध्ये प्रवेश न करता सर्व काम केले जाते. मोठ्या प्रमाणातील डेटासाठी, वेळेतील फरक लक्षणीय आहेत. टिप्पणी:जर तुम्ही AJAX सह काम करत असाल तर हे तंत्र कुचकामी आहे, कारण या प्रकरणात डेटा एकच स्ट्रिंग म्हणून परत करणे इष्ट आहे.
  • "प्रोफेशनल इन्सर्ट" वापरा किंवा?> a b
    PHP आउटपुटपेक्षा स्थिर डेटा (बाहेरील कोड) वर प्रक्रिया केली जाते. या तंत्राला व्यावसायिक प्रवेश म्हणतात. मोठ्या प्रमाणातील डेटासाठी, वेळेतील फरक लक्षणीय आहेत.
  • readfile file_get_contents पेक्षा वेगवान आहे, file_get_contents आवश्यकतेपेक्षा वेगवान आहे, आणि एकाच फाईलमधून स्थिर सामग्री आउटपुट करण्यासाठी समाविष्ट करण्यापेक्षा आवश्यक आहे
    रिकामी फाईल वाचण्यासाठी लागणारा वेळ रीडफाइलसाठी 0.001 ते समाविष्ट करण्यासाठी 0.002 पर्यंत बदलतो.
  • रिक्वायर्ड इंटरप्रिटेड फाइल्ससाठी समाविष्ट करण्यापेक्षा वेगवान आहे
    टिप्पणी:अल्गोरिदमची शाखा बनवताना, जेव्हा व्याख्या केलेली फाईल वापरणे शक्य नाही, तेव्हा तुम्ही समाविष्ट वापरणे आवश्यक आहे, कारण आवश्यक मध्ये नेहमी फाइल समाविष्ट असते.
  • जर (...) (...) अन्यथा (...) () स्विचपेक्षा वेगवान असल्यास
    वेळ शाखांच्या संख्येवर अवलंबून असते.
  • जर (...) (...) अन्यथा (...) () जर (...) (...) पेक्षा वेगवान असेल तर; तर (...) ();
    शाखांची संख्या आणि परिस्थिती यावर वेळ अवलंबून असतो. जेव्हा शक्य असेल तेव्हा तुम्ही दुसरे वापरावे, कारण ते सर्वात वेगवान "सशर्त" बांधकाम आहे.
  • जर (...) (...) अन्यथा जर (...) () बांधकाम शाखेच्या सुरुवातीला लावावे
    दुभाषी बांधकाम वरपासून खालपर्यंत स्कॅन करतो जोपर्यंत त्याची स्थिती पूर्ण होत नाही. जर दुभाष्याला अट समाधानी असल्याचे आढळले, तर तो बाकीच्या बांधकामाकडे पाहत नाही.
  • < x; ++$i) {...} быстрее, чем for($i = 0; $i < sizeOf($array); ++$i) {...}
    हे असे आहे कारण दुसऱ्या प्रकरणात sizeOf ऑपरेशन प्रत्येक पुनरावृत्तीवर कार्यान्वित केले जाईल. अंमलबजावणी वेळेतील फरक ॲरे घटकांच्या संख्येवर अवलंबून असतो.
  • x = sizeOf($ array); साठी($i = 0; $i< x; ++$i) {...} быстрее, чем foreach($arr as $value) {...} для не ассоциативных массивов
    वेळेतील फरक लक्षणीय आहे आणि ॲरे जसजसा वाढतो तसतसा वाढतो.
  • preg_replace ereg_replace पेक्षा वेगवान आहे, str_replace preg_replace पेक्षा वेगवान आहे, परंतु strtr str_replace पेक्षा वेगवान आहे
    वेळेतील फरक डेटाच्या प्रमाणावर अवलंबून असतो आणि सेकंदाच्या हजारव्या भागापर्यंत पोहोचू शकतो.
  • स्ट्रिंग फंक्शन्स रेग्युलर एक्स्प्रेशनपेक्षा वेगवान असतात
    हा नियम मागील एक परिणाम आहे.
  • मेमरी मोकळी करण्यासाठी यापुढे आवश्यक नसलेले ॲरे व्हेरिएबल्स काढून टाका.
  • एरर सप्रेशन वापरणे टाळा @
    एरर सप्रेशनमुळे अनेक अतिशय धीमे ऑपरेशन होतात आणि पुन्हा प्रयत्न करण्याचा दर खूप जास्त असू शकतो, त्यामुळे वेग कमी होणे लक्षणीय असू शकते.
  • जर (isset($str(5))) (...) जर (strlen($str)>4)(...) पेक्षा वेगवान असेल तर
    कारण स्ट्रिंग्स हाताळण्यासाठी स्ट्रलेन फंक्शनऐवजी स्टँडर्ड आयसेट चाचणी ऑपरेशन वापरले जाते.
  • 0.5 1/2 पेक्षा वेगवान आहे
    कारण दुसऱ्या प्रकरणात विभागणी ऑपरेशन केले जाते.
  • फंक्शनमधून व्हेरिएबलचे व्हॅल्यू रिटर्न करताना रिटर्न ग्लोबलपेक्षा जलद असतो
    कारण दुस-या प्रकरणात ग्लोबल व्हेरिएबल तयार होते.
  • $row["id"] $row पेक्षा वेगवान आहे
    पहिला पर्याय 7 पट वेगवान आहे.
  • स्क्रिप्ट कधी चालली पाहिजे हे निर्धारित करण्यासाठी $_SERVER['REQUEST_TIME'] वेळेपेक्षा वेगवान आहे
  • जर ($var===null) (...) जर (is_null($var)) (...) पेक्षा वेगवान असेल तर
    कारण पहिल्या प्रकरणात फंक्शनचा उपयोग नाही.
  • ++i i++ पेक्षा वेगवान आहे, --i i पेक्षा वेगवान आहे--
    हे PHP कोरच्या वैशिष्ट्यांमुळे होते. वेळेतील फरक 0.000001 पेक्षा कमी आहे, परंतु जर तुम्ही या प्रक्रियेची हजारो वेळा पुनरावृत्ती केली, तर या ऑप्टिमायझेशनवर बारकाईने लक्ष द्या.
  • आरंभिक व्हेरिएबल i=0 ची वाढ; ++i; सुरू न केलेल्या ++i पेक्षा वेगवान
    वेळ फरक सुमारे 0.000001 सेकंद आहे, परंतु संभाव्य पुनरावृत्ती वारंवारतेमुळे, ही वस्तुस्थिती लक्षात ठेवली पाहिजे.
  • निवृत्त व्हेरिएबल्स वापरणे नवीन घोषित करण्यापेक्षा जलद आहे
    किंवा मला ते वेगळ्या पद्धतीने पुन्हा सांगू द्या: अनावश्यक व्हेरिएबल्स तयार करू नका.
  • स्थानिक व्हेरिएबल्ससह कार्य करणे जागतिक व्हेरिएबल्सच्या तुलनेत अंदाजे 2 पट जलद आहे
    जरी वेळेतील फरक 0.000001 सेकंदांपेक्षा कमी असला तरी, उच्च पुनरावृत्ती दरामुळे, तुम्ही स्थानिक चलांसह कार्य करण्याचा प्रयत्न केला पाहिजे.
  • व्हेरिएबलमध्ये थेट प्रवेश करणे हे फंक्शन कॉल करण्यापेक्षा वेगवान आहे ज्यामध्ये हे व्हेरिएबल अनेक वेळा परिभाषित केले आहे
    फंक्शन कॉल करण्यासाठी व्हेरिएबल कॉल करण्यापेक्षा तिप्पट वेळ लागतो.

निरुपयोगी ऑप्टिमायझेशन

सरावातील अनेक ऑप्टिमायझेशन पद्धतींचा स्क्रिप्टच्या अंमलबजावणीच्या गतीवर मोठा प्रभाव पडत नाही (वेळ वाढणे 0.000001 सेकंदांपेक्षा कमी आहे). असे असूनही, असे ऑप्टिमायझेशन अनेकदा विवादाचा विषय आहे. मी ही "निरुपयोगी" तथ्ये सादर केली आहेत जेणेकरून भविष्यात कोड लिहिताना तुम्ही त्यांच्याकडे विशेष लक्ष देऊ नये.
  • प्रतिध्वनी मुद्रणापेक्षा वेगवान आहे
  • समाविष्ट ("संपूर्ण मार्ग") समाविष्ट ("संबंधित मार्ग") पेक्षा वेगवान आहे
  • sizeOf गणनेपेक्षा वेगवान आहे
  • foreach ($arr $key => $value) (...) रीसेट ($arr) पेक्षा वेगवान आहे; तर (सूची($key, $value) = प्रत्येक ($arr)) (...) असोसिएटिव्ह ॲरेसाठी
  • टिप्पणी न केलेला कोड टिप्पणी केलेल्या कोडपेक्षा वेगवान आहे कारण फाइल वाचण्यासाठी अतिरिक्त वेळ लागतो
    ऑप्टिमायझेशनच्या फायद्यासाठी टिप्पण्यांचे प्रमाण कमी करणे खूप मूर्खपणाचे आहे;
  • लहान नावे असलेले चल हे लांब नाव असलेल्या चलांपेक्षा वेगवान असतात
    हे प्रक्रिया केलेल्या कोडच्या प्रमाणात घट झाल्यामुळे होते. मागील मुद्द्याप्रमाणेच, तुम्हाला फक्त कार्यरत ("लढाऊ") स्क्रिप्टमध्ये कमी करणे आवश्यक आहे.
  • टॅब वापरून कोड चिन्हांकित करणे स्पेस वापरण्यापेक्षा जलद आहे
    मागील मुद्द्याप्रमाणेच.
शेवटी, मी तुम्हाला पुन्हा एकदा आठवण करून देऊ इच्छितो की मी दिलेल्या टिपा आणि तथ्ये निरपेक्ष नाहीत आणि त्यांच्या अर्जाचे महत्त्व विशिष्ट परिस्थितीवर अवलंबून असते. हे लक्षात ठेवले पाहिजे की स्क्रिप्ट ऑप्टिमायझेशन संपूर्ण ऑप्टिमायझेशन प्रक्रियेचा फक्त एक छोटासा भाग आहे आणि वर वर्णन केलेल्या टिपांशिवाय शांतपणे जगणे शक्य आहे.

हा लेख लिहिण्यासाठी अंशतः साहित्य वापरले होते.



आम्ही वाचण्याची शिफारस करतो

वर