Upload - muhametsafak/phpxi Wiki

Yükleme İşlemi

Dosyanın Bildirilmesi

Yükleme işlemine başlanmadan önce; hangi dosyanın yükleneceği bildirilmelidir. Dosya bildirimi için file() metodu kullanılır.

public function file(array $file): self

$file : Dosyanın geçici yolu ve adını içeren bir $_FILES dizesidir.

Örnek:

$this->upload->file($_FILES["file"]);

Bildirilen Dosyanın Yüklenmesi

Yüklemek için bildirilmiş ve hazırlanmış dosya handle() metodu ile yüklenir.

public function handle(): self

Örnek:

$this->upload->file($_FILES["file"])->handle();
<form method="post" enctype="multipart/form-data">
<input type="file" name="dosya" />
<input type="submit" value="Yükle"/>
</form>

yukarıdaki form ile gönderilen dosyanın yüklenme işlemi için;

$file = $this->input->files("dosya");
$this->upload->file($file);
$this->upload->handle();

Çoklu (Multi) Yükleme

PHPXI çoklu yüklemeyi bir çok nedenden dolayı doğrudan desteklemez. Bunun yerine çoklu gelen yükleme isteklerini parçalayarak tek tek yükleme yoluna gidilir. Bu parçalama ya da ayrıştırma işlemi split() metodu tarafından yapılır.

public function split(array $files): array

Örnek:

$files = $this->upload->split($_FILES["files"]);
foreach($files as $file){
    $this->upload->file($file)->handle();
}
<form method="post" enctype="multipart/form-data">
<input type="file" name="dosya[]" />
<input type="file" name="dosya[]" />
<input type="file" name="dosya[]" />
<input type="submit" value="Yükle"/>
</form>

yukarıdaki form ile gönderilen dosyanın yüklenme işlemi için;

$dosyalar = $this->input->files("dosya");
$files = $this->upload->split($dosyalar);
foreach($files as $file){
    $this->upload->file($file)->handle();
}

Yükleme Bilgilerini Öğrenme

Yüklenen dosyanın adını öğrenmek için get_name() metodu kullanılır. Bu metot dosya adını döndürür. Dosya adı yoksa false döner.

public function get_name(): string|bool

Yüklenen dosyanın byte cinsinden boyutunu öğrenmek için get_size() metodu kullanılır. Bu metot dosyanın byte cinsinden boyutunu tam sayı türünde döndürür. Dosya boyutu bilinmiyorsa false döner.

public function get_size(): int|bool

Yüklenen dosyanın türünü (MIME Type) get_type() metodu ile öğrenebilirsiniz. Dosya türünü bir dize olarak döndürür, başarısızlık durumunda false döndürür.

public function get_type(): string|bool

Yüklenen dosyanın dosya yolunu get_path() metodu ile öğrenebilirsiniz. Dosyanın tam yolunu (path) bir dize olarak döndürür, başarısızlık durumunda false döner.

public function get_path(): string|bool

Yüklenen dosyanın URL adresi get_url() metodu ile öğrenebilirsiniz. Dosyanın URL adresini bir dize olarak döndürür, başarısızlık durumunda false döndürür.

public function get_url(): string|bool

Yükleme işleminin durumunu get_status() metodu ile öğrenebilirsiniz. Yükleme başarılı ise true, başarısız olursa false döndürür.

public function get_status(): bool

Yükleme işlemi sırasında oluşan hatayı get_error() metodu ile alabilirsiniz. Bir hata oluştuysa, oluşan hata bir dize olarak döndürülür. Hata bulunmuyorsa false döndürür.

public function get_error(): string|bool

Thumbnail Oluturma

Bir resim yüklemesi için yükleme işlemi sırasında, ilgili yükleme için bir küçük resim oluşturmak için thumbnail() metodu kullanılır.

public function thumbnail(int $width = 300, int $height = 300, string $prefix = "thumb_"): self

Not : Bu metot çalışabilmek için GdImage kütüphanesine ihtiyaç duyar. Ve sadece image/jpg, image/jpeg, image/gif ya da image/png dosya türleri için işlem yapabilir. Oluşturulan küçük resim yine dosya ile aynı türde olacaktır.

$width : Oluşturulacak küçük resmin genişliğini "px" cinsinden belirten bir tam sayıdır.

$height : Oluşturulacak küçük remin yüksekliğini "px" cinsinden belirten bir tam sayıdır.

$prefix : Oluşturulacak küçük resim adının önüne gelecek dizedir.

Örnek:

$this->upload->file($_FILES['resim']);
$this->upload->handle()->thumbnail(360, 240, "onek_");

