2010-05-03 16 views
11
  • सीएसएस के साथ एक प्रारूपित HTML पृष्ठ को MYSQL डेटाबेस पर संग्रहीत करने का सबसे अच्छा तरीका क्या है? क्या यह संभव है?
  • कॉलम प्रकार क्या होना चाहिए? संग्रहीत स्वरूपित HTML को पुनर्प्राप्त कैसे करें और PHP का उपयोग करके इसे सही तरीके से प्रदर्शित करें?एचटीएमएल पेज प्राप्त करें और इसे MYSQL में स्टोर करें-

  • क्या पेज मैं लाने के लिए चाहते हैं तस्वीरें और वीडियो है, तो मैं ब्लॉब

  • पीएचपी-कर्ल का उपयोग कर एक पृष्ठ लाने में, fopen, ..- सबसे अच्छा तरीका क्या है के रूप में पेज की दुकान शो?

कई सवाल दोस्तों लेकिन मुझे वास्तव में इसे करने के लिए सही तरीके से रखने में आपकी मदद की ज़रूरत है।

बहुत बहुत धन्यवाद।

उत्तर

7

काफी सरल, इस कोड को मैंने आपके लिए बनाया है।

डीबी में स्रोत को पकड़ने और सहेजने की मूल बातें हैं।

मैं त्रुटि हैंडलिंग डाल नहीं था या जो कुछ भी है, बस उसे पल के लिए सरल रखने ...

मैं परिणाम दिखाने के लिए समारोह बना नहीं था, लेकिन आप देखना $ स्रोत मुद्रित कर सकते हैं परिणाम।

आशा है कि यह आपकी मदद करेगा।

<?php 

function GetPage($URL) 
{ 
    #Get the source content of the URL 
    $source = file_get_contents($URL); 

    #Extract the raw URl from the current one 
    $scheme = parse_url($URL, PHP_URL_SCHEME); //Ex: http 
    $host = parse_url($URL, PHP_URL_HOST); //Ex: www.google.com 
    $raw_url = $scheme . '://' . $host; //Ex: http://www.google.com 

    #Replace the relative link by an absolute one 
    $relative = array(); 
    $absolute = array(); 

    #String to search 
    $relative[0] = '/src="\//'; 
    $relative[1] = '/href="\//'; 

    #String to remplace by 
    $absolute[0] = 'src="' . $raw_url . '/'; 
    $absolute[1] = 'href="' . $raw_url . '/'; 

    $source = preg_replace($relative, $absolute, $source); //Ex: src="/image/google.png" to src="http://www.google.com/image/google.png" 

    return $source; 
} 

function SaveToDB($source) 
{ 
    #Connect to the DB 
    $db = mysql_connect('localhost', 'root', ''); 

    #Select the DB name 
    mysql_select_db('test'); 

    #Ask for UTF-8 encoding 
    mysql_query("SET NAMES 'utf8'"); 

    #Escape special chars 
    $source = mysql_real_escape_string($source); 

    #Set the Query 
    $query = "INSERT INTO website (source) VALUES ('$source')"; //Save it in a text row, that's it... 

    #Run the query 
    mysql_query($query); 

    #Close the connection 
    mysql_close($db); 
} 

$source = GetPage('http://www.google.com'); 

SaveToDB($source); 

?> 
+0

कोड के लिए बहुत बहुत धन्यवाद। मुझे एक स्वरूपित वेब पेज को सीएसएस और चित्रों के साथ स्टोर करने की आवश्यकता है, इसलिए जब मैं इसे गूंजता हूं, तो परिणाम मूल रूप से स्वरूपित वेब पेज होगा। मैं ऊपर दिए गए कोड का धन्यवाद नहीं करता हूं। कृपया मुझे सुधारें अगर मैं गलत हूं। – codemaker

+0

हां यह होगा, इसे स्वयं आज़माएं, उपयोग करें: गूंज प्राप्त करें ('http://www.google.com'); आप समान पृष्ठ को Google के रूप में देखेंगे। यदि आप जो चाहते हैं वह नहीं है, तो मुझे आपका अनुरोध समझ में नहीं आया ... – geek1983

