PHP yerel bir dosyaya bir dize kaydetmek nasıl?

Bu yazı benim inek serisinin ikinci biridir.

Benim Tema Tweaker programlarken, Ben bu sorun üzerinde geldi. Ben php programda benim sunucuda bir dize vardı (tweaked stil, aslında), ve ben kullanıcıya dosyaya kendi bilgisayarına kaydederek seçeneği vermek istedim. Ben bu ortak bir sorun olduğunu düşünürdü, ve tüm ortak sorunları google'da çözülebilir. Ancak, lo beğenirsin, Ben sadece bir tatmin edici bir çözüm bulamadı. Ben kendi buldum, ve ben burada paylaşmak istiyorum düşündüm, gelecekteki tüm Google'cuların yararına henüz gelmek ve gitmek.

Biz solüsyon içine gitmeden önce, en sorun anlayalım. Sorun iki bilgisayar arasındaki iş bölümü bulunmaktadır — Bir sunucu, nerede WordPress ve PHP çalışan; Diğer görüntüleme gerçekleşiyor müşterinin bilgisayar. Bahsettiğimiz dize sunucu üzerinde. Biz müşterinin bilgisayarda bir dosyaya kaydetmek istiyorum. Bunu yapmak için tek yolu bir html cevap olarak dize hizmet tarafından.

İlk bakışta, Bu önemli bir sorun gibi görünmüyor. Sonunda, sunucuları düzenli müşterilerine dizeleri ve veri göndermek — biz tarayıcıda bir şey görmek nasıl, Okuduğunuz ne dahil. Bu dize kurtarmak isteyen sadece herhangi bir PHP programı olsaydı, bir sorun olmaz. Sadece sunucudaki bir dosyaya dize dökümü ve dosyayı hizmet verebilir.

Eğer bütün dünyayı sunucunuzdaki dosyaları dizeleri damping bir yol vermek istemiyorsanız Ama ne yaparsınız? Iyi, Eğer böyle bir şey yapabileceğini:

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

Bu yüzden, sadece string $ stylestr hesaplar sizin foo.php bu kodu koyun ve bitirdiniz. Ama sorun biz WordPress eklentisi çerçevesinde çalışıyor olmasıdır, ve başlığı kullanamazsınız() aramalar. Bunu yapmaya çalıştığınızda, O başlık zaten ahbap yapılır söyleyerek hata mesajı alacaksınız. Bu problem için, Ben kullanmak eklentileri birinde dahiyane çözüm bulundu. Hangisi unuttum, ama yaygın bir tekniktir sanırım. Çözelti boş bir iFrame tanımlamak ve PHP işlevi yazarsınız ne kaynağını ayarlamak için. IFrame tam bir HTML kaynak bekliyor yana, Eğer izin verilir (aslında, Yükümlü) başlığını vermek() direktifler. Kod parçacığı gibi bir şey görünüyor:

<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 .'"' ;
?>

Şimdi soru, kaynak ne olmalıdır? Başka bir deyişle, $ styleurl ne? Açıkçası, sizin sunucu üzerinde statik bir dosya olacak değil. Ve bu yazının amacı, tüm sunucu üzerinde bir dosya olmak zorunda değildir göstermektir. Bu iki parçalı cevabı. Sen WordPress çerçevesinde çalıştıklarını hatırlamak zorunda, ve bağımsız php dosyalarını yapamaz. Yapabileceğiniz tek şey mevcut php dosyalarını argümanlar eklemek için, veya eklentileri oluşturduğunuz. İlk yapmak Yani aşağıdaki gibi bir Gönder düğmesi:

<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>

Düğmenin adı nitelik olduğunu unutmayın “saveCSS.” Şimdi, kod parçası olduğunu başvurularını kolları, gibi bir şey yapmak:

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

?>

Bu sizin iFrame kaynağı olarak verecek $ styleurl olduğunu, ileri. Sizin pluging sayfa URL olarak aynı olduğunu unutmayın, Eklemek başardı dışında “?kurtarmak” bunun sonunda. Bir sonraki Hile argüman yakalamak ve bunu işlemek için. Bunun için, Eğer WordPress API işlevini kullanın, add_action olarak:

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

Bu eklenti init parçası bir işlev saveCSS ekler. Şimdi bu fonksiyonu tanımlamak zorunda:

<?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() ;
}
?>

Şimdi neredeyse eve ücretsiz. Anlamak için tek şey senin olduğunu do kalıp gerekir(). İşlev ölmezse, sizin kurtarmak dosyasına WordPress oluşturulan şeyler kalanı dışarı kusmak,, sizin string $ stylestr onu ekleme.

Bu karmaşık görünebilir. Iyi, Ben biraz karmaşık sanırım, ama bunu uygulamak ve çalışan almak kez, yapabilirsiniz (ve do) unutun. En azından, Yapmam. Ben burada yayınlanmıştır yüzden, böylece bir dahaki sefere ihtiyacım bunu yapmak için, Ben o kadar bakabilirsiniz.

Yorumlar