tepisenordek
08-11-2007, 21:01 PM
Merhabalar,
PHP cogu kesim tarafindan sadece database'e bilgi atmak databaseden bilgi
cekmek amaciyla kullanilan sinirlari dar bir scripting dili olarak dusunulur.
Halbuki db islemleri phpnin sadece ufak bir bolumudur.
Klasor islemleri, socket programlama, php-gtk yardimiyla yapilacak visual
uygulamalar hepsi phpyle ve de uygun bir hayal gucuyle yapilmasi imkansiz
olmayan uygulamalar.
Bu yazimda yer verecegim basit explorer ornegi de bunlardan biri.
Ornegimizin icinde klasor islemlerine yardimci olacak komutlar uzerinde duruluyor.
Nedir bu komutlar;
dir (string $yol) : $yol degiskeni ile belirtilen yoldaki klasor hakkindaki bilgileri dizi
olarak dondurur. bu komutu kullanabilmek icin bir degiskene atayip donen
degerleri bu diziden cekerek kullanmak gerecektir.
read() : diziden donen degerlerin adim adim okunmasini saglar.
getcwd() : İcinde bulunulan klasorun yolunu verir.
ve $_SERVER degiskenleri : print_r($_SERVER) komutuyla neler oldugunu
gorebileceginiz bu degiskenler ornegimizde en buyuk yardimcimiz olacak
degiskenlerdir.
Kullanilan komutlardan bazilarina kisaca bir bakis yaptiktan sonra ornegimize
gecelim :
PHP:
1.
2. <html>
3.
4. <head>
5.
6. <style>
7.
8. a.link{
9.
10. font-family: verdana, Geneva, Arial, Helvetica, sans-serif;
11.
12. text-decoration: none;
13.
14. font-size: 12px;
15.
16. font-weight: bold;
17.
18. }
19.
20. a.link:hover{
21.
22. font-family: verdana, Geneva, Arial, Helvetica, sans-serif;
23.
24. text-decoration: none;
25.
26. font-size: 12px;
27.
28. font-weight: bold;
29.
30. }
31.
32.
33.
34. .text{
35.
36. font-family: verdana, Geneva, Arial, Helvetica, sans-serif;
37.
38. font-size: 12px;
39.
40. font-weight: bold;
41.
42. }
43.
44. .uyari{
45.
46. font-family: verdana, Geneva, Arial, Helvetica, sans-serif;
47.
48. font-size: 12px;
49.
50. color: red;
51.
52. }
53.
54. </style>
55.
56. </head>
57.
58. <body>
59.
60. <table cellpadding="0" cellspacing="0" width="400" bgcolor="#f5f5f5">
61.
62. <tr>
63.
64. <td class="uyari">
65.
66. <table cellpadding="0" cellspacing="0" width="400" bgcolor="#f5f5f5">
67.
68. <tr>
69.
70. <td colspan="3" class="uyari">
71.
72. <font color="#c0c0c0" size="-4">direct explorer v1.1.b || developed by
73. breath</font>
74.
75. <ul>
76.
77. <li>Sayfalari çalistirmak için üzerine tiklayiniz
78.
79. <li>Klasorlere girmek için yanlarindaki [+] simgelerine tiklayiniz.
80.
81. </ul>
82.
83. </td>
84.
85. </tr>
86.
87. </table>
88.
89. <table cellpadding="0" cellspacing="0" width="200" bgcolor="#f5f5f5"
90. border="0">
91.
92. <?php
93.
94. //root ayarlarý
95.
96. $file_name = "web_directory.php";//dosyanin adi
97.
98. $root = $_SERVER['SCRIPT_FILENAME'];//director dosyaysinin bulundugu root
99. klasor
100.
101. $root = ereg_replace($file_name,"",$root);
102.
103. $web_root = $_SERVER['SCRIPT_URI'];//director dosyaysinin web yolu
104.
105. $web_root = ereg_replace($file_name,"",$web_root);
106.
107. $page = $_SERVER['HTTP_REFERER'];
108.
109. $active = getcwd();
110.
111. if($_GET['dir']){
112.
113. $dir_path = $HTTP_GET_VARS['backDir'];
114.
115. $change_path = $dir_path."/".$_GET['dir'];
116.
117. chdir($change_path);
118.
119. }else{
120.
121. $change_path = getcwd();
122.
123. chdir($change_path);
124.
125. }
126.
127. $dir = getcwd();
128. if(is_dir($dir)){
129.
130. $d = dir($dir);
131.
132. //once klasorlerin listelenmesi saglanir
133.
134. while( false != ($entry = $d->read())){
135.
136. if(is_dir($entry)){
137.
138. if(($entry!='.') && ($entry!='..')){
139.
140. echo "<tr class="text"><td valign="middle" width="10"><img
141. src='$web_root/icons/folder03.gif' height=25 width=30></td><td align="left">
142. $entry</td><td valign="middle"><a class="link" href="$page?dir=
143. $entry&backDir=$dir"> [+]</a></td><td>[dir]</td></tr>";
144.
145. }
146.
147. }
148.
149. }
150.
151. //daha sonra dosyalar listelenir
152.
153. $d = dir($dir);
154.
155. while( false != ($entry = $d->read())){
156.
157. if(!is_dir($entry)){
158.
159. if($entry!='index.php'){
160.
161. $file = explode(".",$entry);
162.
163. $file = $file[1];
164.
165. if($file=='php'){
166.
167. /*
168.
169. system rootundan faydalanarak web rootunu parse eder
170.
171. filela birlestirerek link haline getirir
172.
173. */
174.
175. $f = getcwd();
176.
177. $f = explode($root,$f);
178.
179. $f = $f[1];
180.
181. $f = ereg_replace('[\]',"/",$f);
182.
183. $link_path = $web_root.$f."/".$entry;
184.
185. echo "<tr class="text"><td><img src='$web_root/icons/letter.gif' height=25
186. width=30></td><td><a
187. href="$link_path">$entry</a></td><td></td></tr>";
188.
189. }
190.
191. //bu kismi aktif yaparak tum dosyalarin listelenmesi saglanabilir.
192.
193. /*else{
194.
195. echo "<tr><td>--- $entry</td><td></td></tr>";
196.
197. }*/
198.
199. }
200.
201. }
202.
203. }
204.
205. }
206.
207. ?>
208.
209. <?php if (@getcwd()!=$root){?>
210.
211. <tr>
212.
213. <td>
214.
215. <br>
216.
217. <br>
218.
219. <a href="javascript:history.back()">Üst klasor</a>
220.
221. </td>
222.
223. </tr>
224.
225. <?php }else{?>
226.
227. <tr>
228.
229. <td>
230.
231. <br>
232.
233. <br>
234.
235. Üst klasor
236.
237. </td>
238.
239. </tr>
240.
241. <?php }?>
242. </table>
243.
244. </td>
245.
246. </tr>
247.
248. </table>
249.
250. </body>
251.
252. </html>
Sevgiler.
Mustafa Alkan
PHP cogu kesim tarafindan sadece database'e bilgi atmak databaseden bilgi
cekmek amaciyla kullanilan sinirlari dar bir scripting dili olarak dusunulur.
Halbuki db islemleri phpnin sadece ufak bir bolumudur.
Klasor islemleri, socket programlama, php-gtk yardimiyla yapilacak visual
uygulamalar hepsi phpyle ve de uygun bir hayal gucuyle yapilmasi imkansiz
olmayan uygulamalar.
Bu yazimda yer verecegim basit explorer ornegi de bunlardan biri.
Ornegimizin icinde klasor islemlerine yardimci olacak komutlar uzerinde duruluyor.
Nedir bu komutlar;
dir (string $yol) : $yol degiskeni ile belirtilen yoldaki klasor hakkindaki bilgileri dizi
olarak dondurur. bu komutu kullanabilmek icin bir degiskene atayip donen
degerleri bu diziden cekerek kullanmak gerecektir.
read() : diziden donen degerlerin adim adim okunmasini saglar.
getcwd() : İcinde bulunulan klasorun yolunu verir.
ve $_SERVER degiskenleri : print_r($_SERVER) komutuyla neler oldugunu
gorebileceginiz bu degiskenler ornegimizde en buyuk yardimcimiz olacak
degiskenlerdir.
Kullanilan komutlardan bazilarina kisaca bir bakis yaptiktan sonra ornegimize
gecelim :
PHP:
1.
2. <html>
3.
4. <head>
5.
6. <style>
7.
8. a.link{
9.
10. font-family: verdana, Geneva, Arial, Helvetica, sans-serif;
11.
12. text-decoration: none;
13.
14. font-size: 12px;
15.
16. font-weight: bold;
17.
18. }
19.
20. a.link:hover{
21.
22. font-family: verdana, Geneva, Arial, Helvetica, sans-serif;
23.
24. text-decoration: none;
25.
26. font-size: 12px;
27.
28. font-weight: bold;
29.
30. }
31.
32.
33.
34. .text{
35.
36. font-family: verdana, Geneva, Arial, Helvetica, sans-serif;
37.
38. font-size: 12px;
39.
40. font-weight: bold;
41.
42. }
43.
44. .uyari{
45.
46. font-family: verdana, Geneva, Arial, Helvetica, sans-serif;
47.
48. font-size: 12px;
49.
50. color: red;
51.
52. }
53.
54. </style>
55.
56. </head>
57.
58. <body>
59.
60. <table cellpadding="0" cellspacing="0" width="400" bgcolor="#f5f5f5">
61.
62. <tr>
63.
64. <td class="uyari">
65.
66. <table cellpadding="0" cellspacing="0" width="400" bgcolor="#f5f5f5">
67.
68. <tr>
69.
70. <td colspan="3" class="uyari">
71.
72. <font color="#c0c0c0" size="-4">direct explorer v1.1.b || developed by
73. breath</font>
74.
75. <ul>
76.
77. <li>Sayfalari çalistirmak için üzerine tiklayiniz
78.
79. <li>Klasorlere girmek için yanlarindaki [+] simgelerine tiklayiniz.
80.
81. </ul>
82.
83. </td>
84.
85. </tr>
86.
87. </table>
88.
89. <table cellpadding="0" cellspacing="0" width="200" bgcolor="#f5f5f5"
90. border="0">
91.
92. <?php
93.
94. //root ayarlarý
95.
96. $file_name = "web_directory.php";//dosyanin adi
97.
98. $root = $_SERVER['SCRIPT_FILENAME'];//director dosyaysinin bulundugu root
99. klasor
100.
101. $root = ereg_replace($file_name,"",$root);
102.
103. $web_root = $_SERVER['SCRIPT_URI'];//director dosyaysinin web yolu
104.
105. $web_root = ereg_replace($file_name,"",$web_root);
106.
107. $page = $_SERVER['HTTP_REFERER'];
108.
109. $active = getcwd();
110.
111. if($_GET['dir']){
112.
113. $dir_path = $HTTP_GET_VARS['backDir'];
114.
115. $change_path = $dir_path."/".$_GET['dir'];
116.
117. chdir($change_path);
118.
119. }else{
120.
121. $change_path = getcwd();
122.
123. chdir($change_path);
124.
125. }
126.
127. $dir = getcwd();
128. if(is_dir($dir)){
129.
130. $d = dir($dir);
131.
132. //once klasorlerin listelenmesi saglanir
133.
134. while( false != ($entry = $d->read())){
135.
136. if(is_dir($entry)){
137.
138. if(($entry!='.') && ($entry!='..')){
139.
140. echo "<tr class="text"><td valign="middle" width="10"><img
141. src='$web_root/icons/folder03.gif' height=25 width=30></td><td align="left">
142. $entry</td><td valign="middle"><a class="link" href="$page?dir=
143. $entry&backDir=$dir"> [+]</a></td><td>[dir]</td></tr>";
144.
145. }
146.
147. }
148.
149. }
150.
151. //daha sonra dosyalar listelenir
152.
153. $d = dir($dir);
154.
155. while( false != ($entry = $d->read())){
156.
157. if(!is_dir($entry)){
158.
159. if($entry!='index.php'){
160.
161. $file = explode(".",$entry);
162.
163. $file = $file[1];
164.
165. if($file=='php'){
166.
167. /*
168.
169. system rootundan faydalanarak web rootunu parse eder
170.
171. filela birlestirerek link haline getirir
172.
173. */
174.
175. $f = getcwd();
176.
177. $f = explode($root,$f);
178.
179. $f = $f[1];
180.
181. $f = ereg_replace('[\]',"/",$f);
182.
183. $link_path = $web_root.$f."/".$entry;
184.
185. echo "<tr class="text"><td><img src='$web_root/icons/letter.gif' height=25
186. width=30></td><td><a
187. href="$link_path">$entry</a></td><td></td></tr>";
188.
189. }
190.
191. //bu kismi aktif yaparak tum dosyalarin listelenmesi saglanabilir.
192.
193. /*else{
194.
195. echo "<tr><td>--- $entry</td><td></td></tr>";
196.
197. }*/
198.
199. }
200.
201. }
202.
203. }
204.
205. }
206.
207. ?>
208.
209. <?php if (@getcwd()!=$root){?>
210.
211. <tr>
212.
213. <td>
214.
215. <br>
216.
217. <br>
218.
219. <a href="javascript:history.back()">Üst klasor</a>
220.
221. </td>
222.
223. </tr>
224.
225. <?php }else{?>
226.
227. <tr>
228.
229. <td>
230.
231. <br>
232.
233. <br>
234.
235. Üst klasor
236.
237. </td>
238.
239. </tr>
240.
241. <?php }?>
242. </table>
243.
244. </td>
245.
246. </tr>
247.
248. </table>
249.
250. </body>
251.
252. </html>
Sevgiler.
Mustafa Alkan