+0

क्षमा करें, GetPage ('http://www.google.com') गूंजें; – geek1983

-2

आप डेटा को mysql
में टेक्स्ट डेटाटाइप के रूप में संग्रहीत कर सकते हैं लेकिन आपको डेटा बीसीजे पृष्ठ को कनवर्ट करना होगा कई उद्धरण और विशेष वर्णों को सामग्रीबद्ध करना।
आप यह प्रश्न देख सकते हैं THIS यह आपके प्रश्न के सटीक नहीं है लेकिन यह डेटाबेस में डेटा स्टोर करेगा जब यह मदद करेगा।
उन छवियों और वीडियो के बारे में ... यदि आप पृष्ठ सामग्री संग्रहीत कर रहे हैं तो वहां केवल छवियों और वीडियो के पथ होंगे .. इसलिए डेटाबेस में स्टोर करने पर कोई समस्या नहीं आएगी।

+0

-1 अधिकतर पढ़ने योग्य और बड़े पैमाने पर गलत होने के लिए। उद्धरणों से निपटने की आवश्यकता नहीं है कि डेटा "रूपांतरित" हो, केवल यह कि आप डेटाबेस में डेटा डालने के लिए मानक, नियमित दृष्टिकोण करते हैं। इसके अतिरिक्त, जैसे ही एचटीएमएल अपने मूल यूआरआई से दूर हो जाता है, सापेक्ष यूआरआई टूट जाएंगे। – Quentin

+0

जब आपके पास कई कोट्स के साथ अपनी शैलियों और डेटा के साथ डेटा था ... तो आपको मेरा अंक मिलेगा। मुझे लगता है कि आप पृष्ठ सामग्री कोई उद्धरण या कोई स्टाइलशीट नहीं है। अधिकतर जब आप उस डेटा को संग्रहीत करते हैं जो उपयोगकर्ता द्वारा दर्ज किया जाएगा तो आप नहीं जानते कि वे क्या दर्ज करेंगे। इसलिए यदि आपको पसंद नहीं है तो यह ठीक है .... यदि आपका डेटा केवल आपके द्वारा दर्ज किया गया है तो आप उद्धरणों का ख्याल रखेंगे। उद्धरण समस्या में आ जाएगा जब आप क्वेरी आग लगाएंगे। – Nitz

1

फॉपेन का उपयोग करके पूरे पृष्ठ को नीचे खींचें और किसी भी यूआरएल (छवियों और सीएसएस) को पार्स करें। आप पृष्ठ उत्पन्न करने वाली फ़ाइलों के लिए प्रत्येक यूआरएल को पकड़ने के लिए एक लूप चलाने के लिए चाहते हैं। इन्हें भी स्टोर करें, और उन यूआरएल को प्रतिस्थापित करें जो आपके नए लिंक वाली अन्य साइट फ़ाइलों से लिंक करने के लिए उपयोग किए जाते हैं। (अगर फाइलों को बदलना चाहिए या भविष्य में हटाया जाना चाहिए तो यह किसी भी मुद्दे से बच जाएगा)।

मैं एक ब्लॉब डाटाटाइप का उपयोग करके पुनः प्रतिक्रिया दूंगा क्योंकि यह आपको सभी फ़ाइलों को एक टेबल में स्टोर करने की अनुमति देगा, लेकिन आप टेक्स्ट डेटाटाइप वाले पृष्ठों के लिए एक टेबल और अन्य छवियों और अन्य फ़ाइलों को स्टोर करने के लिए ब्लॉब के साथ एक टेबल कर सकते हैं।

संपादित करें: आप भंडारण कर रहे हैं एक ब्लॉब डेटाप्रकार base64_encode पर गौर के रूप में() यह सर्वर पर भंडारण पदचिह्न में वृद्धि होगी, लेकिन आप उद्धरण और विशेष वर्णों के साथ किसी भी समस्याओं से बचने के लिए होगा।

