Làm thế nào để tiết kiệm một chuỗi vào một tập tin địa phương trong PHP?

Đây là bài thứ hai trong loạt đam mê của tôi.

Trong khi lập trình Theme Tweaker của tôi, Tôi đã xem qua vấn đề này. Tôi đã có một chuỗi trên máy chủ của tôi trong chương trình php của tôi (stylesheet chỉnh, trong thực tế), và tôi muốn cung cấp cho người dùng tùy chọn lưu nó vào một tập tin máy tính của mình. Tôi đã nghĩ đây là một vấn đề phổ biến, và tất cả các vấn đề phổ biến có thể được giải quyết bằng cách Googling. Nhưng, lo và kìa, Tôi chỉ không thể tìm thấy một giải pháp thỏa đáng. Tôi tìm thấy của riêng tôi, và nghĩ rằng tôi sẽ chia sẻ nó ở đây, vì lợi ích của tất cả các nhân viên của Google trong tương lai chưa đến và đi.

Trước khi chúng tôi đi vào các giải pháp, chúng ta hãy hiểu vấn đề là gì. Vấn đề là trong phân công lao động giữa hai máy tính — là một trong những máy chủ, nơi WordPress và PHP của bạn đang chạy; khác là máy tính của khách hàng mà xem đang diễn ra. Chuỗi chúng ta đang nói về là trên máy chủ. Chúng tôi muốn lưu nó vào một tập tin trên máy tính của khách hàng. Cách duy nhất để làm điều đó là bằng cách phục vụ những chuỗi như là một trả lời html.

Ngay từ cái nhìn đầu tiên, này không giống như một vấn đề lớn. Sau khi tất cả, các máy chủ thường xuyên gửi các chuỗi và các dữ liệu cho khách hàng — đó là cách chúng ta nhìn thấy bất cứ điều gì trên trình duyệt, bao gồm cả những gì bạn đang đọc. Nếu đó chỉ là bất kỳ chương trình PHP mà muốn lưu các chuỗi, nó sẽ không là một vấn đề. Bạn chỉ có thể đổ chuỗi thành một tập tin trên máy chủ và phục vụ các tập tin.

Nhưng bạn sẽ làm gì nếu bạn không muốn cho cả thế giới một cách chuỗi bán phá giá các tập tin trên máy chủ của bạn? Cũng, bạn có thể làm một cái gì đó như thế này:

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

Vì vậy,, chỉ cần đặt mã này trong foo.php của bạn mà tính toán chuỗi $ stylestr và bạn đã làm xong. Nhưng rắc rối của chúng tôi là chúng tôi đang làm việc trong khuôn khổ các plugin WordPress, và không thể sử dụng tiêu đề() cuộc gọi. Khi bạn cố gắng để làm điều đó, bạn sẽ nhận được thông báo lỗi nói rằng tiêu đề đã được thực hiện anh chàng. Đối với vấn đề này, Tôi tìm thấy giải pháp khéo léo trong một trong những bổ sung mà tôi sử dụng. Quên cái nào, nhưng tôi đoán nó là một kỹ thuật phổ biến. Giải pháp là để xác định một iFrame trống và thiết lập nguồn của nó với những gì các chức năng PHP sẽ viết. Kể từ iFrame hy vọng một nguồn HTML đầy đủ, bạn được phép (trong thực tế, có nghĩa vụ) để cung cấp cho tiêu đề() chỉ thị. Đoạn mã trông giống như:

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

Bây giờ câu hỏi là, những gì nên nguồn được? Nói cách khác, $ styleurl là những gì? Rõ ràng, nó không phải là có được một tập tin tĩnh trên máy chủ của bạn. Và mục đích của bài viết này là để cho thấy rằng nó không phải là một tập tin trên máy chủ ở tất cả. Đó là một câu trả lời hai phần. Bạn phải nhớ rằng bạn đang làm việc trong khuôn khổ WordPress, và bạn không thể làm cho các tập tin php độc. Điều duy nhất bạn có thể làm là thêm tham số cho file php hiện tại, hoặc các plugin bạn đã tạo ra. Vì vậy, đầu tiên bạn tạo một nút gửi như sau:

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

Lưu ý rằng các thuộc tính tên của nút là “saveCSS.” Bây giờ, trong một phần của mã để xử lý phục tùng, bạn làm điều gì đó như:

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

?>

Đây là $ styleurl mà bạn sẽ cung cấp cho là nguồn gốc của iFrame của bạn, về phía trước. Lưu ý rằng nó cũng giống như URL trang pluging của bạn, ngoại trừ việc bạn cố gắng thêm “?lưu” tại kết thúc của nó. Bí quyết tiếp theo là để nắm bắt lý luận đó và xử lý nó. Cho rằng, bạn sử dụng chức năng WordPress API, add_action như:

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

Điều này bổ sung thêm một chức năng để saveCSS phần init của plugin của bạn. Bây giờ bạn phải xác định chức năng này:

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

Bây giờ chúng ta đang ở nhà miễn phí. Điều duy nhất cần hiểu được là bạn làm cần chết(). Nếu chức năng của bạn không chết, nó sẽ phun ra phần còn lại của các tạo ra các công cụ WordPress vào tập tin lưu của bạn, phụ thêm nó vào chuỗi của bạn $ stylestr.

Nó có thể nhìn phức tạp. Cũng, Tôi đoán nó là một chút phức tạp, nhưng một khi bạn thực hiện nó và làm cho nó chạy, bạn có thể (và làm) quên nó đi. Ít nhất, Tôi làm. Đó là lý do tại sao tôi đăng nó ở đây, do đó thời gian tới, tôi cần phải làm điều đó, Tôi có thể nhìn nó lên.

Bình luận