PHP में एक स्थानीय फ़ाइल के लिए एक स्ट्रिंग को बचाने के लिए कैसे?

इस पोस्ट में अपने geek श्रृंखला में दूसरा एक है.

मेरे थीम Tweaker प्रोग्रामिंग जबकि, मैं इस समस्या के पार आया. मैं अपने PHP कार्यक्रम में अपने सर्वर पर एक स्ट्रिंग था (tweaked स्टाइलशीट, वास्तव में), और मैं उपयोगकर्ता एक फ़ाइल अपने कंप्यूटर को बचाने का विकल्प देना चाहता था. मैं यह एक आम समस्या थी सोचा गया होता, और सभी आम समस्याओं Googling द्वारा हल किया जा सकता है. लेकिन, लो और निहारना, मैं सिर्फ एक संतोषजनक समाधान नहीं मिल सकता. मैं अपने ही पाया, और मैं इसे यहाँ शेयर सोचा, भविष्य की सभी Googlers के लाभ के लिए अभी तक आने और जाने के लिए.

हम समाधान में जाने से पहले, की समस्या क्या है समझ. समस्या दो कंप्यूटरों के बीच श्रम विभाजन में है — एक सर्वर है, जहां अपने WordPress और PHP चल रहे हैं; अन्य जहाँ देखने जगह ले जा रहा है ग्राहक कंप्यूटर है. हम बात कर रहे स्ट्रिंग सर्वर पर है. हम ग्राहक के कंप्यूटर पर एक फ़ाइल में इसे बचाने के लिए करना चाहते हैं. यह करने के लिए एक ही रास्ता एक HTML उत्तर के रूप में स्ट्रिंग की सेवा कर रहा है.

पहली नज़र में, यह एक बड़ी समस्या की तरह नहीं लगती. सब के बाद, सर्वर नियमित ग्राहकों के लिए तार और डेटा भेजने — कि हम ब्राउज़र पर कुछ भी देख कैसे, आप क्या पढ़ रहे हैं सहित. यह स्ट्रिंग को बचाने के लिए करना चाहता है कि बस किसी भी PHP कार्यक्रम था, यह एक समस्या नहीं होगी. तुम बस सर्वर पर एक फ़ाइल में स्ट्रिंग डंप और फ़ाइल की सेवा कर सकता.

आप पूरी दुनिया को अपने सर्वर पर फाइल करने के लिए तार डंपिंग का एक रास्ता देने के लिए नहीं करना चाहते लेकिन अगर तुम क्या करते हो? खैर, आप इस तरह से कुछ कर सकता है:

<?php
header('Content-Disposition: attachment; filename="style.css"');
header("Content-Transfer-Encoding: ascii");
header('Expires: 0');
header('Pragma: no-cache');
print $stylestr ;
?>

इतना, सिर्फ स्ट्रिंग $ stylestr गणना करता है कि आपके foo.php में इस कोड डाल दिया है और आप कर रहे हैं. लेकिन हमारी परेशानी हम WordPress प्लगइन ढांचे में काम कर रहे हैं, और हैडर उपयोग नहीं कर सकते() कॉल. यदि आप ऐसा करने का प्रयास करें, आपको लगता है कि शीर्ष लेख पहले से ही दोस्त से किया जाता है कह त्रुटि संदेश मिल जाएगा. इस समस्या के लिए, मैं मैं का उपयोग गए प्लग इन में से एक में सरल समाधान मिल गया. जो एक भूल गए, लेकिन मैं यह एक आम तकनीक है अनुमान. समाधान एक खाली आइफ्रेम को परिभाषित करने और PHP समारोह लिखना होगा क्या करने के लिए अपने स्रोत स्थापित करने के लिए है. आइफ्रेम एक पूर्ण HTML स्रोत की उम्मीद है, आप अनुमति दी जाती है (वास्तव में, आभारी) हैडर देने के लिए() निर्देशों. कोड स्निपेट की तरह कुछ लग रहा है:

