2010-10-20 16 views
6

ठीक है, किसी निश्चित स्ट्रिंग के लिए फ़ाइलों की सामग्री के समूह के माध्यम से खोजने के लिए PHP में सबसे अच्छा समाधान क्या है और इसे किसी अन्य चीज़ से प्रतिस्थापित करें।एकाधिक फ़ाइलों में खोजें और प्रतिस्थापित करें

बिल्कुल यह नहीं कि कैसे नोटपैड ++ करता है लेकिन जाहिर है कि मुझे उस इंटरफ़ेस की आवश्यकता नहीं है।

उत्तर

22
foreach (glob("path/to/files/*.txt") as $filename) 
{ 
    $file = file_get_contents($filename); 
    file_put_contents($filename, preg_replace("/regexhere/","replacement",$file)); 
} 
2

इसलिए मैंने हाल ही में एक ऐसे मुद्दे में भाग लिया जिसमें हमारा वेब होस्ट PHP 5.2 से 5.3 तक परिवर्तित हो गया और इस प्रक्रिया में उसने Magento की स्थापना को तोड़ दिया। मैंने कुछ अलग-अलग बदलाव किए जिन्हें सुझाव दिया गया था, लेकिन पाया कि अभी भी कुछ टूटे हुए क्षेत्र थे। मुझे एहसास हुआ कि अधिकांश समस्याएं Magento में मौजूद "toString" फ़ंक्शन के साथ किसी समस्या से संबंधित थीं और अब PHP स्प्लिट फ़ंक्शन को हटा दिया गया है। इसे देखकर, मैंने फैसला किया कि मैं कुछ कोड बनाने की कोशिश करूंगा जो टूटे हुए कार्यों के सभी विभिन्न उदाहरणों को ढूंढ और बदल देगा। मैं समारोह बनाने में सफल होने में कामयाब रहा, लेकिन दुर्भाग्य से शॉट-बंदूक दृष्टिकोण काम नहीं कर सका। मुझे अभी भी त्रुटियां थीं। उस ने कहा, मुझे लगता है कि कोड में बहुत सी संभावनाएं हैं और मैं जो पोस्ट आया था उसे पोस्ट करना चाहता था।

कृपया सावधानी के साथ इसका उपयोग करें। मैं आपकी फ़ाइलों की प्रतिलिपि ज़िप करने की अनुशंसा करता हूं ताकि यदि आपको कोई समस्या हो तो आप बैकअप से पुनर्स्थापित कर सकते हैं।

इसके अलावा, आप जरूरी नहीं है कि आप इसका उपयोग करना चाहें। मैं एक उदाहरण के रूप में कोड प्रदान कर रहा हूँ। आप शायद बदलना चाहते हैं जो बदल दिया है।

कोड काम करने का तरीका यह है कि यह जो भी फ़ोल्डर में और उप फ़ोल्डरों में रखे गए फ़ोल्डर में है उसे प्रतिस्थापित और प्रतिस्थापित कर सकता है। मैंने इसे tweaked किया है ताकि यह केवल एक्सटेंशन PHP के साथ फाइलों की तलाश करेगा, लेकिन आप इसे आवश्यकतानुसार बदल सकते हैं। जैसा कि यह खोजता है, यह सूचीबद्ध करेगा कि यह कौन सी फाइलें बदलती है। इस कोड का उपयोग करने के लिए इसे "ChangePHPText.php" के रूप में सहेजें और जहां भी आपको परिवर्तनों की आवश्यकता होती है वहां उस फ़ाइल को अपलोड करें। इसके बाद आप उस नाम से जुड़े पेज को लोड करके इसे चला सकते हैं। उदाहरण के लिए, mywebsite.com \ ChangePHPText.php।

<?php 
    ## Function toString to invoke and split to explode 

    function FixPHPText($dir = "./"){ 
     $d = new RecursiveDirectoryIterator($dir); 
     foreach(new RecursiveIteratorIterator($d, 1) as $path){ 
      if(is_file($path) && substr($path, -3)=='php' && substr($path, -17) != 'ChangePHPText.php'){ 
       $orig_file = file_get_contents($path); 
       $new_file = str_replace("toString(", "invoke(",$orig_file); 
       $new_file = str_replace(" split(", " preg_split(",$new_file); 
       $new_file = str_replace("(split(", "(preg_split(",$new_file); 
       if($orig_file != $new_file){ 
       file_put_contents($path, $new_file); 
       echo "$path updated<br/>"; 
       } 
      } 
     } 
    } 

    echo "----------------------- PHP Text Fix START -------------------------<br/>"; 
    $start = (float) array_sum(explode(' ',microtime())); 
    echo "<br/>*************** Updating PHP Files ***************<br/>"; 
    echo "Changing all PHP containing toString to invoke and split to explode<br/>"; 
    FixPHPText("."); 

    $end = (float) array_sum(explode(' ',microtime())); 
    echo "<br/>------------------- PHP Text Fix COMPLETED in:". sprintf("%.4f", ($end-$start))." seconds ------------------<br/>"; 
    ?> 
संबंधित मुद्दे

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