كيفية حفظ سلسلة إلى ملف محلي في PHP?

وهذه الوظيفة هي الثانية في سلسلة بلدي المهوس.

بينما البرمجة بلدي موضوع مدمن المخدرات, جئت عبر هذه المشكلة. كان لي سلسلة في خدمة بلدي في برنامج فب بلدي (الأنماط أنب, في الواقع), وكنت أرغب في إعطاء المستخدم خيار حفظ إلى ملف جهاز الكمبيوتر الخاص به. سوف لقد نظن أن هذا كان مشكلة شائعة, وجميع المشاكل المشتركة يمكن حلها عن طريق غوغلينغ. لكن, وها, أنا فقط لا يمكن أن تجد حلا مرضيا. لقد وجدت بلدي, وأعتقد أنني سوف تشاركه هنا, لصالح كل من مستخدمي Google في المستقبل بعد أن تأتي وتذهب.

قبل أن نذهب إلى الحل, دعونا نفهم ما هي المشكلة. المشكلة هي في تقسيم العمل بين جهازي كمبيوتر — واحد هو الخادم, حيث ورد الخاص بك و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 وانت القيام به. لكن المشكلة لدينا هي أننا نعمل في إطار البرنامج المساعد وورد, ولا يمكن استخدام رأس() المكالمات. عند محاولة القيام بذلك, سوف تحصل على رسالة خطأ تفيد أن يتم رأس بالفعل المتأنق. لهذه المشكلة, لقد وجدت الحل بارعة في واحدة من الإضافات التي أستخدمها. نسيت أي واحد, ولكن أعتقد أنه هو تقنية شائعة. والحل هو لتعريف الإطار من فارغة ووضع المصدر إلى ما وظيفة PHP سوف إرسال. منذ الإطار من تتوقع مصدر 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? بوضوح, فإنه لن يكون ملف ثابت على الخادم الخاص بك. والغرض من هذا المنصب هو إظهار أنه لا يجب أن يكون الملف على الخادم على الإطلاق. وهو الجواب جزئين. عليك أن تتذكر أنك تعمل في إطار وورد, وأنت لا يمكن أن تجعل ملفات 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 أنك سوف تعطي كمصدر من الإطار من الخاص بك, إلى الأمام. لاحظ أنه هو نفس URL الصفحة إلى pluging الخاص بك, إلا أنك تمكنت من إضافة “?حفظ” في نهاية ذلك. الحيلة التالية هي للقبض على تلك الحجة والتعامل معها. لذلك, يمكنك استخدام وظيفة 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.

قد تبدو معقدة. جيد, أعتقد هو قليلا معقدة, ولكن بمجرد تنفيذه وسهولة الحصول عليها تشغيل, يمكنك (والقيام) نسيانها. على الأقل, أفعل. هذا هو السبب في أنني نشره هنا, لذا في المرة القادمة أنا في حاجة للقيام بذلك, أستطيع أن ننظر إليه.

تعليقات