FTP ve SFTP (ssh ftp) işlemleri için Php FtpClient kütüphanesi

files-folders-pc-transfer-move Bir proje için yazdığım FTP kütüphanesini bazı düzenlemeler yaparak genel kullanıma açtım. Kütüphaneyi kullanarak FTP ve SSH sunucularına bağlanıp dosya ve klasör işlemlerini yapabilirsiniz. FTP sunucuları için SSL bağlantısını da destekler. Kurulumu ve kullanımı oldukça kolaydır. PHP sürümü 5.4 ve üzeri olmalıdır. Kütüphane kodlarını incelemek için Github deposuna bakabilirsiniz.

Kurulum

Kütüphaneyi Composer kullanarak kurabilirsiniz. Composer hakkında bilginiz yoksa arama yaparak kurulum ve kullanımı hakkında Türkçe kaynak bulabilirsiniz.

composer require altayalp/ftp-client

Bu kod mevcut dizine kütüphaneyi kurmanızı sağlar.

Kullanımı

Composer ile kurulum yaptıktan sonra vendor/autoload.php sayfasını include etmeniz gerekmektedir.

Sunucuya Bağlanmak ve Oturum Açmak

<?php
// Ftp sunucusuna bağlantı
use altayalp\FtpClient\FtpServer;

$server = new FtpServer('ftp.example.com');
$server->login('user', 'password');

// Ssh sunucusuna bağlantı
use altayalp\FtpClient\SftpServer;

$server = new SftpServer('ssh.example.com');
$server->login('user', 'password');
?>

SftpServer sınıfını port belirterek, FtpServer sınıfını port ve zaman aşımı belirterek çağırabilirsiniz. SftpServer sınıfı için varsayılan port 22, FtpServer sınıfı için port 21 ve zaman aşımı 90 saniyedir.

<?php
// Ftp sunucusuna bağlantı
use altayalp\FtpClient\FtpServer;

$server = new FtpServer('ftp.example.com', 21, 90);
$server->login('user', 'password');

// Ssh sunucusuna bağlantı
use altayalp\FtpClient\SftpServer;

$server = new SftpServer('ssh.example.com', 22);
$server->login('user', 'password');
?>

Sunucuda oturum açtıktan sonra FTP veya SFTP fark etmeden dosya ve klasör işlemleri için aynı sınıf ve metotları kullanabilirsiniz. Factory sınıfları gerekli sınıf nesnesini oluşturacaktır.

FTP işlemlerinde herhangi bir sorun yaşarsanız turnPassive() metodunu sunucuda oturum açtıktan sonra yani login() metodundan sonra kullanabilirsiniz.

<?php
$server->turnPassive();
?>

turnPassive() metodu bağlantının istemci tarafından başlatılmasını sağlar. Güvenlik duvarı açık olan sunucularda genellikle bu metodu kullanmak gerekir. turnPassive() SFTP için mevcut değildir.

Dosyaları Listelemek

Dosya işlemleri için öncelikle FileFactory sınıfını kullanarak dosya sınıfının örneğini (instance) oluşturmamız gerekir.

<?php
use altayalp\FtpClient\FileFactory;

$file = FileFactory::build($server);
$list = $file->ls('public_html');
print_r($list);
?>

Öncelikle dosya sınıfımızın örneğini oluşturuyoruz. Daha sonra ls metodunu kullanarak dosyaların listesini bir diziye aktarıyoruz ve print_r ile ekrana basıyoruz. Kodun çıktısı:

Array
(
    [0] => index.php
    [1] => .gitignore
    [2] => .htaccess
    [3] => composer.json
    [4] => phpunit.xml
    [5] => robots.txt
    [6] => server.php
)

ls metodu isteğe bağlı iki parametre daha alır. İlk parametre alt klasörlerin listelenip listelenmeyeceğini, ikinci parametre ise listelenmesini istemediğiniz dosyaların uzantılarını belirler.

<?php
$list = $file->ls('public_html' false, array('php','html'));
?>

Kodun çıktısı:

Array
(
    [0] => .gitignore
    [1] => .htaccess
    [2] => composer.json
    [3] => phpunit.xml
    [4] => robots.txt
)

php ve html uzantılı dosyaların listelenmemesini sağladık.

