[title = pular]

Plazma'nn 3. says iin aklma gelen ilk 3 PHP ve 3 Javascript ipucunu sizlerle paylamak istedim.

[b]PHP
---[/b]

[b]1)[/b] PHP'den COM objeleri kullanmay deniyorum ama [b]CGI Error diyip[/b] duruyor. in ilgin taraf webde bulabildiim tm zmleri denedim ama hala ayn hatay alyorum.

Bu durumda olay grntleyiciyi (event viewer) bir kurcalamanz tavsiye ederim. Sistem'de DCOM hatalar grmeniz olas.
[b]
Trke    : Balat->Ayarlar->Denetim Masas->Ynetimsel Aralar->Bileen Hizmetleri
ngilizce : Start->Settings->Control Panel->Administrative Tools->Component Services
[/b]
Bu blmden kullanmak istediiniz bileene yetki vermeniz gerekiyor. Bileeni bulup (rnek: Microsoft Excel Application) zerine sa tkladnzda kan menden ayrntlara, ordan da yetkilere girip bu blmde zel yetki vererek "[b]Lokal Etkinletirme[/b]" yetkisini amanz gerekiyor. Zaten bu bahsettiim yetki olay grntleyicisindeki hata mesajnda da belirtiliyor.

[b]***[/b]

[b]2)[/b] PHP'de bir extension ayorum ve PHP hata vermeye balyor. Extension klasrm doru, dll mevcut, dll'i PHP'nin kk dizinine, system32 klasrne, oraya buraya da kopyaladm ama hala ayn hatay alyorum ldrmak zereyim.

Bu durumda altramadnz DLL hakknda biraz daha dkman okuyun. Byk olaslkla baka DLLlere ihtiya duyuyordur. [b]PHP'nin tm extensionlar tek bir DLL'den olumazlar[/b].

rnek: [b]php_ldap.dll[/b]'i kullanmanz iin [b]PHP 4.2.x[/b] serisine kadar olan versiyonlarda [b]libsasl.dll[/b], 4.3.0 ve st versiyonlarda ise [b]libeay32.dll ve ssleay32.dll[/b]'i system32'ye kopyalamanz gerekiyor. Bu tr DLL'leri PHP'nin binary paketinde (exe installerda bu extension dllleri bulunmaz) bulmanz mmkn. Genellikle "[b]system[/b]" isimli bir klasr iersinde extension DLLlerin ihtiya duyduu tm DLLler geliyor.

[b]***[/b]

[b]3)[/b] Sessionla ilgili sorun yayorum. Session deikenlerinden birine bir deer verip "[b]header('location:blabla')[/b]" eklinde baka bir sayfaya ynlendiriyorum ama o sayfada deikenin deeri dzgn okunmuyor. Ama sayfay refresh edince dzeliyor. Niye ki?

Aslnda niyesi ok uzun aklama gerektiriyor ve server tarafnda zm de mmkn. Ancak bu tr durumlardan kurtulmann en kesin zm yolu sayfay "[b]header[/b]" ile deil de HTML'in "[b]meta[/b]" tagiyle ynlendirmek. Yani
[code]
<?php
	...
	...
	...
	header('location:blabla');
	exit;
?>
[/code]
yerine
[code]
<?php
	...
	...
	...
?>
<html>
....
....
<meta http-equiv="Refresh" content="0; url=blabla">
....
....
</html>
[/code]
eklinde kullanarak bu sorunun stesinden gelebilirsiniz.

[b]JAVASCRIPT
----------[/b]

[b]1)[/b] Elimde bir sayfa var ama kodlarna eriimim yok ya da deitirmek istemiyorum. O sayfann HTML yapsn baka trl kontrol altna alabilir miyim?

Eriiminiz olan sunucularnzda alan sayfalarn kodlar elinizde olmasa bile (rnek: Zend Guard ile encode edilmi bir proje, compile edilmi CGI ktlar v.b.) onlar zerinde JavaScript kullanarak hakimiyet kurabilirsiniz. Bunun iin sayfay frame iersine almak gerekiyor. rnek:

Normalde index.php ile alan bir sayfamz olduunu varsayalm. Bu durumda biz aadaki index_alt.htm'i oluturarak sayfann grnmn deitirmeden araya gizli bir frame iersinde "[b]gizli.htm[/b]"i sokmu oluyoruz.
[b]
index_alt.htm
-------------[/b][code]
<html>
...
<frameset rows="*,0">
<frame name="anasayfa" src="index.php"></frame>
<frame name="gizli" src="gizli.htm"></frame>
</frameset>
...
</html>
[/code]
Buradaki rows="*,0" ile index.php'yi tm alan, yani browsern tamamn kaplayacak ekilde, gizli.htm'i 0 yksekliinde yani aada grnmeyecek ekilde tanmlyoruz. Burdaki sralama nemli. gizli.htm'i nce tanmlayacak olursan index.php henz yklenmeden gizli.htm alm olur ve index.php'nin iinde yklenen eitli blmlere eriemeyebilir. index.php'nin yklenmesini garantilemek istiyorsak en geerli yol gizli.htm'e bir saya ekleyerek kodun belirli bir zaman getikten sonra almasn salamaktr.
[code]
function yap()
{
	....
}

setTimeout("yap()", 1000); // 1 sn sonra
[/code]
gibi.

Peki gizli.htm tam olarak ne yapmamza yaryor? Bu tamamen sizin arzunuza bal. Size yaplabileceklerden birini aadaki rnekte veriyorum. Bu rnek yardmyla index.php'de yklenen ilk resmin zerinde sa clicke basldnda kan meny iptal ediyoruz.
[b]
gizli.htm
-------------[/b][code]
<html>
...
<script>
parent.window.frames["anasayfa"].document.images[0].oncontextmenu = function(){ return false; };
</script>
...
</html>
[/code]
Peki tam olarak ne yaptk burada?

