Apache Sunucusu için SSL Nasıl Oluşturulur

 Apache web sunucusu için SSL sertifikasını aşağıdaki gibi oluşturabilirsiniz. Bu sertifikayı oluşturmak için OpenSSL kullanacağız. Https ile güvenli siteler yapmak için günümüzde mutlaka bu SSL sertifikasını oluşturmalı ve kullanmalısınız. Biz oluşturma işlemini XAMPP server için yapacağız, sizde XAMPP kullanmıyorsanız kendinize göre komutları uyarlayabilirsiniz. İlk olarak Apache bin klasörüne gidilir.

cd /E E:\xampp\apache\bin

Bazı parametreleri set edelim

set OPENSSL_CONF=E:\xampp\apache\conf\openssl.cnf

set RANDFILE=C:\Temp\.rnd

RSA private key Oluşturma

openssl genrsa -out server.key 1024

2048 şifreleme kullanabilirsiniz, sadece komutun sonundaki değeri değiştirmeniz yeterlidir. DS3 ile şifrelemek isterseniz aşağıdaki komutu kullanın.

openssl genrsa -des3 -out server.key 1024

Bu opsiyon size bir şifre soracaktır, uygun bir şifre ile şifreleyin.

CSR (Certificate Sign Request ) Oluşturma

openssl req -nodes -new -key server.key -out server.csr

Bu komutu girdikten sonra çıkan aşağıdaki alanları doldurun.

Country Name (2 letter code) [AU]:TR
State or Province Name (full name) [Some-State]:Istanbul
Locality Name (eg, city) []:Istanbul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Şirket Adı
Organizational Unit Name (eg, section) []:Bölüm
Common Name (e.g. server FQDN or YOUR name) []:Domain
Email Address []:eporta adresi
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Domain

Burada dikkat edilmesi gereken "An optional company name" alanınında doldurulmasıdır. Bu alanı doldurmazsanız bazı browser'lar da hata alınabilir. Apache\bin klasöründe oluşacak server.csr isimli CSR dosyasını kullanabilirsiniz.

CSR dosya içeriği nasıl kontrol edilir.

openssl req -in E:\XAMPP\apache\bin\server.csr server -noout -text

Tek Satırda KEY ve CSR Dosyası Oluşturma

İlk olarak bir openssl-san.cfg dosyası oluşturmamız gerekiyor. Dosya içeriği aşağıdaki gibi olmalı.

${URL_ADRESS}=domain adıdır.

------------------------------------

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = TR
ST = IS
L = Istanbul
O = Sirket
OU = Bolum
CN = ${URL_ADRESS}
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${URL_ADRESS}
DNS.2 = ${URL_ADRESS}.uzantısı
------------------------------------

Dosyayı openssl komutunu yazacağımız alana kopyalamalıyız. Açağıdaki komut ile Key ve CSR dosyalarını yukarıdaki konfigürasyona göre oluşturmuş oluruz.

openssl req -new -newkey rsa:2048 -nodes -out ${URL_ADRESS}.csr -keyout ${URL_ADRESS}.key -config openssl-san.cfg

Aşağıdaki komut ile içeriğini kontrol edebiliriz. 

openssl req -in dosya.csr server -noout -text

Kontrollerde bir sorun yoksa dosya.csr isimli dosyayı SSL alacağınız kişi veya kuruma gönderebilirsiniz. Kendiniz sertifika oluşturacaksanız yazının devamını takip ediniz.

Sertifika Oluşturma

Aşağıdaki komutu kullanarak sertifika oluşturabilirsiniz.

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Tek Adımda Sertifika Oluşturma:Opsiyonel

openssl req -nodes -new -x509 -keyout server.key -out server.crt

Sertifikayı uygulama

Apache Http.conf dosyasına aşağıdaki bölümü ekleyebilirsiniz.

<VirtualHost *:443>
     DocumentRoot E:/XAMPP/htdocs/
     ServerName Domain
     ServerAlias *.Domain
SSLEngine On
SSLCertificateFile "conf/ssl.crt/server.cer"
SSLCertificateKeyFile "conf/ssl.crt/server.key"
</VirtualHost>

yada aşağıdaki komut ile ekleyebilirsiniz. Dikkat etmeniz gereken konu konfigürasyondaki directory yeni oluşturduğunuz dosyaların yeri olmalıdır.

copy /Y server.crt e:\xampp\apache\conf\ssl.crt

copy /Y server.key e:\xampp\apache\conf\ssl.key

Apache sunucusunu yeniden başlatın.

SSL çalışır durumda.


Kaynak : https://benohead.com/blog/2014/05/07/generating-new-certificate-xampp-windows/

https://helpcenter.gsx.com/hc/en-us/articles/207831828-How-to-identify-the-Cipher-used-by-an-HTTPS-Connection

https://docs.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-

Apache Sunucu Güvenliği

