如何将字符串保存到一个PHP本地文件?

这篇文章是第二个在我的怪胎系列.

虽然我的节目主题调教, 我碰到这个问题,. 我在我的PHP程序有我的服务器上的字符串 (在调整了样式表, 事实上), 我想给用户保存到一个文件中他的计算机的选项. 我一直认为这是一个常见的​​问题, 和所有常见的问题都可以通过谷歌搜索来解决. 但, 你瞧, 我只是找不到一个满意的解决方案. 我发现我自己, 并以为我会在这里分享, 所有未来谷歌的利益还没有来去.

在我们进入解决方案, 让我们明白问题是什么. 问题是在劳动两台计算机之间的分工 — 一个是服务器, 在那里你的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 ;
?>

所以, 只是把这个代码在您foo.php,计算字符串$ stylestr和你做. 但我们的问题是,我们正在努力在WordPress的插件框架, 而不能使用的标头() 电话. 当您尝试这样做,, 你会得到错误信息说,头已经完成花花公子. 针对此问题, 我找到了巧妙的解决方案,我用的插件之一. 忘记了哪一个, 但我想这是一种常见的技术. 该解决方案是定义一个空的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? 明确地, 它不会是你的服务器上的静态文件. 与这个主题的目的是要表明,它不必须是在服务器上的文件中,在所有. 它是由两部分组成的答案. 你要记住,你是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>

请注意,按钮的名称属性 “saveCSS。” 现在, 在代码的部分,处理的顺服, 你做这样的事情:

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

?>

这是$ styleurl,你会给你的iframe的源, 前锋. 请注意,这是一样的你pluging页面网址, 除非你设法添加 “?保存” 在它的结束. 接下来的关键是要抓住这样的说法和处理它. 对于, 使用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() ;
}
?>

现在,我们几乎无家. 要了解的唯一的事情就是你 需要模具(). 如果你的函数不会死, 它会喷涌出来的WordPress的东西产生,其余为你保存文件, 其追加到您的字符串$ stylestr.

它可能看起来复杂. 好, 我想这是一个有点复杂, 但一旦你实现它,并让它运行, 您可以 (做) 忘掉它. 至少, 我做的. 这就是为什么我张贴在这里, 因此,在未来的时间,我需要做的, 我可以看看它.

评论