بناء ملف القطران من الدليل في PHP دون إكسيك / في PassThru
سؤال
وهكذا لدي العميل الذي هو المضيف الحالي لا يسمح لي لاستخدام القطران عبر إكسيك () / في PassThru () / إلخ وأنا بحاجة لعمل نسخة احتياطية من الموقع periodicly وprogrammaticly لذلك ليس هناك حل؟
وهذا هو خادم لينكس.
المحلول 2
http://pear.php.net/package/Archive_Tar الذي يمكن donload لل حزمة القطران الكمثرى واستخدامها مثل هذا لإنشاء الأرشيف:
<?php
require 'Archive/Tar.php';
$obj = new Archive_Tar('archive.tar');
$path = '/path/to/folder/';
$handle=opendir($path);
$files = array();
while(false!==($file = readdir($handle)))
{
$files[] = $path . $file;
}
if ($obj->create($files))
{
//Sucess
}
else
{
//Fail
}
?>
نصائح أخرى
وPHP 5.3 يوفر طريقة أسهل بكثير لحل هذه المسألة.
وانظر هنا: http://www.php.net/manual/en /phardata.buildfromdirectory.php
<?php
$phar = new PharData('project.tar');
// add all files in the project
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
?>
وهناك Archive_Tar المكتبة. وإذا كان هذا لا يمكن أن تستخدم لسبب ما، و الرمز البريدي التمديد قد يكون خيار آخر.
وأحتاج إلى حل من شأنه أن يعمل على مواقع أزور (IIS) واجهت مشكلة مع إنشاء ملفات جديدة على الملقم باستخدام أساليب من إجابات أخرى. وكان الحل الذي عملت بالنسبة لي لاستخدام صغيرة TbsZip مكتبة لل ضغط، والتي لا تتطلب لإرسال ملف في أي مكان في الخادم - انها عاد لتوه مباشرة عبر HTTP
وهذا موضوع قديم، ولكن هذا النهج قد يكون قليلا أكثر عمومية وإجابة كاملة، ولذا فإنني إضافة الكود كما بديل:
// Compress all files in current directory and return via HTTP as a ZIP file
// by buli, 2013 (http://buli.waw.pl)
// requires TbsZip library from http://www.tinybutstrong.com
include_once('tbszip.php'); // load the TbsZip library
$zip = new clsTbsZip(); // instantiate the class
$zip->CreateNew(); // create a virtual new zip archive
// iterate through files, skipping directories
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'));
foreach($objects as $name => $object)
{
$n = str_replace("/", "\\", substr($name, 2)); // path format
$zip->FileAdd($n, $n, TBSZIP_FILE); // add fileto zip archive
}
$archiveName = "backup_".date('m-d-Y H:i:s').".zip"; // name of the returned file
$zip->Flush(TBSZIP_DOWNLOAD, $archiveName); // flush the result as an HTTP download
وهنا تكمن على بلدي بلوق .