Πώς να αποθηκεύσετε ένα string σε ένα τοπικό αρχείο στο PHP?

Αυτή η θέση είναι η δεύτερη στη σειρά geek μου.

Ενώ προγραμματισμού Θέμα Tweaker μου, Ήρθα σε αυτό το πρόβλημα. Είχα μια χορδή στο server μου στο πρόγραμμα php μου (το πειραγμένο στυλ, όντως), και θα ήθελα να δώσει στο χρήστη τη δυνατότητα να αποθηκεύσετε σε ένα αρχείο του υπολογιστή του. Θα ήθελα να έχω σκεφτεί αυτό ήταν ένα κοινό πρόβλημα, και όλα τα κοινά προβλήματα μπορούν να επιλυθούν με Googling. Αλλά, ιδού, Απλά δεν μπορούσε να βρει μια ικανοποιητική λύση. Βρήκα το δικό μου, και σκέφτηκα ότι θα το μοιραστώ εδώ, προς όφελος όλων των μελλοντικών της Google ακόμα να έρθει και να πάει.

Πριν πάμε στο διάλυμα, ας καταλάβουμε ποιο είναι το πρόβλημα. Το πρόβλημα είναι στον καταμερισμό της εργασίας μεταξύ των δύο υπολογιστών — ένας είναι ο διακομιστής, όπου WordPress και PHP σας είναι σε λειτουργία; η άλλη είναι ο υπολογιστής του πελάτη όταν η προβολή γίνεται. Η σειρά μιλάμε είναι στο διακομιστή. Θέλουμε να το αποθηκεύσετε σε ένα αρχείο στον υπολογιστή του πελάτη. Ο μόνος τρόπος για να γίνει αυτό είναι με τη σειρά που υπηρετούν ως html απάντηση.

Με την πρώτη ματιά, Αυτό δεν μοιάζει με ένα μεγάλο πρόβλημα. Μετά από όλα, servers στέλνουν τακτικά χορδές και τα δεδομένα για τους πελάτες — αυτό είναι το πώς βλέπουμε τίποτα σχετικά με το πρόγραμμα περιήγησης, συμπεριλαμβανομένου του τι διαβάζετε. Αν ήταν ένα οποιοδήποτε πρόγραμμα PHP που θέλει να σώσει το string, δεν θα είναι ένα πρόβλημα. Θα μπορούσατε να πετάξεις απλά το string σε ένα αρχείο στον server και να εξυπηρετήσει το αρχείο.

Αλλά τι θα κάνεις αν δεν θέλετε να δώσει ολόκληρο τον κόσμο έναν τρόπο χορδές ντάμπινγκ για τα αρχεία στον server σας? Καλά, θα μπορούσατε να κάνετε κάτι σαν αυτό:

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

Έτσι, μόλις τοποθετήσετε αυτόν τον κώδικα σε foo.php σας που υπολογίζει το string $ stylestr και είστε έτοιμοι. Αλλά το πρόβλημα μας είναι ότι εργαζόμαστε στο πλαίσιο plugin WordPress, και δεν μπορούν να χρησιμοποιήσουν την κεφαλίδα() κλήσεις. Όταν προσπαθείτε να το κάνετε αυτό, θα λάβετε το μήνυμα λάθους λέγοντας ότι η επικεφαλίδα έχει ήδη γίνει μάγκα. Γι 'αυτό το πρόβλημα, Βρήκα την έξυπνη λύση σε ένα από τα plugins που χρησιμοποιώ. Ξεχάσατε το οποίο ένα, αλλά υποθέτω ότι είναι μια κοινή τεχνική. Η λύση είναι να ορίσετε ένα άδειο 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? Σαφώς, δεν πρόκειται να είναι ένα στατικό αρχείο στον server σας. Και ο σκοπός αυτής της θέσης είναι να δείξει ότι δεν πρέπει να είναι ένα αρχείο στον κεντρικό υπολογιστή σε όλα. Είναι μια απάντηση σε δύο μέρη. Θα πρέπει να θυμάστε ότι εργάζεστε στο πλαίσιο WordPress, και δεν μπορείτε να κάνετε αυτόνομο αρχεία 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.” Τώρα, στο τμήμα του κώδικα που χειρίζεται submits, κάνετε κάτι σαν:

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

?>

Αυτό είναι το $ styleurl που θα δώσει ως πηγή iFrame σας, προς τα εμπρός. Σημειώστε ότι είναι το ίδιο με 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 λειτουργία στο τμήμα init του plugin σας. Τώρα πρέπει να ορίσετε αυτή τη λειτουργία:

<?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 που δημιουργείται πράγματα σε αποθηκεύσετε το αρχείο σας, προσαρτώντας το σε string $ stylestr σας.

Μπορεί να φαίνεται περίπλοκη. Καλά, Υποθέτω ότι είναι λίγο περίπλοκο, αλλά τη στιγμή που θα το εφαρμόσει και να πάρει το τρέξιμο, μπορείτε να (και να κάνουμε) ξεχάσουμε αυτό. Τουλάχιστον, Κάνω. Γι 'αυτό δημοσιεύτηκε εδώ, έτσι ώστε την επόμενη φορά που θα χρειαστεί να το κάνουμε, Μπορώ να κοιτάζω προς τα πάνω.

Σχόλια