Oluşturulan küçük resimin url adresini get_thumbnail_url() metodu ile öğrenebilirsiniz. Thumbnail için bir url bulunamazsa false döndürür.

public function get_thumbnail_url(): string|bool

Oluşturulan küçük resimin dosya yolunu get_thumbnail_path() metodu ile öğrenebilirsiniz. Thumbnail için bir path bulunamazsa false döndürür.

public function get_thumbnail_path(): string|bool

Resim Boyutlandırma

Yüklenmiş bir resmi yeniden boyutlandırarak yüklemek için image_resize() metodu kullanılabilir.

public function image_resize(string $path, array $resize = ["width" => "300", "height" => "300"], string $prefix = "thumb_"): array|bool

Not : Bu metot çalışabilmek için GdImage kütüphanesine ihtiyaç duyar.

$path : Yeniden boyutlandırılacak resmin dosya yolunu ifade eder.

Not : Bu metodun çalışabilmesi için image/jpg, image/jpeg, image/gif ya da image/png türünde bir dosya yolu belirtilmelidir.

$resize : Oluşturulacak yeni dosyanın genişlik ve yükseklik bilgisini bir ilişkisel dizi olarak tanımlar.

$prefix : Oluşturulacak yeni dosyanın isim ön ekini belirtir.

İşlem başarılı olursa yeni dosyanın bilgilerini bulunduran aşağıdakine benzer bir dizi döndürür. İşlem başarısız olursa false döndürür.

array(
    "path" => "/home/public_html/uploads/thumb_yeniresim.jpg",
    "url" => "http://lvh.me/upload/thumb_yeniresim.jpg"
);

Yüklemeye Özel Yapılandırma

Bir yükleme işlemi için /Config/Upload.php yapılandırmasında tanımlananlardan farklı bir yapılandırma kullanmak isterseniz, kullanabileceğiniz bazı metotlar vardır.

Yükleme Dizinini/Klasörünü Değiştirme

İlgili yüklemenin yapılacağı path yolunu yapılandırmak için path() metodu kullanılır.

public function path(string $path): self

Yükleme Dizini/Klasörü URL'sini Değiştirme

Yükleme dizin yolunu değiştirmeniz durumunda yeni yükleme dizininin URL adresini de tanımlamanız gerekir. Bu işlem için url() metodu kullanılır.

public function url(string $url): self

Yükleme Yeniden İsimlendirmeyi Açmak/Kapatmak

PHPXI yüklenecek dosya ile aynı isimde bir dosya varsa varsayılan olarak yeni yüklemenin dosya adının sonuna -2 gibi bir ifade yerleştirerek her iki dosyayı da tutmayı sağlar.

rename() metodu ile yeniden isimlendirmeyi kapatarak varolan dosyanın üzerine yazma yapabilirsiniz.

public function rename(bool $rename = false): self

Yükleme Dosya Adını Belirleme

Yüklenen dosyanın adını değiştirerek yükleme yaptırabilirsiniz. Bu işlem için name() metodu kullanılır.

public function name(string $name): self

Yükleme Limitini Değiştirme

Yüklenebilecek maksimum dosya boyutunu byte cinsinden değiştirmek için maxSize() metodu kullanılır.

public function maxSize(int $size = 1048576): self

Yüklenebilir Dosya Türlerini Belirleme

Yüklenmesine izin verilecek dosyaların mime türlerini types() metodu ile belirleyebilirsiniz.

public function types(array $file_type = ["image/jpg", "image/png"]): self

Yüklenmesine izin verilecek dosyaların dosya uzantısı extension() metodu ile değiştirebilirsiniz.

public function extension(array $file_extension = ["jpg", "png"]): self

Sıkıştırma Oranlarını Yeniden Ayarlama

Sıkıştırma oranını yükleme özelinde değiştirmek için compress() metodu kullanılır.

public function compress(string $extension, int $ratio): self

$extension : Sıkıştırma oranının hangi dosya uzantıları için geçerli olacağını ifade eder. PHPXI sadece jpg ve png için sıkıştırma yapabilir. Bu yüzden bu değer bu ikisinden birisi değilse; metot hiçbir şey yapmaz.

$ratio : Sıkıştırma işlemi için bir oran belirtir. Bu oran jpg dosyaları için 0-100 arasında, png dosyaları içinse 0-9 arasında bir tam sayıdır. jpg dosyaları için küçük sayı; küçük dosya boyutu ve düşük kalite anlamına gelir. png dosyaları için küçük sayı; büyük dosya boyutu ve yüksek kalite anlamına gelir.