PHP ile dosya yükleme

Standard

Merhaba;

Şu an geliştirmekte olduğum bir proje sırasında, siteye resim yüklemem gerekti, bende bunun üzerine bulduğum dökümanların bir sentezini oluşturmaya karar verdim.

PHP ile nasıl dosya yükleme yapabiliriz? Elbette dökümanların sınırı olmadığından ben burada temel olarak ihtiyacımız olan kısmını anlatabilirim.

Öncelikle işin arayüz kısmıyla başlayalım, bunun için 2 yolumuz var, 1.si;

<!-- Veri kodlama türü, enctype, aşağıdaki gibi belirtilmek ZORUNDADIR -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE dosya giriş alanından önce bulunmak zorundadır -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- input elemanının adı $_FILES dizisinin içindeki ismi belirler -->
    Bu dosyayı gönder: <input name="kullanici_dosyasi" type="file" />
    <input type="submit" value="Dosyayı Gönder" />
</form>

Bu şekilde dosyanın giriş türünü ve action kısmında alınan dosyanın nereye gönderileceğini “__URL__” yazan kısımda belirterek post metoduyla gönderebiliyoruz. MAX_FİLE_SİZE kısmında bayt cinsinden dosyayı sınırlayabiliyoruz. type kısmında ise, uzantı belirterek sınırlama yapabiliyoruz, mesela jpeg-png-gif formatlarına izin verilecekse bir array oluşturarak oraya bu array birimini girerek çoklu izin verebiliyoruz:

data_types[]={'image/png','image/jpeg','image/gif'};

Şeklinde ön bir ekleme yapıldığı takdirde, bu “data_types” değişkenini “type=’data_types’ ” şeklinde belirtmek yeterli olacaktır.

Bir diğer yol çoklu dosya gönderim olayıdır, onu da bu şekilde yapabiliyoruz;

<form action="" method="post" enctype="multipart/form-data" action="gidecegi_url">
<p>Resimler:
<input type="file" name="resimler[]" />
<input type="file" name="resimler[]" />
<input type="file" name="resimler[]" />
<input type="submit" value="Gönder" />
</p>
</form>

Yine seçim yaptıktan sonra gidecegi_URL yazan kısma ilgili sayfamıza yönlendirmeyi yaparak gönderebiliyoruz. Arkaplandaysa;

<?php
foreach ($_FILES["resimler"]["error"] as $anahtar => $hata) {
    if ($hata == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["resimler"]["tmp_name"][$anahtar];
        $name = $_FILES["resimler"]["name"][$anahtar];
        move_uploaded_file($tmp_name, "data/$name");
    }
}
?>

Şeklinde yazarak dosyayı yükleyebiliyoruz, yine $_[FILES]’tan sonra [type] parametresi girerek tip kısıtlama, [SIZE] ile boyut kısıtlama yapabiliriz.

Kabaca resim yükleme işlemini bu şekilde yapabiliriz.
Daha detaylı kaynaklar için;
http://php.net/manual/tr/reserved.variables.files.php
http://php.net/manual/tr/features.file-upload.post-method.php
http://www.yilmazarslanturk.com/makaleGoster/php-resim-dosyasi-yukleme-veritabanina-ekleme-cekme.html

bu kaynaklar ile tüm parametrelere göz gezdirebilirsiniz.
Bir dahaki yazımda görüşmek üzere 🙂

 

Ubuntu’da tam yüklenemeyen Paketi Önbellekten Silme

Standard

Merhabalar;