<iframe id="saveCSS" src="about:blank" style="visibility:hidden;border:none;height:1em;width:1px;"></iframe>
<script type="text/javascript">
var fram = document.getElementById("saveCSS");
<?php echo 'fram.src = "' . $styleurl .'"' ;
?>

अब सवाल यह है कि, स्रोत क्या होना चाहिए? दूसरे शब्दों में, $ styleurl क्या है? स्पष्ट रूप से, यह अपने सर्वर पर एक स्थिर फ़ाइल नहीं किया जा रहा है. और इस पोस्ट का उद्देश्य यह बिल्कुल सर्वर पर एक फ़ाइल होना जरूरी नहीं है कि दिखाने के लिए है. यह एक दो भाग जवाब है. क्या आप वर्डप्रेस ढांचे के भीतर काम कर रहे हैं कि याद है, और आप स्टैंडअलोन PHP फ़ाइलें नहीं कर सकते. आप कर सकते हैं केवल एक चीज मौजूदा PHP फाइल करने के लिए तर्क जोड़ने के लिए है, या plugins आपने बनाया है. जब आप पहली बार बना तो निम्नानुसार एक बटन सबमिट करें:

<form method="post" action="<?php echo $_SERVER["REQUEST_URI"]?>">
<div class="submit">
<input type="submit" name="saveCSS" title="Download the tweaked stylesheet to your computer" value="Download Stylesheet" />
</div>

बटन के नाम विशेषता है कि नोट “saveCSS.” अब, कोड के हिस्से में है कि प्रस्तुत हैंडल, आप ऐसा कुछ कर:

<?php
if (isset($_POST['saveCSS']))
$styleurl = get_option('siteurl') . '/' . "/wp-admin/themes.php?page=theme-tweaker.php&save" ;

?>

इससे आप अपने आइफ्रेम के स्रोत के रूप में देना होगा कि $ styleurl है, आगे. यह अपने pluging पेज URL के रूप में एक ही है कि नोट, आप जोड़ने में कामयाब रहे कि सिवाय “?बचाना” यह के अंत में. अगली चाल के उस तर्क को पकड़ने और इसे संभाल करने के लिए है. इसके लिए, आप वर्डप्रेस एपीआई समारोह का उपयोग, add_action रूप:

<?php
if (isset($_GET['save'] ))
add_action('init', array(&$thmTwk, 'saveCSS'));
else
remove_action('init', array(&$thmTwk, 'saveCSS'));
?>

यह अपने प्लगइन के आरंभिक भाग के लिए एक समारोह saveCSS कहते हैं. अब आप इस समारोह को परिभाषित किया है:

<?php
function saveCSS() {
header('Content-Disposition: attachment; filename="style.css"');
header("Content-Transfer-Encoding: ascii");
header('Expires: 0');
header('Pragma: no-cache');
$stylestr = "Whatever string you want to save";
ob_start() ;
print $stylestr ;
ob_end_flush() ;
die() ;
}
?>

अब हम लगभग घर के लिए स्वतंत्र हैं. समझने के लिए केवल एक चीज है कि आप यह है कि करना मरने जरूरत(). अपने कार्य मर नहीं करता है, यह अपने को बचाने फ़ाइल में वर्डप्रेस उत्पन्न सामान के बाकी बाहर वमन जाएगा, अपने स्ट्रिंग $ stylestr को यह appending.

यह जटिल लग सकता है. खैर, मैं यह थोड़ा जटिल है अनुमान, लेकिन आप इसे लागू करने और इसे चलाने के लिए एक बार, आप कर सकते हैं (और क्या) इसके बारे में भूल जाते हैं. कम से कम, मुझे क्या करना है. मैं यहाँ यह पोस्ट यही कारण है कि, तो अगली बार जब मैं की जरूरत है कि यह करने के लिए, मैं यह देख सकते हैं.

टिप्पणियां