タグ別アーカイブ: 文字列

PHPでローカルファイルに文字列を保存する方法?

この投稿は、私のオタクシリーズの第2つです.

私のテーマのTweakerのプログラミング中, 私はこの問題に出くわした. 私は私のPHPプログラムで私のサーバー上の文字列を持っていた (微調整スタイルシート, 実際には), そして私は、ユーザーにファイル自分のコンピュータに保存するオプションを与えたいと思った. 私は、これは共通の問題だと思ったただろう, そして、すべての一般的な問題は、グーグルによって解決することができる. しかし, 驚くなかれ, 私はちょうど満足のいく解決策を見つけることができませんでした. 私は自分自身を発見した, と私はここでそれを共有するだろうと思った, 将来のすべてのGoogle社員の利益のためにまだ来て、どこへ行く.

我々は、溶液中に行く前に, のが問題であるかを理解しましょう. 問題は、2台のコンピュータ間分業である — 1は、サーバである, あなたのワードプレスと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のプラグインフレームワークで作業しているということです, ヘッダを使用することはできません() 通話. あなたはそれをしようとすると, あなたはそのヘッダがすでに男に行われというエラー·メッセージが表示されます. この問題の, 私は私が使用するプラグインのいずれかで独創的な解決策を見つけた. 忘れている1, 私はそれが一般的な技術であると思います. ソリューションは、空のiFrameを定義し、PHPの関数が記述したものに、そのソースを設定することである. iFrameのは、完全な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は何ですか? はっきりと, それはあなたのサーバー上の静的ファイルであることを行っていません. この記事の目的は、それがすべてのサーバ上のファイルである必要はないことを示すことである. これは、2つの部分の答えである. あなたはWordPressのフレームワーク内で作業していることを忘れてはいけない, そしてあなたは、スタンドアロンのPHPファイルを作ることができない. あなたができる唯一の​​ことは、既存のPHPファイルに引数を追加することです, あなたが作成したかのプラグイン. 次のようにだから、最初に送信ボタンを作る:

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

ボタンのname属性であることに注意してください “saveCSS。” 今, 提出を処理するコードの一部で, あなたのような何かをする:

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

?>

これは、あなたのiFrameのソースとして与えるの$ styleurlです, フォワード. それはあなたのplugingページのURLと同じであることに注意してください, あなたが追加するために管理することを除いて “?セーブ” それの最後に. 次のトリックは、その引数をキャプチャし、それを処理することです. そのために, あなたはWordPressのAPI関数を使用, として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にそれを追加する.

それは複雑に見えるかもしれ. よく, 私はそれが少し複雑ですね, しかし、あなたはそれを実装し、それが動作して得れば, 次のことができます (とやる) それを忘れ. 少なくとも, 私はありません. 私はそれをここに掲載した理由です, 私はそれを行う必要が次回になるように, 私はそれを調べることができます.