Apache sunucusunun güvenliği için aşağıdaki adımları takip etmek önemlidir:

  1. Güncel Tutun: Apache sunucunuzu ve kullanılan diğer yazılımları (PHP, MySQL vb.) güncel tutun. Güncellemeler, güvenlik açıklarını düzeltir ve saldırılardan korunmanıza yardımcı olur.
  2. Güvenlik Duvarı (Firewall): Sunucunuzda güvenlik duvarı kullanın ve yalnızca gerekli portlara izin verin. Güvenlik duvarı, zararlı trafikleri engeller ve saldırılardan korur.
  3. DoS ve DDoS Saldırılarına Karşı Koruma: Apache sunucusunun DoS (Hizmet Reddi) ve DDoS (Dağıtık Hizmet Reddi) saldırılarına karşı dayanıklı olmasını sağlayın. Yüksek trafikli saldırılara karşı önlem almak için uygulamalar ve servisler kullanın.
  4. SSL Sertifikası: Web sitesini HTTPS protokolüyle çalıştırmak için SSL sertifikası kullanın. SSL, veri iletimini şifreleyerek güvenliği artırır ve kullanıcı bilgilerini korur.
  5. Güçlü Parolalar ve Erişim Kontrolleri: Sunucu, yönetici paneli ve veritabanları için güçlü parolalar kullanın. Ayrıca, erişim kontrolleriyle sadece yetkilendirilmiş kişilerin sunucuya erişmesini sağlayın.
  6. İzin Ayarları: Dosya ve klasör izinlerini uygun şekilde yapılandırın. İzinlerin gereksiz yere açık olması güvenlik açıklarına neden olabilir.
  7. Giriş Logları: Apache sunucusunun giriş loglarını düzenli olarak inceleyin. Bu loglar, olası saldırıları ve güvenlik ihlallerini tespit etmenize yardımcı olabilir.
  8. IP Engelleme: Tehdit oluşturan IP adreslerini engellemek için güvenlik duvarında IP engelleme (IP blocking) kullanın.
  9. HTTP Başlık Güvenliği: HTTP başlık güvenliği önlemleri alın. Örneğin, HTTP başlıklarında sunucu ve teknoloji bilgisi vermeyin.
  10. Kendi Kendini İmha Eden Dosyalar: Özellikle yükleme dosyaları gibi geçici dosyaların sunucuda kalmasını önleyin.

Bu adımlar, Apache sunucunuzun güvenliğini artırmaya yardımcı olacaktır. Ancak, güvenlik sürekli bir çabadır ve düzenli olarak sunucu güvenlik testleri ve denetimleri yapmak önemlidir. Ayrıca, güvenlik uzmanlarından danışmanlık almak ve güvenlik en iyi uygulamalarını takip etmek de önemlidir.

 Apache sunucu güvenliği için bazı bilgileri kullanıcılardan saklamata fayda vardır. Bunun için ilk olarak .haccess dosyası oluşturarak işe başlamak gerekir. Bu dosya ile birçok güvenlik önlemini alabilirsiniz.

.htaccess dosyasını / dizininde oluşturunuz. Dosya içeriği;

IndexIgnore *
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
ErrorDocument 500 /error.html
ErrorDocument 502 /error.html
ErrorDocument 503 /error.html
ErrorDocument 504 /error.html

PHP uzantısını silmek için
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

HTML uzantısını silmek için
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

Link sonundaki / işaretini silmek için
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

Şeklinde olabilir.

Apache Mod Security Yükleme

İlk olarak aşağıdaki linklerden dosya indirilir.

https://www.apachehaus.com/cgi-bin/download.plx

veya

https://www.apachelounge.com/download/

Daha sonra zip dosyası açılır. Dosya içindeki dosya mod_security2.so apache\modules klasörüne kopyalanır.

yajl.dll dosyası apache\bin klasörüne kopyalanır. Aşağıdaki satır http.conf dosyasına eklenir.

LoadModule security2_module modules/mod_security2.so
<IfModule security2_module>
    SecRuleEngine on
    ServerTokens Min
    SecServerSignature " "
</IfModule> 

Server yeniden başlatılır.

Bu modul için diğer seçenekler;

<IfModule mod_security.c>
    # Turn the filtering engine On or Off
    SecFilterEngine On
    # The audit engine works independently and
    # can be turned On of Off on the per-server or
    # on the per-directory basis
    SecAuditEngine RelevantOnly
    # Make sure that URL encoding is valid
    SecFilterCheckURLEncoding On
    # Unicode encoding check
    SecFilterCheckUnicodeEncoding On
    # Only allow bytes from this range
    SecFilterForceByteRange 1 255
    # Cookie format checks.
    SecFilterCheckCookieFormat On
    # The name of the audit log file
    SecAuditLog logs/audit_log
    # Should mod_security inspect POST payloads
    SecFilterScanPOST On
    # Default action set
    SecFilterDefaultAction "deny,log,status:406"
    # Simple example filter
    # SecFilter 111
    # Prevent path traversal (..) attacks
    # SecFilter "\.\./"
    # Weaker XSS protection but allows common HTML tags
    # SecFilter "<( |\n)*script"
    # Prevent XSS atacks (HTML/Javascript injection)
    # SecFilter "<(.|\n)+>"
    # Very crude filters to prevent SQL injection attacks
    # SecFilter "delete[[:space:]]+from"
    # SecFilter "insert[[:space:]]+into"
    # SecFilter "select.+from"
    # Require HTTP_USER_AGENT and HTTP_HOST headers
    SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"
    # Only accept request encodings we know how to handle
    # we exclude GET requests from this because some (automated)
    # clients supply "text/html" as Content-Type
    SecFilterSelective REQUEST_METHOD "!^GET$" chain
    SecFilterSelective HTTP_Content-Type "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)"
    # Require Content-Length to be provided with
    # every POST request
    SecFilterSelective REQUEST_METHOD "^POST$" chain
    SecFilterSelective HTTP_Content-Length "^$"
    # Don't accept transfer encodings we know we don't handle
    # (and you don't need it anyway)
    SecFilterSelective HTTP_Transfer-Encoding "!^$"
</IfModule>

Http bağlantısını Https bağlantısına yönlendirme

Kullanıcıların kesinlikle 80 portundan sunucunuza gelememesi gereklidir. 80 portu güvenli olmadığı için aşağıdaki önlem alınabilir.

<VirtualHost *:80>
     ServerName adres.com
     ServerAlias *.adres.com
