PHP ile Klasör Arşivlemek ve Sunucuya Upload Etmek
PHP ile bir klasörü sıkıştırmayı ve ardından uzak sunucuya yüklenme işlemlerini yapacağız.
PHP ile bir dosyayı veya klasörü ziplemek için dahili ZipArchive sınıfını kullanacağız.
İlk Olarak
$arsivDosyasi = ‘ziparsivadi.zip’;
$kaynak = ‘dosya yada klasor adi’// ‘dosya.txt’, ‘klasor’;
$zip = new ZipArchive(); //Nesne türetiyoruz.
//Eğer verdiğimiz isimde bir zip varsa üstüne yazar yoksa yaratır.
$zip->open($arsivDosyasi, ZipArchive::CREATE | ZipArchive::OVERWRITE);$dirName = $kaynak;
if (!is_dir($dirName)) {
throw new Exception(‘$dirName . ‘ adında bir dosya bulunamamaktadır.’);
}$dirName = $dirName;
if (substr($dirName, -1) != ‘/’) {
$dirName.= ‘/’;
}$dirStack = array($dirName);
//Find the index where the last dir starts
$cutFrom = strrpos(substr($dirName, 0, -1), ‘/’)+1;while (!empty($dirStack)) {
$currentDir = array_pop($dirStack);
$filesToAdd = array();$dir = dir($currentDir);
while (false !== ($node = $dir->read())) {
if (($node == ‘..’) || ($node == ‘.’)) {
continue;
}
if (is_dir($currentDir . $node)) {
array_push($dirStack, $currentDir . $node . ‘/’);
}
if (is_file($currentDir . $node)) {
$filesToAdd[] = $node;
}
}$localDir = substr($currentDir, $cutFrom);
$zip->addEmptyDir($localDir);foreach ($filesToAdd as $file) {
$zip->addFile($currentDir . $file, $localDir . $file);
}
}$zip->close();
Bu komutlar ile zip dosyasını oluşturmuş olduk. Çalışma mantığı şöyledir. Eğer arşilemek istediğimiz dosya ise direk olarak zipin içine atar eğer dosya değil klasör ise o klasörün içine girer ve o klasörü tarar ardından içerisinde ki dosyaları arşivler. Ve bu klasör kalmayana kadar devam eder. En sonunda tüm klasör arşivlenmiş olur. Arşivleme yaptıktan sonra sunucuya göndermek için ftp komutları kullanılacaktır.
$ftp_server = ‘siteadi.com’;
$ftp_user = ‘ftpkullaniciadi’;
$ftp_pass = ‘ftpsifre’;$yerel = $arsivDosyasi;
$uzak = ‘public_html/yenisim.zip’;// bağlantıyı kuralım
$conn_id = @ftp_connect($ftp_server) or die(“$ftp_server sunucusuna bağlantı kurulamadı…”);
// oturum açmayı deneyelim
if (@ftp_login($conn_id, $ftp_user, $ftp_pass)) {//Sunucuda yükleyeceğimiz dosya için yer ayıra
if (@ftp_alloc($conn_id, filesize($yerel), $result)) {//Sunucuya dosyasımız gönderelim.
if (@ftp_put($conn_id, $uzak, $yerel, FTP_BINARY)) {/*CHMOD ayarı yapalım (Eğer yüklediğimiz dosya ile uzak sunucuda işlem yaptıracaksak gerekli aksi halde gerek yok) */
//ftp_chmod($conn_id, 0777, $uzak);echo ‘islem tamamlandi.’
}
else
{
echo “$yerel karşıya yüklenirken bir sorun çıktı\n”;
}
}
else
{
echo “Sunucuda yer ayrılamadı. Sunucunun yanıtı: $result\n”;}
}
else
{
echo “$ftp_user için oturum açılamadı\n”;
}// bağlantıyı kapatalım
ftp_close($conn_id);
Bu işlemlerin ardından zip dosyası sunucuya yüklenecektir. Hayırlı olsun 🙂
Eğer dosyaları zipten çıkarmak istiyorsak.
$zip = new ZipArchive;
$res = $zip->open(‘dosya.zip’);
if ($res === TRUE) {
$zip->extractTo(‘./’); //Eğer bir üst dizine çıkarmak istiyorsak tırnak içini ../ yaparız.
$zip->close();
}
Komutlarını çalıştırarak zipin bulunduğu dizine çıkarma işlemini yapmış oluruz.