tepisenordek
08-11-2007, 21:09 PM
1.Bu islemi Linux sunucuda gerceklestiriyorsunuz.
2.MySQL destegi icin asagidaki SQL komutlari ile
veritabani ve tabloyu yaratmis olmaniz gereklidir:
SQL:
1.
2.
3. CREATE DATABASE dosya_bilgileri;
4.
5.
6. CREATE TABLE dosyalar(
7.
8. id int(10) not null auto_increment,
9.
10. aciklama varchar(250),
11.
12. dosyaadi varchar(250),
13.
14. primary key(id));
3.Dosyalar sunucuya aktarildiktan sonra "/web/dosyalar" isminde
bir dizin icinde saklanacaktir.
4.Dosyalar yeni dosya adi olarak MySQL tablosunda id sutunundan alinan
"id" ve "uzanti" ile olusturulan yeni dosya adi ile saklanacaktir.
5.Izin verilen en yuksek dosya boyutu bu ornek icin
PHP icinde bir kontrol mekanizmasi ile tanimlanmistir.(1024 byte olarak)
Bu ayari program icinden kolayca degistirebilirsiniz.Bu nedenle
basarisizliga ugrarsaniz sorumlusu sizsiniz.
6.Bu HTML forumunda sagidaki sekilde yapilan bir tanimlama ile HTML
icinden de gonderilebilecek en buyuk dosya boyutu icin gizli bir
form alani yaratilabilir: (byte olarak)
KOD:
1.
2. <input type="hidden" name="MAX_FILE_SIZE" value="30000">
Yukaridaki ornekte "30000 byte" olarak bir sinirlama getirilmistir...
Ayrica bu satir <input type='file' .....> satirindan once yerlestirilmelidir.
Not: Yukaridaki gibi bir kullanim kolayca elimine edilebilir.Bu sekilde
gizli HTML alanlari ile max dosya boyutu yanlizca tarayici icin bir oneri
niteligindedir ve tarayicinin bu oneriyi dinleyip dinlemeyeceginden emin
olunamaz.Bu yanlizca transfer islemi baslamadan once kullaniciyi yaptigi
islemin hatali oldugu konusunda uyarmak icin gelistirilmistir.
7.PHP kurulumunuzda "Safe Mode" olarak tabir edilen ve bazi fonksiyon
larin kullaniminin kisitlandigi ayarlarin yapilmamis olmasi gereklidir.
Bu demektir ki bazi ucretsiz web barindirma servisleri ile bu ornekleri
kullanmaniz mumkun degildir.
8.Bazi eski PHP surumlerinde move_uploaded_file() ve is_uploaded_file()
fonksiyonlari yer almamaktadir.Bu nedenle PHP 4.0.3 ve uzeri
kullanmaniz tavsiye edilir.
9.php.ini icinde bazi dosya transfer ayarlari mevcuttur.Ongorulen ayarlar herhangi
bir sorun cikarmasa da sizin bu ayarlari ogrenmeniz PHP bilginiz acisindan onemlidir...
Aciklamalar:
is_uploaded_file() : Bir dosyanin web uzerinden HTTP ile sunucuya gonderilip
gonderilmedigini kontrol eder.Boylece ornegin bazi onemli sistem dosyalarinin
(/etc/passwd gibi) kurnaz kullanicilar tarafindan ele gecirilmesi engellenir.
move_uploaded_file() : HTTP ile sunucuya gonderilen dosyayi yeni yerine
tasimak icin kullanilir.Ayni islemi copy() fonksiyonu ile de saglayabilirsiniz.
Sartlar:
Bu islemin basarili olabilmesi icin asagidaki sartlarin saglanmis
olmasi gereklidir:
Istemci tarafinda modern bir tarayici kullanilmasi.(Versiyon 3 ve uzeri)
Sunucu tarafinda "dosyanin kopyalanacagi" dizin icin
dosya izinlerinin ondecen dogru ayarlanmis olmasi gereklidir.
Cozum:
Linux komut satirindan asagidaki gibi bir komut giriniz,
chmod -R 777 /web/dosyalar
Ornek Program : ( http://www.devshed.com ) adresinden alinmistir ve bazi
bolgeleri degistirilmistir.
PHP:
1.
2.
3. <html>
4.
5. <head>
6.
7. </head>
8.
9. <body>
10.
11.
12. <?php
13.
14. if (!$_POST['gonder'])
15.
16. {
17.
18. ?>
19.
20.
21. <form enctype="multipart/form-data"
22.
23. action="<?=$_SERVER['PHP_SELF']?>" method="post">
24.
25. Aciklama:
26.
27. <br>
28.
29. <input type="Text" name="aciklama" size="40">
30.
31. <p>
32.
33. Dosya Adi:
34.
35. <br>
36.
37. <input type="file" name="dosya">
38.
39. <p>
40.
41. <input type="submit" name="gonder" value="Dosyayi Gonder">
42.
43. </form>
44.
45.
46. <?
47.
48. }
49.
50. else
51.
52. {
53.
54.
55. // Form'dan gelen bilgileri kontrol et
56.
57. if ($_FILES['dosya']['size'] == 0 || $_FILES['dosya']['size'] > 1024)
58.
59. { die("Dosya boyutu sifir olamaz veya dosyaniz max boyutun uzerinde!"); }
60.
61.
62. if ($_FILES['dosya']['type'] != "image/gif" &&
63.
64. $_FILES['dosya']['type'] != "image/jpeg" &&
65.
66. $_FILES['dosya']['type'] != "image/pjpeg" &&
67.
68. $_FILES['dosya']['type'] != "image/png")
69.
70. { die("Dosya formati uyusmuyor!");}
71.
72.
73. if (!$_POST['aciklama'])
74.
75. { die("Aciklama bolumu bos birakilamaz!"); }
76.
77.
78. if (!is_uploaded_file($_FILES['dosya']['tmp_name']))
79.
80. { die("Dosya hatasi!"); }
81.
82.
83. // Veritabanina baglantiyi ac
84.
85. $baglanti = mysql_connect("localhost", "root", "*****") or
86.
87. die ("Veritabani Sunucusuna baglanilamiyor!");
88.
89. mysql_select_db("dosya_bilgileri") or
90.
91. die ("Veritabani secilemiyor!");
92.
93.
94. // Sorguyu hazirla ve uygula
95.
96. $sorgu = "INSERT INTO dosyalar (aciklama) VALUES ('" . $_POST['aciklama']. "')";
97.
98. $sonuc = mysql_query($sorgu) or die("Sorgu hatasi: " . mysql_error());
99.
100. $id = mysql_insert_id($baglanti);
101.
102.
103. // Dosya adini id.uzanti olacak sekilde degistir
104.
105. if ($_FILES['dosya']['type'] == "image/gif" ) { $uzanti = ".gif"; }
106.
107. if ($_FILES['dosya']['type'] == "image/jpeg" ) { $uzanti = ".jpg"; }
108.
109. if ($_FILES['dosya']['type'] == "image/pjpeg") { $uzanti = ".jpg"; }
110.
111. if ($_FILES['dosya']['type'] == "image/png" ) { $uzanti = ".png"; }
112.
113.
114. $yeniDosyaAdi = $id . $uzanti;
115.
116.
117. // Dosyayi yeni yerine tasi
118.
119. move_uploaded_file($_FILES['dosya']['tmp_name'],"/web/dosyalar/" .$yeniDosyaAdi) or
120.
121. die("Dosya tasima hatasi!");
122.
123.
124. // Yeni dosya adini veritabanina yaz
125.
126. $sorgu2 = "UPDATE dosyalar SET dosyaadi = '$yeniDosyaAdi' WHERE id = '$id'";
127.
128. $sonuc2 = mysql_query($sorgu2) or die("Sorgu Hatasi: " . mysql_error());
129.
130. }
131.
132. ?>
133.
134. <BR>
135.
136. Bazi debug ciktilari:
137.
138. <?php
139.
140. print_r($_FILES);
141.
142. ?>
143.
144. </body>
145.
146. </html>
2.MySQL destegi icin asagidaki SQL komutlari ile
veritabani ve tabloyu yaratmis olmaniz gereklidir:
SQL:
1.
2.
3. CREATE DATABASE dosya_bilgileri;
4.
5.
6. CREATE TABLE dosyalar(
7.
8. id int(10) not null auto_increment,
9.
10. aciklama varchar(250),
11.
12. dosyaadi varchar(250),
13.
14. primary key(id));
3.Dosyalar sunucuya aktarildiktan sonra "/web/dosyalar" isminde
bir dizin icinde saklanacaktir.
4.Dosyalar yeni dosya adi olarak MySQL tablosunda id sutunundan alinan
"id" ve "uzanti" ile olusturulan yeni dosya adi ile saklanacaktir.
5.Izin verilen en yuksek dosya boyutu bu ornek icin
PHP icinde bir kontrol mekanizmasi ile tanimlanmistir.(1024 byte olarak)
Bu ayari program icinden kolayca degistirebilirsiniz.Bu nedenle
basarisizliga ugrarsaniz sorumlusu sizsiniz.
6.Bu HTML forumunda sagidaki sekilde yapilan bir tanimlama ile HTML
icinden de gonderilebilecek en buyuk dosya boyutu icin gizli bir
form alani yaratilabilir: (byte olarak)
KOD:
1.
2. <input type="hidden" name="MAX_FILE_SIZE" value="30000">
Yukaridaki ornekte "30000 byte" olarak bir sinirlama getirilmistir...
Ayrica bu satir <input type='file' .....> satirindan once yerlestirilmelidir.
Not: Yukaridaki gibi bir kullanim kolayca elimine edilebilir.Bu sekilde
gizli HTML alanlari ile max dosya boyutu yanlizca tarayici icin bir oneri
niteligindedir ve tarayicinin bu oneriyi dinleyip dinlemeyeceginden emin
olunamaz.Bu yanlizca transfer islemi baslamadan once kullaniciyi yaptigi
islemin hatali oldugu konusunda uyarmak icin gelistirilmistir.
7.PHP kurulumunuzda "Safe Mode" olarak tabir edilen ve bazi fonksiyon
larin kullaniminin kisitlandigi ayarlarin yapilmamis olmasi gereklidir.
Bu demektir ki bazi ucretsiz web barindirma servisleri ile bu ornekleri
kullanmaniz mumkun degildir.
8.Bazi eski PHP surumlerinde move_uploaded_file() ve is_uploaded_file()
fonksiyonlari yer almamaktadir.Bu nedenle PHP 4.0.3 ve uzeri
kullanmaniz tavsiye edilir.
9.php.ini icinde bazi dosya transfer ayarlari mevcuttur.Ongorulen ayarlar herhangi
bir sorun cikarmasa da sizin bu ayarlari ogrenmeniz PHP bilginiz acisindan onemlidir...
Aciklamalar:
is_uploaded_file() : Bir dosyanin web uzerinden HTTP ile sunucuya gonderilip
gonderilmedigini kontrol eder.Boylece ornegin bazi onemli sistem dosyalarinin
(/etc/passwd gibi) kurnaz kullanicilar tarafindan ele gecirilmesi engellenir.
move_uploaded_file() : HTTP ile sunucuya gonderilen dosyayi yeni yerine
tasimak icin kullanilir.Ayni islemi copy() fonksiyonu ile de saglayabilirsiniz.
Sartlar:
Bu islemin basarili olabilmesi icin asagidaki sartlarin saglanmis
olmasi gereklidir:
Istemci tarafinda modern bir tarayici kullanilmasi.(Versiyon 3 ve uzeri)
Sunucu tarafinda "dosyanin kopyalanacagi" dizin icin
dosya izinlerinin ondecen dogru ayarlanmis olmasi gereklidir.
Cozum:
Linux komut satirindan asagidaki gibi bir komut giriniz,
chmod -R 777 /web/dosyalar
Ornek Program : ( http://www.devshed.com ) adresinden alinmistir ve bazi
bolgeleri degistirilmistir.
PHP:
1.
2.
3. <html>
4.
5. <head>
6.
7. </head>
8.
9. <body>
10.
11.
12. <?php
13.
14. if (!$_POST['gonder'])
15.
16. {
17.
18. ?>
19.
20.
21. <form enctype="multipart/form-data"
22.
23. action="<?=$_SERVER['PHP_SELF']?>" method="post">
24.
25. Aciklama:
26.
27. <br>
28.
29. <input type="Text" name="aciklama" size="40">
30.
31. <p>
32.
33. Dosya Adi:
34.
35. <br>
36.
37. <input type="file" name="dosya">
38.
39. <p>
40.
41. <input type="submit" name="gonder" value="Dosyayi Gonder">
42.
43. </form>
44.
45.
46. <?
47.
48. }
49.
50. else
51.
52. {
53.
54.
55. // Form'dan gelen bilgileri kontrol et
56.
57. if ($_FILES['dosya']['size'] == 0 || $_FILES['dosya']['size'] > 1024)
58.
59. { die("Dosya boyutu sifir olamaz veya dosyaniz max boyutun uzerinde!"); }
60.
61.
62. if ($_FILES['dosya']['type'] != "image/gif" &&
63.
64. $_FILES['dosya']['type'] != "image/jpeg" &&
65.
66. $_FILES['dosya']['type'] != "image/pjpeg" &&
67.
68. $_FILES['dosya']['type'] != "image/png")
69.
70. { die("Dosya formati uyusmuyor!");}
71.
72.
73. if (!$_POST['aciklama'])
74.
75. { die("Aciklama bolumu bos birakilamaz!"); }
76.
77.
78. if (!is_uploaded_file($_FILES['dosya']['tmp_name']))
79.
80. { die("Dosya hatasi!"); }
81.
82.
83. // Veritabanina baglantiyi ac
84.
85. $baglanti = mysql_connect("localhost", "root", "*****") or
86.
87. die ("Veritabani Sunucusuna baglanilamiyor!");
88.
89. mysql_select_db("dosya_bilgileri") or
90.
91. die ("Veritabani secilemiyor!");
92.
93.
94. // Sorguyu hazirla ve uygula
95.
96. $sorgu = "INSERT INTO dosyalar (aciklama) VALUES ('" . $_POST['aciklama']. "')";
97.
98. $sonuc = mysql_query($sorgu) or die("Sorgu hatasi: " . mysql_error());
99.
100. $id = mysql_insert_id($baglanti);
101.
102.
103. // Dosya adini id.uzanti olacak sekilde degistir
104.
105. if ($_FILES['dosya']['type'] == "image/gif" ) { $uzanti = ".gif"; }
106.
107. if ($_FILES['dosya']['type'] == "image/jpeg" ) { $uzanti = ".jpg"; }
108.
109. if ($_FILES['dosya']['type'] == "image/pjpeg") { $uzanti = ".jpg"; }
110.
111. if ($_FILES['dosya']['type'] == "image/png" ) { $uzanti = ".png"; }
112.
113.
114. $yeniDosyaAdi = $id . $uzanti;
115.
116.
117. // Dosyayi yeni yerine tasi
118.
119. move_uploaded_file($_FILES['dosya']['tmp_name'],"/web/dosyalar/" .$yeniDosyaAdi) or
120.
121. die("Dosya tasima hatasi!");
122.
123.
124. // Yeni dosya adini veritabanina yaz
125.
126. $sorgu2 = "UPDATE dosyalar SET dosyaadi = '$yeniDosyaAdi' WHERE id = '$id'";
127.
128. $sonuc2 = mysql_query($sorgu2) or die("Sorgu Hatasi: " . mysql_error());
129.
130. }
131.
132. ?>
133.
134. <BR>
135.
136. Bazi debug ciktilari:
137.
138. <?php
139.
140. print_r($_FILES);
141.
142. ?>
143.
144. </body>
145.
146. </html>