Redirect permanent / https://adres.com/
</VirtualHost>

<IfModule rewrite_module>
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R,QSA]
</IfModule>


SQL Materialized View Oluşturma

 Materialized View bir tablonun veya view'ın kendi database'imizde oluşturulan kopyasıdır ve veri içeren tablolar gibi çalışır. Uzak bir database'de sorgu çalıştırmaktansa tabloyu kendi database'imize kopyalayıp çalıştırmamızı sağlar ve bu sorgunun çok hızlı cevap vermesi demektir. Materialized View içindeki verileri istediğimiz gibi güncelletebiliriz. Materialized View database'inizde fiziksel olarak veriyi tutar. Komut formatı şöyledir:

- Normal
CREATE MATERIALIZED VIEW view-name
BUILD [IMMEDIATE | DEFERRED]
REFRESH [FAST | COMPLETE | FORCE ]
ON [COMMIT | DEMAND ]
[[ENABLE | DISABLE] QUERY REWRITE]
AS
SELECT ...;

-- Pre-Built
CREATE MATERIALIZED VIEW view-name
ON PREBUILT TABLE
REFRESH [FAST | COMPLETE | FORCE ]
ON [COMMIT | DEMAND ]
[[ENABLE | DISABLE] QUERY REWRITE]
AS
SELECT ...;

BUILD veri yükleme opsiyonları;

IMMEDIATE : Materialized View oluşturulduğu anda veri de tabloya doldurulur.
DEFERRED : İlk güncelleme sırasında veri doldurulur.

REFRESH opsiyonları;

FAST : Materialized View Log'u kullanılarak güncelleme yapılır. Materialized View Log bulamazsa güncelleme yapamaz.
COMPLETE :  Sorguya göre Materialized View içindeki veriler tamamen silinir ve yeniden ilgili database'lerden çekilir.
FORCE : İlk olarak Fast dener, çalışmazsa Complate Refresh dener.

ON COMMIT : Materialized View de veri güncelleme ilgili databaselerde commit gönderildiğinde yapılır.
ON DEMAND : Yenileme işlemi manuel olarak veya bir zamanlayıcı set edildiğinde yapılır.

START WITH SYSDATE NEXT SYSDATE + 1  aralığı ile yenilenir. Buradaki “1” gün’ü ifade eder. Yani burada günde bir defa refresh edilmesi istenilmiş. Eğer 1/(60*24) yapsaydık, dakikada 1 refresh edilmesini belirtmiş olurduk.

Günde bir yenileme
CREATE MATERIALIZED VIEW view-name
REFRESH COMPLETE
NEXT (SYSDATE +1)
AS
SELECT .....

Saatte bir yenileme
CREATE MATERIALIZED VIEW view-name
REFRESH COMPLETE
NEXT (SYSDATE +1/24)
AS
SELECT .....

SQL Data link üzerinden  Materialized View nasıl oluşturulur.
CREATE MATERIALIZED VIEW view-name
AS
SELECT * FROM the_table@si_db;

si_db : Data Link adı.

Materialized View nasıl silinir.

DROP MATERIALIZED VIEW view_name;

Örnek:
CREATE MATERIALIZED VIEW MV_EXAMPLE_TABLE_NAME
PARALLEL 16
BUILD IMMEDIATE
REFRESH COMPLETE
NEXT (SYSDATE + 1/24)
AS
select /*+  parallel(16) */ * FROM


Kaynak : 
https://oracle-base.com/articles/misc/materialized-views#create-materialized-view

WEB Sayfanıza Harita Ekleyin

 Web sayfanıza harita ekleyip bu harita içerisinde bazı noktaları işaretlemek, harita üzerine çizimler yapmak istiyorsanız bunu Leaflet uygulaması ile kolaylıkla yapabilirsiniz. Sadece aşadaki HTML kodu kendi sitenize uyarlamanız yeterli. Harita üzerindeki gösterimler için siteyi ziyaret edin, çok basit bir şekilde harita üzerinde istediğiniz tüm gösterimleri yapabilirsiniz. Çok basit, çok hızlı. Aşağıdaki kodda center: alanı koordinat bilgisidir.

<!DOCTYPE html>

        <html>
           <head>
              <title>Leaflet</title>
              <link rel = "stylesheet" href = "http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css"/>
           </head>
          <body>
<div id = "map" style = "width: 900px; height: 580px"></div>
<script src = "http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
              <script>
                 // Creating map options
                 var mapOptions = {
                    center: [41.332453, 28.577112],
                    zoom: 10
                 }
                 
                 // Creating a map object
                 var map = new L.map('map', mapOptions);
                 
                 // Creating a Layer object
                 var layer = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png');
                 
                 // Adding layer to the map
                 map.addLayer(layer);
              </script>

           </body>
        </html>

Sayfanızda SSL çalışıyorsa yukarıdaki kodda aşağıdaki link ve script yerine aşağıdaki bölümleri kullanın.

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css" integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA==" crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js" integrity="sha512-nMMmRyTVoLYqjP9hrbed9S+FzjZHW5gY1TWCHA5ckwXZBadntCNs8kEqAWdrb9O7rxbCaA4lKTIWjDXZxflOcA==" crossorigin=""></script>

Ayrıntılı bilgi için : https://leafletjs.com/

HTML Kod Örnekleri

  HTML kod içinde çok kullanışlı bazı kod örneklerini burada vereceğiz. PHP veya bunun gibi dinamik kod sistemlerinin yapabileceği birçok basit işlem HTML içinde de yapılabilir. Bunlardan bazılarına değinelim.

HTML Form Alanlarının Boş Bırakılmasını Engelleme

