İnsanoğlu hala tüm bilgisayarların en alışılmadık olanıdır. Jhon F.Kennedy
31 Ocak 2017 Salı
Resimleri İkon Hale Getirmek
Resimler Nasıl İkon (.ico uzantılı) Hale Getirilir?
Resimlerin direkt olarak ikon hale getirebilmek için aşağıdaki adrese tıklayarak bu işlemi 2 adımda kolayca yapabilmekteyiz.
http://ico.bradleygill.com/index.php
1- İkon haline getirmek istediğiniz resmi upload edin.
2- ico uzantılı hale gelen resmin üzerine tıklayarak download edin.
19 Ocak 2017 Perşembe
Veritabanı DBLink Oluşturma
PostgreSQL'de DBLink Nasıl Oluşturulur?
DBLink, bir veritabanından başka bir veritabanına erişim sağlamak için veritabanı nesneleri arası kurulan köprü mantığıdır. Bu ilişki aynı sunucu üzerinde iki farklı veritabanı arasında olacağı gibi farklı sunucular üzerine kurulu farklı veritabanları arasında da kurulabilir. Bizim yapacağımız örnekte farklı sunucular üzerine kurulu farklı veritabanları arasındaki dblink özelliği olacaktır. Bunun için A sunucusu üzerine kurulu test1DB ile B sunucusu üzerine kurulu test2DB veritabanları arasında bir dblink oluşturmaya çalışacağız. test1DB sql konsolu üzerine uygulayacağımız adımlar aşağıdaki gibidir:
Oluşturacağım DBLink'in adı: testpostgresconn
- DBLink extensions'ın veritbanına yükleme
CREATE EXTENSION dblink;
- Kurulan DBLink extensions'ın test edilmesi veya barındırdığı özelliklerin listelenmesi
SELECT pg_namespace.nspname, pg_proc.proname
FROM pg_proc, pg_namespace
WHERE pg_proc.pronamespace=pg_namespace.oid
AND pg_proc.proname LIKE '%dblink%';
- DBLink üzerinden testDB2 Veritabanına Erişimin Test Edilmesi
SELECT dblink_connect('host=hostadresi user=db_kul_ad password=db_psswrd dbname=testDB2');
- Global Kullanıcı (Authentication) ve Server Oluşturma
CREATE FOREIGN DATA WRAPPER db_kul_ad VALIDATOR postgresql_fdw_validator;
CREATE SERVER testpostgresconn FOREIGN DATA WRAPPER db_kul_ad OPTIONS (hostaddr 'hostadresi', dbname 'testDB2');
- Ortak Kullanım için Mapping Oluşturma
CREATE USER MAPPING FOR db_kul_ad SERVER testpostgresconn OPTIONS (user 'db_kul_ad', password 'db_psswrd');
- Oluşturduğumuz DBLink'i Test Etme
SELECT dblink_connect('testpostgresconn');
Şuana kadarki adımları başarılı bir şekilde uyguladığımız taktirde aşağıdaki 'Select' sql sorgu cümleciği ile test1DB üzerinden test2DB veritabanındaki tablolara erişebiliriz. Ve bundan sonra test1DB üzerinden test2DB tablolarına erişim için sorgularımızı yaratmış olduğumuz 'testpostgresconn' adındaki sanal server ortak bağlantısına yazmamız gerekir.
SELECT * FROM public.dblink
('testpostgresconn','SELECT idstruct,nmstruct FROM public.wfstruct')
AS DATA(idstruct CHARACTER VARYING,nmstruct CHARACTER VARYING);
17 Ocak 2017 Salı
PHP'de SoapClient ile DataGrid Uygulaması
Bu makalede, PHP ve JavaScript yazılım dillerini kullanarak dinamik olarak dataGrid oluşturarak bir web servisin fonksiyonunu kullanarak grid ten toplu şekilde dönen verileri SoapClient aracılığı ile fonksiyona gönderme işlemini yapacağız.
İlk önce uygulamanın tasarımını oluşturacak olan SPCclienttasarim.php sayfasını aşağıdaki gibi oluşturuyoruz. Kodlamaların açıklamalı şekilde aşağıdaki gibi olacaktır.
JavaScript ve HTML ile Dinamik Tablo Oluşturma
.. / SPCclienttasarim.php Sayfası:
<!DOCTYPE html>
<head>
<title>Gonder</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<SCRIPT language="javascript">
//addRow fonksiyonu: html tablolarından table id'sini paremetre olarak alır, paremetre aldığı tabloya satır ekleme işlemi
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount+14; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[1].cells[i].innerHTML;//tanımlanan satır '<tr>' uzunluğu kadar kolon '<td>' ekleme
switch(newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "";
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break;
case "select-one":
newcell.childNodes[0].selectedIndex = 0;
break;
}
}
}
//deleteRow fonksiyonu: html tablolarından table id'sini paremetre olarak alır, paremetre aldığı tablodan seçili satırları silme işlemi
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if(null != chkbox && true == chkbox.checked) {
if(rowCount <= 1) {
alert("Cannot delete all the rows.");
break;
}
table.deleteRow(i);
rowCount--;
i--;
}
}
}catch(e) {
alert(e);
}
}
//CountRows fonksiyonu ile html'de tasarladığımız tabloların satır sayısını döndürebiliriz
function CountRows() {
var totalRowCount = 0;
var rowCount = 0;
var table = document.getElementById("dataTable");
var rows = table.getElementsByTagName("tr")
for (var i = 0; i < rows.length; i++) {
totalRowCount++;
if (rows[i].getElementsByTagName("td").length > 0) {
rowCount++;
}
}
var message = "Total Row Count: " + totalRowCount;
message += "\nRow Count: " + rowCount;
// alert(message);
//Aşağıdaki kod satırı ile JavaScript fonksiyonunun döndürdüğü satır sayısını 'NumRows' değişkeni olarak aynı sayfaya veya PHP kodlarımızın olduğu başka bir .php sayfasına post edebiliriz.
document.getElementById("NumRows").value = totalRowCount;
}
</SCRIPT>
</head>
<body>
<style type="text/css">
table { width:1600px; margin:1px auto; table-layout:fixed; border-collapse:collapse; border: 1px solid #CCC;}
table th { border: 2px solid #CCC; background-color:#D5D9E1; color: #4C5260; font-size: 14px; text-align:center; }
th.chkk { width: 25px }
table td {white-space: nowrap; }
td.chkk { width: 25px }
input[type="text"] {
font-size:0.75em;
color: #6F798E;
padding:0.25em;
box-sizing: border-box;
width:100%;
}
input[type=submit] {
padding:5px 15px;
background:#ccc;
border: 2px solid #CCC;
cursor:pointer;
-webkit-border-radius: 5px;
border-radius: 8px;
color: #6F798E;
}
input[type=button] {
padding:5px 15px;
background:#ccc;
border: 1px solid #CCC;
cursor:pointer;
-webkit-border-radius: 8px;
border-radius: 10px;
color: #6F798E;
}
.button:hover {background-color: #828385; color: #E3ECFF;}
.button:active {
background-color: #061535;
box-shadow: 0 5px #666;
transform: translateY(4px);
}
select {
margin: 0;
padding: 0;
width: 100px;
color: #6F798E;
box-sizing: border-box;
}
</style>
//Aşağıdaki html formunda yapılacak olan işlemler method= POST için değişkenleri normal olarak 'SPCclient.php' sayfasına POST etmek istediğimizi gösteriyoruz.
<form name="form1" method="post" action="SPCclient.php">
//Yukarıda JavaScript'de yazmış olduğumuz satır ekleme ve satır silme fonksiyonlarının buttonların click olayına bağlanması paremetre olarak işlemleri hangi html tabloya uygulamak istiyorsak o tablonun id='dataTable' giriyoruz.
<INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />
<INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />
<br/>
//En dış tablo ..
<table width: 100%; cellspacing="2" cellpadding="2" border="1">
<tr>
<td> </td>
<td><b> idcollect </b></td>
<td><b> idcharacteristic</b></td>
<td><b>idsequencesample</b></td>
<td><b> dtsample </b></td>
<td><b> tmsample </b></td>
<td><b> config </b></td>
<td><b> idmachine </b></td>
<td><b> idoperator </b></td>
<td><b> idinspector </b></td>
<td><b> idshift </b></td>
<td><b> idgage </b></td>
<td><b> nmlot </b></td>
<td><b> nmmo </b></td>
<td><b> qtitens </b></td>
<td><b> qtdefectsitem </b></td>
<td><b> qtrejectsitem </b></td>
</tr>
</table>
//DataGrid olarak kullanmak istediğimiz tablo ...
<TABLE id="dataTable" cellspacing="2" cellpadding="2" border="1">
<tr>
<th class="chkk"></th><th colspan="15"></th>
</tr>
<tr>
//html'de checkbox nesnesini oluşturma ..
<td><input type="checkbox" name="chk"/></td>
//html'de dropdown nesnesini oluşturma... ve birden fazla satır eklendiği taktirde aynı değişkene birden fazla değer atamak için aşağıdaki gibi nesnenin değer tutacak olan değişkenini array olarak tanımlıyoruz.
<td>
<select name="idcollect[]">
<option value="33test">33test</option>
<option value="000032test">000032test</option>
<submit>submit</submit>
</select>
</td>
<td>
<select name="idcharacteristic[]">
<option value="OP01"> OP01 </option>
<option value="OP02">OP02</option>
<option value="OP03">OP03</option>
<option value="OP04">OP04</option>
<option value="OP05">OP05</option>
<submit>submit</submit>
</select>
</td>
//her satır eklemede aynı değişkene fazladan bir değer bağlanabilmesi için tabloda tanımlı tüm input ve/veya select nesnelerinin değişkenlerini dizi şeklinde tanımlıyoruz.
<td>
<input type="text" size="13" name='idsequencesample[]'>
</td>
<td>
<input type="text" size="8" name="dtsample[]">
</td>
<td>
<input type="text" size="8" name="tmsample[]">
</td>
<td>
<input type="text" size="2" name="config[]">
</td>
<td>
<input type="text" size="8" name="idmachine[]">
</td>
<td>
<input type="text" size="8" name="idoperator[]">
</td>
<td>
<input type="text" size="8" name="idinspector[]">
</td>
<td>
<input type="text" size="4" name="idshift[]">
</td>
<td>
<input type="text" size="4" name="idgage[]">
</td>
<td>
<input type="text" size="3" name="nmlot[]">
</td>
<td>
<input type="text" size="3" name="nmmo[]">
</td>
<td>
<input type="text" size="4" name="qtitens[]">
</td>
<td>
<input type="text" size="10" name="qtdefectsitem[]">
</td>
<td>
<input type="text" size="9" name="qtrejectsitem[]">
</td>
</tr>
</table>
//JavaScript'de yazdığımız satır sayma fonksiyonunun döndürdüğü NumRows değişkenini form'da tanımlı 'SPCclient.php' sayfasına post etmek için aşağıdaki gibi 'hidden' tipinde nesne tanımlıyoruz.
<input type="hidden" id='NumRows' name='NumRows' value="0">
//Form nesnelerinin değerlerini 'SPCclient.php' sayfasına post etmek için aşağıdaki gibi 'submit' tipinde nesne tanımlıyoruz.
<center> <input type="submit" name="GONDER" value="GONDER" onclick="CountRows();"/> </center>
</form>
</body>
</html>
PHP ile Soap Client Oluşturmak ve HTML Form'dan Post Edilen Değişkenleri Kullanmak
.. / SPCclient.php Sayfası:
<?php
$url = "http://domain/se/ws/spc_ws.php";
//soap web sunucuya bağlanmak için yapılması gereken konfigürasyon aşağıdaki gibidir.
$opts = array('ssl' => array('verify_peer'=>false, 'verify_peer_name'=>false,'allow_self_signed' => true));
$params = array ('cache_wsdl' => WSDL_CACHE_NONE, 'encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_1, 'trace' => true, 'exceptions' => true, "connection_timeout" => 180,
'login' => 'usrname',
'password' => 'psswrd',
'stream_context' => stream_context_create($opts) );
try {
//soap web servise bağlanacak client nesnesinin oluşturulması aşağıdaki gibidir.
$client = new SoapClient ( $url . "?wsdl", $params );
//web servisin barındırdığı tüm fonksiyonları listelemek için kod satırı aşağıdaki gibidir.
//var_dump($client->__getFunctions());
if (isset($_POST['GONDER']))
{//html formun değerlerini post edecek buttona basıldığında gerçekleşmesi beklenen işlemler aşağıdaki gibidir.
//JavaScript'de yazdığımız tablonun satır sayısını döndüren fonksiyondan dönen değerleri aşağıdaki gibi karşılıyoruz.
$NumRows = $_REQUEST['NumRows']-1;
echo "GIRILEN VERILER";
echo "<br>";
echo "<br>";
//tablonun satır sayısı kadar dönecek olan döngüde yapılan işlemler..
for($i=0; $i < $NumRows; $i++)
{
//web serviste tanımlı fonksiyona client ile göndereceğimiz paremetrelerin tanımlanması aşağıdaki gibidir.
$idcollect="";
$idcharacteristic="";
$idsequencesample="";
$dtsample="";
$tmsample="";
$config="";
$idmachine="";
$idoperator="";
$idinspector="";
$idshift="";
$idgage="";
$nmlot="";
$nmmo="";
$qtitens="";
$qtdefectsitem = "";
$qtrejectsitem="";
//her döngüde post ile html formdan dönen değerlerin değişkenlere bağlanması aşağıdaki gibidir.
$idcollect = $_POST['idcollect'];
$idcharacteristic = $_POST['idcharacteristic'];
if (count( array_filter($_POST['idsequencesample'])) ==0)
{
echo "<script type='text/jscript'>alert('Orneklem Sirasi Bos Birakilamaz. !!')</script>";
exit;
}
else
$idsequencesample = $_POST['idsequencesample'];
if (count( array_filter($_POST['dtsample'])) ==0)
{
echo "<script type='text/jscript'>alert('Orneklem Tarihi Bos Birakilamaz. !!')</script>";
exit;
}
else
$dtsample = $_POST['dtsample'];
if (count( array_filter($_POST['tmsample'])) ==0)
{
echo "<script type='text/jscript'>alert('Orneklem Saati Bos Birakilamaz. !!')</script>";
exit;
}
else
$tmsample = $_POST['tmsample'];
if (count( array_filter($_POST['idmachine'])) ==0)
{
echo "<script type='text/jscript'>alert('Makine ID Bos Birakilamaz. !!')</script>";
exit;
}
else
$idmachine = $_POST['idmachine'];
if (count( array_filter($_POST['idoperator'])) ==0)
{
echo "<script type='text/jscript'>alert('Operator ID Bos Birakilamaz. !!')</script>";
exit;
}
else
$idoperator = $_POST['idoperator'];
if (count( array_filter($_POST['idinspector'])) ==0)
{
echo "<script type='text/jscript'>alert('Kontrolor ID Bos Birakilamaz. !!')</script>";
exit;
}
else
$idinspector = $_POST['idinspector'];
if (count( array_filter($_POST['idshift'])) ==0)
{
echo "<script type='text/jscript'>alert('Vardiya ID Bos Birakilamaz. !!')</script>";
exit;
}
else
$idshift = $_POST['idshift'];
$idgage = $_POST['idgage'];
$nmlot = $_POST['nmlot'];
$nmmo = $_POST['nmmo'];
if (count( array_filter($_POST['qtitens'])) ==0)
{
echo "<script type='text/jscript'>alert('Orneklem Sayisi Bos Birakilamaz. !!')</script>";
exit;
}
else
$qtitens = $_POST['qtitens'];
if (count( array_filter($_POST['qtdefectsitem'])) ==0)
{
echo "<script type='text/jscript'>alert('Kusurlu Sayisi Bos Birakilamaz. !!')</script>";
exit;
}
else
$qtdefectsitem = $_POST['qtdefectsitem'];
if (count( array_filter($_POST['qtrejectsitem'])) ==0)
{
echo "<script type='text/jscript'>alert('Red Sayisi Bos Birakilamaz. !!')</script>";
exit;
}
else
$qtrejectsitem = $_POST['qtrejectsitem'];
//değişkenlerin soap client paremetresi olarak tanımlanması
$paremetreler = array('idcollect' =>$idcollect[$i],'idcharacteristic' =>$idcharacteristic[$i],'idsequencesample' =>$idsequencesample[$i],'dtsample' =>$dtsample[$i],'tmsample' =>$tmsample[$i],'config' =>$config[$i],'idmachine' =>$idmachine[$i],'idoperator' =>$idoperator[$i],'idinspector' =>$idinspector[$i],'idshift' =>$idshift[$i],'idgage' =>$idgage[$i],'nmlot' =>$nmlot[$i],'nmmo' =>$nmmo[$i],'qtitens' =>$qtitens[$i],'qtdefectsitem' =>$qtdefectsitem[$i],'qtrejectsitem' =>$qtrejectsitem[$i]);
//web servisten fonksiyon çağırma ve tanmlanan paremetrelerin fonksiyon değişkeni olarak aktarılması aşağıdaki gibidir.
$data = $client->__soapCall('ImportSampleAtt', array('parameters'=> $paremetreler));
//fonksiyondan dönen sonuç..
var_dump($data);
//html tablodan web servise post edilen tüm verilerin listelenmesi
echo "<br>";
echo $idcollect[$i];
echo " ";
echo $idcharacteristic[$i];
echo " ";
echo $idsequencesample[$i];
echo " ";
echo $dtsample[$i];
echo " ";
echo $tmsample[$i];
echo " ";
echo $config[$i];
echo " ";
echo $idmachine[$i];
echo " ";
echo $idoperator[$i];
echo " ";
echo $idinspector[$i];
echo " ";
echo $idshift[$i];
echo " ";
echo $idgage[$i];
echo " ";
echo $nmlot[$i];
echo " ";
echo $nmmo[$i];
echo " ";
echo $qtitens[$i];
echo " ";
echo $qtdefectsitem[$i];
echo " ";
echo $qtrejectsitem[$i];
echo "<br>";
}
}
}
catch(Exception $e)
{
//web servise bağlanılamadığı taktirde verilecek hata mesajı..
die($e->getMessage());
}
?>
11 Ocak 2017 Çarşamba
PHP ' de Web Servis Uygulaması (Server - Client)
Bu yazımda PHP'de nasıl web sunucu ve istemci yazıldığına dair örnek uygulama yaparak, olası hatalar ve açıklamalarla konuya değiniyor olacağım. Uygulamanın sunucu tarafında dışarıdan aldığı iki sayı değişkeninin toplamını veya farkını bulan fonksiyonlar yer alacak.
PHP'de Web Servis Oluşturmak
Bunun için ilk olarak ben soap'ın nusoap toolkitininin kütüphanesini indirerek işe başladım. Kütüphaneyi bu linkten indirebilirsiniz. Kütüphane lib klasörü altında .php dosyalarından oluştuğu için projelere import ederken require_once(‘lib/nusoap.php’); şeklinde kullanmamız gerekecektir. Kütüphaneyi bu şekilde import ettikten sonra aşağıdaki gibi sunucu kodlarını yazıyoruz.
../se/servis.php
<?php
include_once 'lib/nusoap.php'; //nusoap kütüphanesinin sunucuya import edilmesi
$servis = new soap_server(); //yeni bir soap_server nesnesi oluşturmak
$endpoint = "http://domain_adresi/se/servis.php"; //client'ın sunucuya erişimi için soap address oluşturmak
$ns = "urn:serviswsdl"; //xml hedef alan adının tanımlanması
$servis->schemaTargetNamespace = $ns;
$servis->configureWSDL("web-service",$ns,$endpoint);//soap sunucunun xml diline dökümü olan wsdl kodlamasının konfigurasyonu: web servisin adı, xml tabanlı soap hedef sunucu adı ve hedef soap adresinden oluşmaktadır.
//web servisin içinde barındıracağı gerekli işlemleri yapacak olan fonksiyonların tanımlanması
$servis->register("Topla",array('idfield1' => 'xsd:integer', 'idfield2' => 'xsd:integer'), array('return' => 'xsd:string'), $ns); //istemciden alacağı iki sayının toplamını döndüren fonksiyon
$servis->register("Cikar",array('idfield1' => 'xsd:integer', 'idfield2' => 'xsd:integer'), array('return' => 'xsd:string'), $ns); //istemciden alacağı iki sayının farkını döndüren fonksiyon
$servis->register("goster",array('idfield1' => 'xsd:string'), array('return' => 'xsd:string'), $ns); //istemciden aldığı sayıyı ekranda gösteren fonksiyon
- Yukarıda web servise tanımladığımız fonksiyonları aşağıdaki gibi yazıyoruz.
function Topla($idfield1, $idfield2)
{
$toplam = $idfield1 + $idfield2;
$sonuc = "Girilen Sayilarin Toplami:" .$idfield1 ."+" .$idfield2 ."=" .$toplam;
return $sonuc;
}
function Cikar($idfield1, $idfield2)
{
$fark = $idfield1 - $idfield2;
$sonuc = "Girilen Sayilarin Farki:" .$idfield1 ."-" .$idfield2 ."=" .$fark;
return $sonuc;
}
function goster($idfield1)
{
$sonuc = $idfield1;
return $sonuc;
}
//server-client veri iletişimi için gereken kodları aşağıdaki gibi yazıyoruz.
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$servis->service($HTTP_RAW_POST_DATA);
?>
Web Servisin Başarılı Şekilde Oluşturulmuş Halinin Görüntüsü Aşağıdaki gibi Olmalıdır
PHP'de Client Oluşturmak
../se/client.php
Not: Client'ı nusoap kütüphanesini kullanmadan soap servisin kendi fonksiyonlarını kullanarak yazdım. Amaç, nusoap kullanmadan da istemci ve/veya web sunucunun nasıl yazılabileceğini göstermek.
<?php
//Aşağıdaki gibi client'ın tutacağı değerleri değişkenlere aktarıyorum. Bu dışarıdan kullanıcının gireceği değerler şeklinde de olabilir. örnek olması açısından şimdilik değişkenlere sabit değerler atıyorum.
$idfield1 =20;
$idfield2 =30;
$url = "http://domain_address/se/servis.php"; //Buraya yukarıda yazmış olduğumuz servisin yolunu tanımlıyoruz.
//Client'ın sunucuya bağlanırken bilindik hatalarla karşılaşmamak için aşağıdaki gibi konfigurasyonları yazıyoruz.
$opts = array('ssl' => array('verify_peer'=>false, 'verify_peer_name'=>false,'allow_self_signed' => true));
$params = array ('cache_wsdl' => WSDL_CACHE_NONE, 'encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_1, 'trace' => true, 'exceptions' => true, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts) );
try {
$client = new SoapClient ( $url . "?wsdl", $params );//Client nesnesinin oluşturulma şekli
//var_dump($client->__getFunctions()); //comment şeklinde bıraktığım bu kod serviste tanımlı tüm fonksiyonları listelemek için kullanılır.
$data = $client->Topla($idfield1,$idfield2); //Client üzerinden servisteki 'Topla' fonksiyonunun çağrılması
var_dump($data);//Sonuç yazdırma..
}
catch(Exception $e)
{
die($e->getMessage());//Client'ın sunucuya bağlanmada veya ilgili fonksiyonlara istekte bulunulduğu karşılaşılacak hataları yakalamak için işlemleri try-catch bloklarını kullanarak yapıyoruz.
}
?>
Kaydol:
Kayıtlar (Atom)