parent ile bir st obje seviyesine ktk, yani index_alt.htm'de tanmladmz framelerin her ikisinin de bulunduu seviyeye. Daha sonra [b]windom.frames["anasayfa"][/b] diyerek "[b]anasayfa[/b]" yani "[b]index.php[/b]"nin yer ald blme ulatk. [b]document.images[/b] bu sayfada yer alan tm resimlerin bulunduu dizi. [b]document.images[0][/b] ile ilk resmi setik. Son olarak "[b]oncontextmenu[/b]" ile sa mouse click eventini kendi yarattmz bir fonksiyona ynlendirdik. Bu fonksiyon ise "[b]return false[/b]" komutuyla eventi gereklemeden durdurmaya yaryor. [b]return false yerine alert('deneme')[/b] yazarak da scripti test edebilirsiniz.

Tabii ki bu en basit kullanm rneklerinden biri. Bu ytemle sayfa iersindeki hemen hereyi kontrol etmeniz, elementler eklemeniz, deitirmeniz hatta yok etmeniz mmkn. Ancak unutmayn ki bu kullanm lokal sayfalar iin geerlidir. Yani web server elinizin altnda deilse ve index_alt.htm, gizli.htm dosyalarn index.php'nin olduu server'a koyamyorsanz, bu durumda bu yntem ie yaramayabilir.

[b]***[/b]

[b]2)[/b] Dinamik olarak nasl element yaratabilirim? Bunlara nasl event ekleyebilirim?

Javascriptte az nce grdmz rnekteki event tanmlama kullanm her zaman ie yaryor mu? Aslnda ounlukla yarar. Ancak bir de dinamik olarak yaratlan elementler var ki bu durumda iler biraz deiebiliyor. Size aadaki kullanm tavsiye ediyorum.
[code]
<html>
...
<body>
<div id="tasiyici"></span>
<script>
function goster(yazi)
{
	alert("Textbox'a girmi olduunuz yaz: "+yazi+"\nte dinamik elementlerin gc!");
}

var textbox = document.createElement('input');
textbox.setAttribute('type','text');
textbox.setAttribute('size','50');

var button = document.createElement('input');
button.setAttribute('type','button');
button.value = 'Onayla';
if(document.addEventListener) // Firefox
	button.addEventListener('click',function(){ goster(textbox.value); },false);
else if(document.attachEvent) // Internet Explorer
	button.attachEvent('onclick',function(){ goster(textbox.value); });

tasiyici.appendChild(textbox);
tasiyici.appendChild(button);
</script>
</body>
</html>
[/code]
Burada "[b]tasiyici[/b]" isimli bir "div"imiz var. HTML iersinde baka da birey yok. Biz script alannda dinamik olarak bir textbox bir de button tanmlyoruz (ikisi de input elementinin trevleridir). Daha sonra button'a Firefox'da addEventListener, Internet Explorer'da attachEvent komutlaryla click eventini "[b]goster[/b]" fonksiyonuna ynlendiriyoruz. Aslnda burada ksaca "[b]goster[/b]" yazabilirdik "[b]function(){ goster(textbox.value); }[/b]" yerine. Fakat bu durumda parametre veremezdik. Biz textbox'n deerini de fonksiyona yollamak istediimiz iin "[b]function() {}[/b]" ile o noktada dinamik bir fonksiyon yarattk ve "[b]goster[/b]" fonksiyonunu textbox'n iine yazlan deer ile [b](textbox.value)[/b] ardk.

Aslnda input gibi form nesneleri bir form olmadan kullanlmaz. Ancak bu rnekte rnei daha da karmaklatrmamak iin form kullanmadm. Baz eski browserlar form tagi olmadan form objelerini gstermezler bile. Gnmz borwserlarnn teknolojisine dayanarak bu rnei bu ekilde kullanmaktan ekinmedim.

[b]***[/b]

[b]3)[/b] C/C++'da argv, argc, va_arg biiler yapyorduk. Javascript'de fonksiyonlarn argman saylarn nasl alabilirim?

Javascript argmanlar konusunda C'den daha esnek. rnein fonksiyona fonksiyonun tanmndaki argman saysndan daha az veya daha fazla argman verebilirsiniz ve Javascript hata karmaz. lgin bir ekilde fonksiyonun ka argmanla arld ve tanmnda ka argman olduu ayr ayr saylabilir. rnek:
[code]
<html>
...
<script>
function deneme(a,b,c,d,e,f,g){
var tanimlandigiArgumanSayisi = deneme.length;
var cagirildigiArgumanSayisi = deneme.arguments.length;
alert("Tanm: "+tanimlandigiArgumanSayisi+"\narlma: "+cagirildigiArgumanSayisi);
}
deneme(1,2,3);
</script>
...
</html>
[/code]
Bu dosyann sonucunda:
[b]
Tanm: 7
arlma: 3
[/b]
Yazacaktr. Yani 7 argmanl bir fonksiyon tanmladk ancak 3 argman ile ardk.


Bunlar dzensiz bir ekilde aklma gelen ipularyd. Kategori ve say olarak artarak devam etmesi muhtemeldir.


Benimle irtibata gemek isteyenler iin e-mail adresim;
[url = mailto:c64hydrogen@yahoo.com]skate <at> glance <dot> ws[/url]
[b]
Emir Akaydn
Skate / Glance
[/b]