HTML form içinde bulunan herhangi bir değeri zorunlu hale getirmek ve bu zorunlu değer girilmezse hata mesajı verdirmek için aşağıdaki kod örneği kullanılabilir.

<input class="form-control" type="email"  required placeholder="E-Mail"

 oninvalid="this.setCustomValidity('Lütfen geçerli bir E-Mail adresi yazın.')"

 oninput="setCustomValidity('')">

HTML Sayfada Butonla Popup Sayfa Açma

Htlm sayfa içinden bir buton vasıtası ile popup pencere aştırmak için aşağıdaki basit kodu kullanabilirsiniz. Aynı sayfadan birkaç fakrlı popup sayfa açacaksanız her buton için "MyWindow" kelimesi yerine başka birşey yazın. Böylece her buton için faklı popup pencere açılacaktır.

<a href="#" onClick="MyWindow=window.open('http://www.google.com','MyWindow','width=600,height=300'); return false;">Click Here</a>

Bu kod css ve js dosyası gerektirmez, html dosyanız içine yukarıdaki şekilde yazmanız yeterlidir.

Ziyaretciyi HTML kod ile belli bir URL'e yönlendirme. 

<meta http-equiv="Refresh" content="0; url='http://www.google.com'" />

Oracle SQL Türkçe Karekter Uygulamaları

 Oracle SQL'de en çok karşılaşacağınız sorunların başında Türkçe karekter sorunları yer alıyor. Bu sorunları gidermek için aşağıdaki yöntemleri kullabilirsiniz.

Bir string içindeki Türkçe karekterleri dönüştürmek için;

SELECT TRANSLATE ('Türkçe karekter dönüştürme, ğüşİçö', 'ĞÜŞİÖÇğüşıöç', 'GUSIOCgusioc') FROM dual;

Turkce karekter donusturme, gusIco



ORACLE SQL Zaman Fonksiyonları ve Sıralama

Oracle SQL'de belirli bir süre geri gitmek ve bu tarihlere göre bir sıralama yapabilmek için bazı standart formarlar gerekir. Bu formatları kendi sorgunuz ile uygun bir şekilde birleştirerek sıralamayı istediğiniz gibi başlatıp hazırlayabilirsiniz. İlk olarak yardımcı fonksiyonlara bakalım.

SYSDATE : Veritabanı sunucusuna ait tarih-saat bilgisini verir.
SELECT SYSDATE FROM DUAL
2022-11-02 13:23:59

CURRENT_DATE : Kullanılan sunucuya ait sistemin tarih-saat bilgisini verir.
SELECT CURRENT_DATE FROM DUAL
2022-11-02 13:24:59

CURRENT_TIMESTAMP : Kullanıcıya ait sistemin tarih-saat bilgisini verir.
SELECT CURRENT_TIMESTAMP FROM DUAL
2022-11-02 13:26:56

DBTIMEZONE : Veritabanı sunucusuna ait saat dilimini verir.
SELECT DBTIMEZONE FROM DUAL
+00:00

LAST_DAY : Tarihe ait ayın son gününü verir.
SELECT LAST_DAY(SYSDATE) FROM DUAL
2022-11-30 13:29:41

NEW_TIME : Tarihe ait saat dilimini çevirir.
SELECT NEW_TIME(SYSDATE, 'GMT', 'PST') FROM DUAL
2022-11-02 05:31:31

ADD_MONTHS : Belirttiğiniz tarihe istenilen değer kadar ay ekler.
SELECT ADD_MONTHS(SYSDATE, 2) FROM DUAL
2023-01-02 13:32:41

EXTRACT : Tarih bilgisinden yıl, ay, gün, saat gibi her bir parçayı almayı sağlar.
SELECT EXTRACT(YEAR FROM DATE '2022-01-02') FROM DUAL
2022

SELECT EXTRACT(MONTH FROM DATE '2022-01-02') FROM DUAL
1

SELECT EXTRACT(DAY FROM DATE '2022-01-02') FROM DUAL
2

MONTHS_BETWEEN : Verilen tarih aralığını ay olarak hesaplar.
SELECT MONTHS_BETWEEN(ADD_MONTHS(SYSDATE, 2), SYSDATE) FROM DUAL
2

NEXT_DAY : Tarihten sonraki ilk günün tarihini verir.
SELECT NEXT_DAY(SYSDATE, 'SUNDAY') FROM DUAL

TRUNC : Belirtilen tarih alanının ilk anını hesaplar, saat bilgilerini sıfırlar.
SELECT TRUNC(SYSDATE) FROM DUAL
2022-11-02 00:00:00

SELECT TRUNC(SYSDATE, 'YEAR') FROM DUAL
2022-01-01 00:00:00

SELECT TRUNC(SYSDATE, 'MONTH') FROM DUAL
2022-11-01 00:00:00

TO_TIMESTAMP : String ifadeyi tarih formatına çevirir.
SELECT TO_TIMESTAMP('2022/01/01 12:00:01', 'YYYY/MM/DD HH:MI:SS') FROM DUAL
2022-01-01 12:00:01

TO_DATE : String ifadeyi tarih formatına çevirir.
SELECT TO_DATE('2022/01/01', 'YYYY/MM/DD') FROM DUAL
2022-01-01 00:00:00

TO_CHAR : Tarih ve saat biçimini string ifadeye çevirir.
SELECT SYSDATE, TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL
2022-11-02

SQL ile bu yıl
select TO_CHAR(TRUNC(SYSDATE),'YYYY') from dual

SQL ile bu gün
select TO_CHAR(TRUNC(SYSDATE),'DD.MM.YYYY') from dual

