Archivo de la etiqueta: string

Cómo guardar una cadena a un archivo local en PHP?

Este post es el segundo en mi serie friki.

Durante la programación de mi Tema Tweaker, Me encontré con este problema. Tenía una cadena en mi servidor en mi programa php (la hoja de estilo ajustado, De hecho), y yo quería darle la opción de guardar en un archivo de su computadora del usuario. Yo he pensado que esto era un problema común, y todos los problemas comunes pueden resolverse buscando en Google. Pero, Pero hete aquí, Yo no podía encontrar una solución satisfactoria. Encontré mi propia, y pensé en compartirlo aquí, para el beneficio de todos los futuros empleados de Google todavía de ir y venir.

Antes de entrar en la solución, vamos a entender cuál es el problema. El problema está en la división del trabajo entre dos ordenadores — uno es el servidor, donde tu WordPress y PHP se están ejecutando; el otro es el ordenador del cliente, donde la visión se está produciendo. La cadena que estamos hablando es en el servidor. Queremos guardarlo en un archivo en la computadora del cliente. La única manera de hacerlo es sirviendo a la cadena como una respuesta HTML.

A primera vista, esto no se ve como un problema importante. Después de todo, servidores envían regularmente cadenas y datos a clientes — así es como vemos nada en el navegador, incluyendo lo que está leyendo. Si fuera sólo un programa PHP que quiere salvar a la cadena, no sería un problema. Se podía volcar la cadena en un archivo en el servidor y servir el archivo.

Pero ¿qué hacer si usted no desea dar a todo el mundo una forma de dumping cuerdas a los archivos en el servidor? Bueno, usted podría hacer algo como esto:

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

Así, sólo hay que poner este código en tu foo.php que calcula la cadena $ stylestr y ya está. Pero nuestro problema es que estamos trabajando en el marco de plugin de WordPress, y no puede utilizar la cabecera() llamadas. Cuando usted trata de hacer que, obtendrá el mensaje de error diciendo que la cabecera ya se ha hecho amigo. Para este problema, He encontrado la solución ingeniosa en uno de los plugins que utilizo. ¿Ha olvidado cuál, pero supongo que es una técnica común. La solución es definir un iFrame vacío y establecer su origen a lo que la función de PHP escribiría. Desde iFrame espera una fuente HTML completa, se le permite (De hecho, obligados) para dar el encabezado() directivas. El fragmento de código se parece a:

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

Ahora la pregunta es, lo que debería ser la fuente? En otras palabras, lo que es de $ styleUrl? Claramente, no va a ser un archivo estático en el servidor. Y el propósito de este post es para demostrar que no tiene que ser un archivo en el servidor en absoluto. Es una respuesta de dos partes. Hay que recordar que se está trabajando en el marco de WordPress, y usted no puede hacer que los archivos php independientes. La única cosa que puedes hacer es añadir argumentos a los archivos php existentes, o los plugins que se han creado. Así que primero hacer un botón de envío de la siguiente manera:

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

Tenga en cuenta que el atributo de nombre del botón es “saveCSS.” Ahora, en la parte del código que controla somete, haces algo como:

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

?>

Este es el $ styleUrl que darías como la fuente de su iFrame, adelante. Tenga en cuenta que es el mismo que su página pluging URL, excepto que se las arregló para agregar “?guardar” al final de ella. El siguiente truco es capturar ese argumento y manejarlo. Por esa, utiliza la función API de WordPress, add_action como:

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

Esto añade una saveCSS función a la parte de inicio de su plugin. Ahora usted tiene que definir esta función:

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

Ahora estamos casi en casa gratis. La única cosa a entender es que usted hacer necesitará la matriz(). Si su función no muere, se vomitaré el resto de las cosas generada WordPress en su archivo de salvar, añadiendo a su cadena $ stylestr.

Puede parecer complicado. Bueno, Supongo que es un poco complicado, pero una vez que implementarlo y ponerlo en marcha, usted puede (y hacer) olvidarse de él. Al menos, Hago. Es por eso que he publicado aquí, para que la próxima vez que tenga que hacerlo, Puedo mirar hacia arriba.