Birkaç gün önce linux’a Minecraft kurulumu yapıyordum (evet kuruluyor). Ancak kurulum sırasında kullandığım depolardan birinin güncelliğini yitirmesi sebebiyle dosya indirme işlemi mümkün olmuyordu. Güncelleme yapmak istediğimde :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[email protected]:/usr/bin$ sudo apt-get upgrade
Paket listeleri okunuyor... Bitti
Bağımlılık ağacı oluşturuluyor&nbsp; &nbsp; &nbsp; &nbsp;
Durum bilgisi okunuyor... Bitti&nbsp; &nbsp; &nbsp;
Yükseltme hesaplanıyor... Bitti
Aşağıdaki paketler otomatik olarak kurulmuş ve artık bu paketlere gerek duyulmuyor:
&nbsp; libappindicator1 libindicator7 python-appindicator
Bu paketleri kaldırmak için 'apt-get autoremove' komutunu kullanın.
0 paket yükseltilecek, 0 yeni paket kurulacak, 0 paket kaldırılacak ve 0 paket yükseltilmeyecek.
1 paket tam olarak kurulmayacak ya da kaldırılmayacak.
Bu işlem tamamlandıktan sonra 0 B ek disk <a href="http://www.madcasino.info/" title="canlı poker">canlı poker</a> alanı kullanılacak.
Devam etmek istiyor musunuz? [E/h] ^X^[email protected]:/usr/bin$ sudo apt-get autoremove
Paket listeleri okunuyor... Bitti
Bağımlılık ağacı oluşturuluyor&nbsp; &nbsp; &nbsp; &nbsp;
Durum bilgisi okunuyor... Bitti&nbsp; &nbsp; &nbsp;
Aşağıdaki paketler KALDIRILACAK:
&nbsp; libappindicator1 libindicator7 python-appindicator
0 paket yükseltilecek, 0 yeni paket kurulacak, 3 paket kaldırılacak ve 0 paket yükseltilmeyecek.
1 paket tam olarak kurulmayacak ya da kaldırılmayacak.
Bu işlem tamamlandıktan sonra 291 kB disk alanı boşalacak.
Devam etmek istiyor musunuz? [E/h] E
(Veritabanı okunuyor... mevcut 284998 dosya veya klasör yüklü.)
Kaldırılan: python-appindicator (12.10.1+13.10.20130920-0ubuntu4.1) ...
Kaldırılan: libappindicator1 (12.10.1+13.10.20130920-0ubuntu4.1) ...
Kaldırılan: libindicator7 (12.10.2+14.04.20141007.1-0ubuntu1) ...
libc-bin (2.19-0ubuntu6.6) için tetikleyiciler işleniyor ...
minecraft-installer (0.1+r11~ubuntu14.04.1) ayarlanıyor...
&nbsp; % Total&nbsp; &nbsp; % Received % Xferd&nbsp; Average Speed&nbsp; &nbsp;Time&nbsp; &nbsp; Time&nbsp; &nbsp; &nbsp;Time&nbsp; Current
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Dload&nbsp; Upload&nbsp; &nbsp;Total&nbsp; &nbsp;Spent&nbsp; &nbsp; Left&nbsp; Speed
&nbsp; 0&nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; 0&nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; 0&nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; &nbsp; 0&nbsp; &nbsp; &nbsp; 0 --:--:-- --:--:-- --:--:--&nbsp; &nbsp; &nbsp;0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
&nbsp;of Certificate Authority (CA) public keys (CA certs). If the default
&nbsp;bundle file isn't adequate, you can specify an alternate file
&nbsp;using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
&nbsp;the bundle, the certificate verification probably failed due to a
&nbsp;problem with the certificate (it might be expired, or the name might
&nbsp;not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
&nbsp;the -k (or --insecure) option.
chmod: `/usr/share/minecraft/minecraft.jar''e erişilemedi: Böyle bir dosya ya da dizin yok
dpkg: error processing package minecraft-installer (--configure):
&nbsp;installed post-installation script alt işlemi çıkış durumunda hata döndürdü : 1
İşlem sırasında hatalar bulundu:
&nbsp;minecraft-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)

Hatası alıyordum
Normalde önbelleklenen dosyalar için:

Sudo apt-get clean

Komutuyla yarım kalanlarını temizleyebiliyorken, canlı poker indirmenin yarım kalması sebebiyle silme işlemini gerçekleştiremedim.

Biraz araştırma sonucu, ubuntu’nun bu dosyaları kaydettiği yeri bulup manuel olarak temizleme yoluna gidince sorun çözüldü.

Gelelim yapımına, öncelikle indirmesi yarım kalan dosyaya ulaşmak için :

cd /var/lib/dpkg/info

komutuyla ilgili kısma giriyoruz. Benim aradığım dosya minecraft olduğundan:

ls | grep minecraf

Komutuyla çıktısını istiyorum:

[email protected]:/var/lib/dpkg/info$ ls | grep minecraft
minecraft-installer.list
minecraft-installer.md5sums
minecraft-installer.postinst
minecraft-installer.postrm

Görüldüğü gibi 4 dosya var, bunları sildikten sonra, güncellemeyi tazeliyorum:

[email protected]:/var/lib/dpkg/info$ sudo apt-get update && sudo apt-get upgrade

İşlem tamamdır 🙂

Bir dahaki yazım da görüşmek üzere…