SQL ile bir gün önce
SELECT TO_DATE(current_date - 1) AS yesterday_date FROM dual

SQL ile bir gün sonra
SELECT TO_DATE(current_date + 1) AS tomorrow_date FROM dual

X Ay önceki ayın ilk gününü;

Örnekte X=11

SELECT TRUNC(ADD_MONTHS(SYSDATE, -11), 'MM') FROM DUAL

2021-01-01 00:00:00

SQL'de son X ayı sıralar;

Örnekte X=5

SELECT 1 + LEVEL - 1 AS SIRA, to_char(add_months(trunc(sysdate), - LEVEL + 1), 'MM') AS TARIH from dual connect by level <= 5

SIRA TARIH

1 12

2 11

3 10

4 09

5 08

SQL'de son X günü tarihi ile sıralar; 

Örnekte X=5

SELECT 1 + LEVEL - 1 AS SIRA, TO_CHAR((TRUNC(SYSDATE) - LEVEL + 1),'YYYY.MM.DD') AS TARIH FROM DUAL CONNECT BY LEVEL <= 5

SIRA TARIH

1 2021.12.01

2 2021.11.30

3 2021.11.29

4 2021.11.28

5 2021.11.27

Geriye dönük hafta numaraları listesi elde etme;

ör: Son 50 gün için hafta numaraları listesi

SELECT SUM(SIRA) AS SIRA, TARIH FROM
(SELECT 1 + LEVEL - 1 AS SIRA, TO_CHAR( TO_DATE(sysdate) - LEVEL + 1 , 'IW' ) AS TARIH 
FROM  DUAL CONNECT BY LEVEL <= 50) GROUP BY TARIH ORDER BY SIRA

Sıra Tarih(Hafta)
1 01
35 52
84 51
133 50
182 49
231 48
280 47
329 46

Bulunduğunuz günden geri gün listesi elde etme.

SELECT to_char(TO_DATE (SYSDATE - (LEVEL -1)), 'DD.MM.YYYY')  tarih FROM DUAL CONNECT BY LEVEL <= 360

SQL Sorgu Sonucunun Belirli bir Bölümünü Alma

Oracle SQL'de sorgu çıktısının belli bir bölümünü almak için bazı komutlar kullanmak gerekebilir. Sondan N satır veya baştan N satır alma ihtiyacı olabileceği gibi X satırından sonra N satır al gibi işlemler yapmak ta gerekebilir. Bu komutları birer örnek ile görelim

Örnek Database

   Kolon
----------
         1
         1
         2
         2
         3
         3
         4
         4
         5
         5
         6
         6
         7
         7
         8
         8
         9
         9
        10
        10
20 rows selected.

Son 5 satırı sıralamak için.

SELECT Kolon
FROM   Table
ORDER BY Kolon DESC
FETCH FIRST 5 ROWS ONLY;

   Kolon
----------
        10
        10
         9
         9
         8
5 rows selected.

Son 5 satırı bağlantıları ile al.

SELECT Kolon
FROM   Table
ORDER BY Kolon DESC
FETCH FIRST 5 ROWS WITH TIES;

   Kolon
----------
        10
        10
         9
         9
         8
         8
6 rows selected.

İlk satırları %20 oranında sırala

SELECT Kolon
FROM   Table
ORDER BY Kolon
FETCH FIRST 20 PERCENT ROWS ONLY;

   Kolon
----------
         1
         1
         2
         2
4 rows selected.

4. satırdan başlayarak ilk 4 satırı sırala

SELECT Kolon
FROM   Table
ORDER BY Kolon
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

   Kolon
----------
         3
         3
         4
         4
4 rows selected.

4. Satırdan başlayarak verinin %20'sini sırala.

SELECT Kolon
FROM   Table
ORDER BY Kolon
OFFSET 4 ROWS FETCH NEXT 20 PERCENT ROWS ONLY;

   Kolon
----------
         3
         3
         4
         4
4 rows selected.



SQL Sondan bir karekter sil

select SUBSTR('350 M', 0, LENGTH('350 M') - 1) from dual;
350

SQL ilk 12 satır;

BY TARIH DESC FETCH NEXT 12 ROWS ONLY


https://www.oracletutorial.com/oracle-basics/oracle-fetch/ 

XAMPP Sunucusu OpenSSL Yazılımı Nasıl Upgrade Edilir

 OpenSSL yazılımınızın güncel olması güvenlik açısından çok önemlidir. Yeni yazılım çıktığında vakit kaybetmeden OpenSSL yazılımınızı güncellemelisiniz. XAMPP server üzerinde bu yazılımı güncellemek için sadece üç dosyayı güncellemeniz yeterlidir. OpenSSL yazılımının tüm dosyalarına;

https://wiki.openssl.org/index.php/Binaries

Adresinden erişebilirsiniz. Bu adreste bulunan linklerde farklı kaynaklardan dosyaları temin edebilirsiniz. XAMPP için en doğru kaynak;

http://wiki.overbyte.eu/wiki/index.php/ICS_Download

Adresidir Bu sayfanın download bölümünde uygun linki bulup dosyayı indirin. Dosya içinde bulunan;

  • libcrypto-1_1-x64.dll
  • libssl-1_1-x64.dll
  • openssl.exe

İsimli dosyaları Apache2 servisini durdurduktan sonra XAMPP\apache\bin klaörüne kopyalayıp servisi yeniden açmanız yeterlidir. XAMPP\apache\bin klasöründeki eski dosyaları işlemden önce yedeklemenizi öneririz.