Klasörleri Listelemek

Klasörleri listelemek için, dosya işlemleri için yaptığımız gibi öncelikle klasör sınıfının örneğini oluşturmamız gerekir.

<?php
use altayalp\FtpClient\DirectoryFactory;

$dir = DirectoryFactory::build($server);
$list = $dir->ls('public_html');
print_r($list);
?>

Kodun çıktısı:

Array
(
    [0] => app
    [1] => bootstrap
    [2] => css
    [3] => packages
    [4] => vendor
)

Klasör sınıfının ls metodu da isteğe bağlı iki parametre alır. İlk parametre yine alt klasörlerin listelenip listelenmeyeceğini, ikinci parametre ise listelenmesini istemediğiniz klasör isimlerini belirler.

<?php
$list = $dir->ls('public_html' false, array('packages','vendor'));
print_r($list);
?>

Kodun çıktısı:

<?php
Array
(
    [0] => app
    [1] => bootstrap
    [2] => css
)
?>

Diğer Dosya İşlemleri

Sunucudan dosya indirmek

<?php
$file->download('public_html/remote.html', 'local.html');
?>

Sunucuya dosya yüklemek

<?php
$file->upload('local.zip', 'public_html/remote.zip');
?>

http üzerinden dosya yüklemek

<?php
$file->wget('http://www.example.com/remote.zip', 'public_html/remote.zip');
?>

Dosyanın ismini değiştirmek

<?php
$file->rename('public_html/oldname.zip', 'public_html/newname.zip');
?>

Chmod ayarını değiştirmek

<?php
$file->chmod(0777, 'public_html/file.zip');
?>

Dosya silmek

<?php
$file->rm('public_html/remote.zip');
?>

Dosyanın son güncellenme tarihi öğrenmek

<?php
$file->getLastMod('public_html/remote.zip');
?>

Tarihi Unix formatında döndürür.

Dosya boyutunu öğrenmek

<?php
$file->getSize('public_html/remote.zip');
?>

Dosya boyutunu bayt olarak döndürür.

Diğer Klasör İşlemleri

Yeni klasör oluşturmak

<?php
$dir->mkdir('public_html/new_directory');
?>

Bulunduğumuz klasörü değiştirmek (cd)

<?php
$dir->cd('public_html/new_directory');
?>

Bulunduğumuz klasörü öğrenmek

<?php
$dir->pwd();
?>

Klasörün ismini değiştirmek

<?php
$dir->rename('public_html/oldname', 'public_html/newname');
?>

Chmod ayarını değiştirmek

<?php
$dir->chmod(0777, 'public_html/directory');
?>

Klasör silmek

<?php
$dir->rm('public_html/directory');
?>

Silinecek klasör boş olmalıdır.

Yardımcı Sınıf Kullanımı

Yardımcı sınıf dönen değerleri işlemek için bazı kullanışlı metotlar sunar.

  • Helper::formatByte: Dosya boyutunu okunabilir hale getirmek için kullanılır.
  • Helper::formatDate: Unix tarih formatını okunabilir hale getirmek için kullanılır.
  • Helper::getFileExtension: Dosya uzantısını döndürür.
  • Helper::newName: İndirilen dosya mevcutsa dosyayı yeniden adlandırır.
<?php
Helper::formatByte($file->getSize('public_html/dashboard.zip'));
// Çıktısı: 32.47 Mb
Helper::formatDate($file->getLastMod('public_html/dashboard.zip'));
// Çıktısı: 14.06.2016 23:31
// ya da
Helper::formatDate($file->getLastMod('public_html/dashboard'), 'd.m.Y');
// Çıktısı: 14.06.2016
Helper::getFileExtension($fileName);
// Çıktısı: html
$file->download('public_html/demo.html', Helper::newName('demo.html'));
// demo.html dosyası mevcutsa yeniden adlandırır.
// demo.html dosyasını demo_dae4c9057b2ea5c3c9e96e8352ac28f0c7d87f7d.html olarak adlandırır.
?>

Detaylı bilgi için yukarıda belirttiğim gibi kütüphaneyi Github üzerinden inceleyebilirsiniz.

Henüz Yorum Yapan Olmadı

Yorum Yapın