+0

अगर मैं गलत हूं तो मुझे सही करें, आप पृष्ठ को दो चरणों में पार्स करने का सुझाव देते हैं। सबसे पहले सीएसएस और छवियों के लिंक के बिना और लिंक के साथ दूसरा। मेरा सवाल यह है कि मैं पूरी तरह से एक साथ सोचता हूं और उसे ब्लॉब में कैसे स्टोर कर सकता हूं और फिर उसे सही फॉर्मेट के साथ पुनर्प्राप्त और प्रदर्शित कर सकता हूं? क्या आप और अधिक समझाएंगे? – codemaker

+0

आप पूरे पृष्ठ को एक फ़ाइल के रूप में सहेज नहीं सकते हैं। आपको पृष्ठ के भीतर लिंक एकत्र करने की आवश्यकता है (सीएसएस, जावास्क्रिप्ट, छवियों ect।) फिर स्थानीय रूप से उन फ़ाइलों को फॉपेन और सहेजें। बहुत से लिंक सापेक्ष होंगे, उन्हें संशोधित करें ताकि फाइलें खोल सकें। एक बार उन फ़ाइलों को सहेजे जाने के बाद स्थानीय रूप से एचटीएमएल में अपने स्थानीय लिंक में लिंक बदल दें। आपको लिंक के लिए किसी भी जावास्क्रिप्ट और सीएसएस को भी जांचना होगा और उन फ़ाइलों के लिए प्रक्रिया दोहराएं। ~ मुझे लगता है कि आप अन्य साइटों से पृष्ठों को पिसाने के लिए इसका उपयोग कर रहे हैं (http://www.archive.org/ के समान) और इसका उपयोग स्थानीय रूप से बनाए गए टेम्पलेट को स्टोर करने के लिए नहीं कर रहे हैं। – Mestore

+0

क्या आप कार्य को प्राप्त करने के लिए PHP में कार्यान्वित एक त्वरित HTML पार्सर जानते हैं? – codemaker

1

फ़ाइलों को स्टोर करने के लिए एक संबंध डेटाबेस का उपयोग न करें। एक फाइल सिस्टम या नोएसक्यूएल समाधान का प्रयोग करें।

आप उपलब्ध विभिन्न ओपन सोर्स स्पाइडर को देखना चाहते हैं (htdig और fansrack दिमाग में आते हैं)।

1

मैं डेटाबेस में यूआरएल स्टोर करता हूं, और cron नौकरी wget नियमित रूप से पृष्ठों को अपने स्वयं के स्थानीय स्थानीय निर्देशिकाओं में संग्रहीत करता हूं। wget का उपयोग करके आप पृष्ठ को कैश कर सकते हैं, और वैकल्पिक रूप से इसकी छवियों, स्क्रिप्ट आदि को कैश कर सकते हैं। आप अपने wget कमांड को एम्बेड किए गए यूआरएल भी बदल सकते हैं ताकि आपको सबकुछ कैश न करना पड़े।

Here is the man page for wget, आप "wget ​​बैकअप वेबसाइट" या इसी तरह की खोज करने पर भी विचार कर सकते हैं।

("कीड निर्देशिकाओं" से मेरा मतलब है कि आपकी डेटाबेस तालिका में 2 फ़ील्ड, एक 'कुंजी' और 'यूआरएल' होगा, तो [अद्वितीय] 'कुंजी' तब पथ होगा जहां आप वेबसाइट का उपयोग करने के लिए संग्रहीत करेंगे wget।)

+0

क्यों नहीं, चूंकि वेब पेज का यूआरएल आकार में बहुत छोटा है, इसलिए मुझे टेक्स्ट या ब्लॉब में पेज की सामग्री को सहेजने में कोई समस्या नहीं है। मेरा मानना ​​है कि एक 60 केबी या इतने डाटाबेस से लाने से स्थानीय हार्डडिस्क की तुलना में अधिक तेज हो जाएगा। – codemaker

संबंधित मुद्दे