Raspberry Pi Webmin Nasıl Yüklenir (Raspbian)

 Raspberry PI cihazına cihazın tüm özelliklerini web arayüzünden yönetebilmek için Webmin isimli yönetim programını kurabilirsiniz. Böylece cihazın üzerinde istediğiniz servisi kolaylıkla açıp kapatabilir ve kullanışlı bir arayüzden cihazı yönetebilirsiniz. İlk olarak kütüphaneleri güncelleyelim.

sudo apt update && sudo apt upgrade -y

Bu işlem biraz uzun sürebilir. Güncelleme yapıldıktan sonra yardımcı programları kuralım.

sudo apt install -y perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python

Webmin yazılımını cihazımıza indirelim.

wget http://prdownloads.sourceforge.net/webadmin/webmin_1.941_all.deb

Cihaza indirdiğimiz yazılımı kurmak için aşağıdaki komutu kullanalım.

sudo dpkg -i webmin_1.941_all.deb

Cihazın IP adresini öğrenelim

hostname -I

Webmin yazılımı kuruldu, bağlanmak için bir tarayıcı ile aşağıdaki adrese bağlanalım.

https://IPAdresi:10000

IPAdresi : Cihazın mevcut IP adresi olmalıdır.

Huawei Router ve Switch Kontrol Komutları

 Huawei router ve switch ekipmanlarından durum bilgisi alabilmek için aşağıdaki komutları kullanabilirsiniz.


display compatible-information

display cpu-usage

display cpu-usage configuration

display cpu-usage history

display device

display device capability

display device manufacture-info

display diagnostic-information

display elabel

display esn

display fan

display memory-usage

display memory-usage threshold

display power

display transceiver

display transceiver diagnosis interface

display temperature

display version

Huawei CE, APE, PE, P

PHPExcel Nasıl Kurulur

 PHP sayfanızın çıktısını excel dosyasına dönüştürmek istiyorsanız bunu kolayca ve sorunsuzca yapmanın bir yoluda PHPExcel kullanmaktır. Özellikle Türkçe karekterlerde sorun yaşamak istemiyorsanız donüştürdüğünüz dosyanın Excel 2007 ve sonrası bir sürüm olması gerekir. Excel 2006 ve önceki sürümlerinde xls formatı UTF-8 desteklemediğinden PHP standart kütüphanesi ile dosya oluşturmaya çalıştığınızda dosya da Türkçe karekterlerle ilgili sorun yaşayabilirsiniz. Bu sorunu aşmanın bir yolu var bunu daha önce yazmıştık fakat PHPExcel kullanarak XLSX dosyası oluşturduğumuzda herhangi bir karekter sorunu yaşamayız. İlk olarak siteden dosyaları indirmeliyiz.

https://github.com/PHPOffice/PHPExcel

Sisteminizin aşağıdaki durumları desteklediğinden emin olun.

* PHP versiyon 5.2.0 veya daha yüksek versiyon kullanmalısınız. 

* PHP extension php_zip yüklü olmalı

* PHP extension php_xml yüklü olmalı

* PHP extension php_gd2 yüklü olmalı


PHP Excel Nasıl Yüklenir. 

-------------------------

Tüm dosyaları yukarıda verdiğimiz linkten indirin.

Bilgisayarımızda root alanının /var/www/ olduğunu varsayalım. Bu bir linux dizinidir. Windows kullanıyorsanız bu dizini kendinize göre değiştirin. Ör: D:\XAMPP\htdocs gibi.

İndirdiğiniz klasördeki Classes klasörünü aşağıdaki gibi dizine kopyalayın.

/var/www/Classes/

/var/www/Classes/PHPExcel.php

/var/www/Classes/PHPExcel/Calculation.php

/var/www/Classes/PHPExcel/Cell.php


Test edin

---------------

İndirdiğiniz klasördeki Examples klasörünüde root dizinine kopyalayın.

/var/www/Examples/01simple.php

/var/www/Examples/02types.php

Yukarıda adı geçen dosyaları aşağıdaki gibi çalıştırın.

http://example.com/Examples/01simple.php

http://example.com/Examples/02types.php

Çalıştırdığınızda dosyanın bulunduğu dizinde yeni excel dosyası oluşacaktır. Örnekler içinde download edilebilir excel oluşturan scriptlerde bulunmaktadır.

Çalıştırdığınız dosyada hatalar alıyorsanız bu hatalar büyük bir ihtimalle dosyada bulunan {} karekterlerinden kaynaklanıyordur. Hatayı aldığınız dosyanın ilgili satırına giderek {0} {1} .... şeklinde süslü parantez içinde bulunan tüm sayı ve değişkenleri [0] [1]... şeklinde köşeli paranteze almalısınız.

PHPExcel son sürümü PHPSpreadsheet ismiyle yayınlanmaktadır ve composer ile yüklenebilir.

https://github.com/PHPOffice/PhpSpreadsheet


      

Apache PDO Oracle Bağlantısı

Bu bağlantı için ilk olarak oracle driver'ına sahip olmalısınız. Aşağıdaki kod ile hangi PDO driverlarına sahip olduğunuzu kontrol edebilirsiniz.

<?php

foreach(PDO::getAvailableDrivers() as $driver)

    echo $driver, '\n';

?>

PHP Çıktısı Nasıl Excel Dosyasına Dönüştürülür (Oracle SQL)

 PHP kullanarak oracle database'e bağlanıp bir tabloyu çektikten sonra bu veriyi excel dosyasına yazdırmak istiyorsanız aşağıdaki kodu kullanabilirsiniz. Bu kod Türkçe karekter desteklemez, çıktınız Türkçe karekter içeriyorsa UTF-8 BOM satırını açmanız gerekir.

<?php

error_reporting(E_ALL);
ini_set('display_errors', 'On');

$username = "username";               // Kullanıcı
$password = "password";               // Şifre
$database = "host:1521/NOR";      // Database adresi
 
$connectora = oci_connect($username, $password, $database, 'UTF8');
if (!$connectora) {
    $m = oci_error();
    trigger_error('Could not connect to database: '. $m['message'], E_USER_ERROR);
}

$query = "SELECT * FROM TABLE";  //Sorgu

$parse = oci_parse($connectora, $query);
if (!$parse) {
    $m = oci_error($connectora);
    trigger_error('Could not parse statement: '. $m['message'], E_USER_ERROR);
}
$r = oci_execute($parse);
if (!$r) {
    $m = oci_error($parse);
    trigger_error('Could not execute statement: '. $m['message'], E_USER_ERROR);
}

function filterData(&$str){
    $str = preg_replace("/\t/", "\\t", $str);
    $str = preg_replace("/\r?\n/", "\\n", $str);
    if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}

$fileName = "Dosya_export_".date('Ymd') . ".xlsx";
ob_end_clean();
header('Content-Encoding:UTF-8');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; charset=UTF-8; encoding=UTF-8");
header('Content-Disposition: attachment; filename='.basename($fileName));
header('Content-Transfer-Encoding: binary'); //binary veya ascii
header('Cache-Control: must-revalidate');
header('Cache-Control: max-age=1');
header('Pragma: public');
flush(); 
$developersData = array();

//echo "\xEF\xBB\xBF"; // UTF-8 BOM

while($row = oci_fetch_assoc($parse)){       
$developersData[] = $row;

}
$showColoumn = false;
if(!empty($developersData)) {
  foreach($developersData as $developerInfo) {
if(!$showColoumn) {
  echo implode("\t", array_keys($developerInfo)) . "\n";
  $showColoumn = true;
}
else {

array_walk($developerInfo, 'filterData');
echo implode("\t", array_values($developerInfo)) . "\n";}
  }

exit;
?> 

Huawei Switch ile Bağlantılar Nasıl Birleştirilir

 Switchler arasında bulunan bağlantıların hepsini aynı anda kullanabilmek için bu linkleri birleştirmek gerekir. Linkleri birleştirme işlemine her firma başka bir isim vermiştir ama temelde hepsi aynı işi yapar.

Nic Teaming - Microsoft
Bount - Linux
Ether Channel - Cisco
Port Channel
Eth Trunk - Huawei
Lag - Alcatel
MLT
Bundle - Cisco

Bu ifadelerin hepsi aynı yapıyı işaret eder, sadece protokoller farklı olabilir. Göründüğü gibi Huawei markası için bu teknolojinin adı Eth Trunk'dır. Farklı ekipmanların beraber kullanılabilmesi için IEEE standardı Link Aggregation Control Protocol (LACP) kullanılması önerilir. Şimdi Huawei Access PE ile CE cihazları arasında Ehh-Trunk işleminin nasıl yapıldığına bakalım, iki adet 10G bağlantıyı birleştirip 20G bir bağlantı elde edelim.

Access PE Konfigürasyonu
-----------------------------------------
interface Eth-Trunk10
portswitch
description Switch-L2-interface
port link-type trunk
port trunk allow-pass vlan 111 to 112
mode lacp-static
#
interface GigabitEthernet0/1/1
description Kanal1
undo shutdown
eth-trunk 10
dcn
#
interface GigabitEthernet0/1/2
description Kanal2
undo shutdown
eth-trunk 10
dcn
#
CE Switch Konfigürasyonu
-----------------------------------------
#                                         
interface Eth-Trunk10
description Uplink                     
port link-type trunk                     
port trunk allow-pass vlan 2 to 4094  
mode lacp   
#                                      
interface XGigabitEthernet0/0/1
 description Kanal1           
 eth-trunk 10                             
#                                         
interface XGigabitEthernet0/0/2
 description Kanal2           
 eth-trunk 10                             

Yukarıdaki konfigürasyonda mode lacp komutu yazılmasada her iki cihazda Huawei olduğu için link çalışacaktır, fakat farklı marka ekipmanlar için konfigürasyon yapılacak ise her iki tarafta da LACP protokolü kullanılması önerilir. Bu bağlantıların birleştirilebilmesi için aradaki bağlantıların L1 olması gerektiği unutulmamalıdır (Kablo, Fiber, L1 RL devresi vb...)

Eht-Trunk interface'lere sub interfaceler eklenebilir, bu interfacelerin konfigürasyon anlamışda fiziksel interfacelerden bir farkı yoktur.

Eth-Trunk bağlantısı altında ikiden çok interface de kullanabilirsiniz. Fiziksel interface altına eth-trunk 10 yazdığınızda bu interface Eth-Trunk grubuna katılmış olur.


Alcatel / Nokia OLT Komutları

 Alcatel / Nokia OLT cihazlarında problem tespiti ve çözümü için aşağıdaki sık tercih edilen komutlar kullanılır. Gpon bağlantılarda sorun giderme komutları;

Vlan 1002

Port 1/1/2/1/1/1/1

Örnek komutlar;

show service service-using | match 1002 (Servis Durumu)

show vlan current-15min-stats port 1/1/2/1/1/1/1 1002 detail (Veri alışverişini görmek için kullanılır.)

show equipment ont operational-data 1/1/2/1/1 (Operasyonel Durum)

show equipment ont optics 1/1/2/1/1 (Optik sinyal seviyesi)

show equipment ont interface 1/1/2/1/1 detail (Detaylı Interface Bilgisi)

show ethernet ont operational-data 1/1/2/1/1/1/1 (Link durumu kontrolü)

show vlan bridge-port-fdb 1/1/2/1/1/1/1 (Porttaki mac adres listesini görmek için)

info configure vlan id 3002 flat (Kullanılan QoS)

info configure qos interface 1/1/2/1/1/1/1 (QoS Ayrıntılı konfigürasyon)

info configure bridge port 1/1/2/1/1/1/1 flat (Port altında tanımlı Vlan'lar)

info configure ethernet detail flat (Ethernet ayrıntılı konfig)

info configure service flat (VPLS konfigürasyonları)

 Alcatel / Nokia OLT 

Python ile Oracle Veri Tabanına Veri Yazma

 Python Oracle modulü ile aşağıdaki kodu kullanarak Oracle veri tabanına veri girişi yapabilirsiniz. Bu uygulamada bir fonksiyon gönderilen SQL sorgusunu çalıştırmaktadır. Bu fonksiyon ile farklı SQL sorguları da çalıştırabilirsiniz.


import cx_Oracle


def InservDB(inserquery):
    try:
        conn = cx_Oracle.connect('username/Password@hostname:1521/NOR')
        cursor = conn.cursor()
        cursor.execute(inserquery)
        #cursor.executemany(inserquery)
        conn.commit()
        cursor.close()
        conn.close()
        return 0
    except ValueError:
        print("Database bağlantısı sağlanamıyor...")

inserquery = "insert into Tablo_adı(Sutun1, Sutun2, Sutun3) values(1,2,3)"
InsertDB(inserquery)

Oracle SQL Sorgusunu Python script ile çalıştırma.

Python Oracle Database Bağlantısı

 Python ile Oracle veri tabanına bağlanmak için ilk olarak Pyhon oracle modülünü yüklemeniz gerekmektedir. Python Oracle kütüphanesinin adı cx_Oracle dır. Bu kütüphaneyi pip ile yükleyin.

pip install cx_Oracle

Modülü kurduktan sonra oracle sitesinden driverları indirip bilgisayarınıza kopyalayın. 

64 bit

https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

32 bit

https://www.oracle.com/database/technologies/instant-client/microsoft-windows-32-downloads.html

Yazdığınız koda Oracle modülünü import edin ve driver'ı bir defaya mahsus gösterin.

import cx_Oracle

cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_19_11")

Şimdi connect() fonksiyonunu kullanarak Python programı ile Oracle veritabanı arasında bir bağlantı kurun.

con = cx_Oracle.connect('username/password@localhost')

Bir SQL sorgusu yürütmek ve sonuç sağlamak için, cursor() nesnesi gerekir.

cursor = conn.cursor()

Daha sonra komutları işleteceğiniz bölümü oluşturun.

cursor.execute(sqlquery) – – – -> tek bir sorgu yürütmek için.

cursor.executemany(sqlqueries) – – – -> birden çok bağlama değişkeni/yer tutucu ile tek bir sorgu yürütmek için.

Tüm işlemler tamamlandıktan sonra tüm işlemlerin kapatılması zorunludur.

cursor.close()

con.close()

Örnek Kod

# importing module
import cx_Oracle
 # Create a table in Oracle database
try:
     con = cx_Oracle.connect('tiger/scott@localhost:1521/xe')
    print(con.version)
 
    # Now execute the sqlquery
    cursor = con.cursor()
 
    # Creating a table employee
    cursor.execute("create table employee(empid integer primary key, name varchar2(30), salary number(10, 2))")
 
    print("Table Created successfully")
 
except cx_Oracle.DatabaseError as e:
    print("There is a problem with Oracle", e)
 
# by writing finally if any error occurs
# then also we can close the all database operation
finally:
    if cursor:
        cursor.close()
    if con:
        con.close()

Oracle Komutlar

 Karekter kırpma:

select substr('Kolon_ismini_bu_alana_yazabilirsiniz',1,20) from dual

Oracle'da karekter veya rakam yakalama

select regexp_replace('stack12345overflow569', '[^0-9]', '') as numbers,

       regexp_replace('Stack12345OverFlow569', '[^a-z and ^A-Z]', '') as characters

from dual

Değerin içinde sayı arayıp integer haile çevirme;

to_number(regexp_substr('100 Mbps devre', '(\d+) Mbps', 1, 1, NULL, 1))

Oracle Database'de bir tabloyu kalıcı olarak silmek için;

SQL Tablo Silme:

DROP TABLE TABLO_İSMİ PURGE

COMMIT;

Sunucuya bağlanan cihazın IP adresini gösterme

SELECT sys_context ('USERENV', 'IP_ADDRESS') FROM DUAL

Tablo değişiklik zamanı: Tabloda en son değişikliğin hangi zamanda yapıldığını verir.

select max(ora_rowscn), scn_to_timestamp(max(ora_rowscn)) from Table_Name





Apache Yazılım Upgrade (XAMMP)

 XAMMP sunucusu içinde bulunan apache yazılımını upgrade etmek için ilk olarak apache yazılımının yeni sürmünü aşağıdaki adresten indirmelisiniz. Apache'nin birçok sürümü var Xammp sunucusu için en uygun sürüm bu linkte bulunan sürümdür.

https://www.apachelounge.com/download/ 

Sürümü indirdikten sonra apache servisini durdurun. Eski apache klasörünün adını değiştirin, sakın silmeyin. İndirdiğiniz apache klasörünü açın ve içindeki apache klasörünü çıkartıp eski klasör yerine aynı ad ile koyun.Klasör ismi/bin şeklinde olmalı. sonra config klasörü içindeki konfigürasyonu yeni klasöre geçirin. Son olarakta yüklediğiniz modüller varsa o modül dosyalarını yeni klasöre aktarın ve servisi başlatın.

Google