Constant FILTER_SANITIZE_STRING is deprecated hatası çözümü

FILTER_SANITIZE_STRING filtresi PHP 8.1 ve üstü sürümlerde kaldırıldı. Bunun yerine FILTER_SANITIZE_FULL_SPECIAL_CHARS filtresini kullanabilirsiniz.

Örnek Kullanım:

function sqlFilter($value ,$status = true)
{
	if ($status) {
		return filter_var($value, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
	} else {
		return $value;
	}
}

Txt Dosyasını Veritabanı Olarak Kullanmak

<?php
// Verileri okuyan ve şifresini çözen fonksiyon
function oku($fileName, $secretKey, $encryptionMethod)
{
    $fileContent = file_get_contents($fileName);
    $fileData = json_decode($fileContent, true);

    $iv = base64_decode($fileData['iv']);
    $decryptedData = openssl_decrypt(base64_decode($fileData['data']), $encryptionMethod, $secretKey, 0, $iv);

    return json_decode($decryptedData, true);
}
// Verileri yazan ve şifreleyen fonksiyon
function yaz($fileName, $data, $secretKey, $encryptionMethod)
{
    $jsonData = json_encode($data);

    $ivLength = openssl_cipher_iv_length($encryptionMethod);
    $iv = openssl_random_pseudo_bytes($ivLength);

    $encryptedData = openssl_encrypt($jsonData, $encryptionMethod, $secretKey, 0, $iv);

    $encryptedFileContent = json_encode([
        'data' => base64_encode($encryptedData),
        'iv' => base64_encode($iv),
    ]);

    file_put_contents($fileName, $encryptedFileContent);
}
//VERİTABANI BAĞLANTI
$fileName = 'lisanslar.txt'; // tablo adı
$secretKey = "Alp123*_.";
$encryptionMethod = "AES-256-CBC";
//OKUMA - SELECT
$data = oku($fileName, $secretKey, $encryptionMethod);
print_r($data);
//YAZMA - INSERT
$data[] = ["name" => "Alperen", "price" => 1000];
writeData($fileName, $data, $secretKey, $encryptionMethod);
//SİLME - DELETE
$id = 0; //dizi index no
unset($data[$id]);
$data = array_values($data);
writeData($fileName, $data, $secretKey, $encryptionMethod);
//GÜNCELLEME - UPDATE
$id = 0;//güncellenecek veri id
$name= "Mehmet"; //yeni isim
$data[$id]['name'] = $name;
writeData($fileName, $data, $secretKey, $encryptionMethod);
 

Php ve Yapay Zeka İle Kullanıcı Adı Kontrolü. Prompt Tasarım by Tayfun Erbilen

<?php
class ChatApp {
    private $model= "gpt-3.5-turbo-0301";
    private $messages= array();
    public $api_key;
    public function chat($message) {
        $prompt_messages[] = array("role" => "system", "content" => '
			Sen sadece JSON çıktı yazabilen ve kullanıcı adlarını denetleyen bir uzmansın.
			- kullanıcı adı siyasi, dini, ırkçı, hakaret içeremez.
			- kullanıcı adı rastgele bir değer olamaz.
			- kullanıcı adı anlamsız bir değer olamaz.
			- kullanıcı adı, yönetici gibi anlaşılacak isimler olamaz.
			- kullanıcı adı küfür içeremez, küfüre benzer diğer değerler
			içeremez.
			kullanıcı adlarında türkçe karakterler olmadığı için bazı
			küfürler örneğin ”oç" farklı şekillerde gelebilir. Örneğin ”oc”
			gibi, bunları düşünerek mantıklı bir filtreleme yap.
			eğer yukarıdaki koşullara göre uymayan bir kullanıcı adı
			girilmişse JSON formatında success: false ve reason içinde
			sebebini döndür.
			eğer bir sorun yoksa success: true döndür.			
			JSON formatı hariç hiçbir veri döndürme.
			Açıklama yazma sadece json sonucunu döndür.
			örneğin 
			{
			  "success": false,
			  "reason": "Kullanıcı adı küfür içeremez veya küfre benzer değerler içeremez."
			}
			veya
			{
			  "success": true,
			}
			döndürmen yeterli.
		');
        $prompt_messages[] = array("role" => "user", "content" => $message); 
        $post_fields = array(
            "model" => $this->model,
            "messages" => $prompt_messages
        );
        $header = array(
            'Content-Type: application/json',
            'Authorization: Bearer ' . $this->api_key
        );
        $ch = curl_init();
        $url = 'https://api.openai.com/v1/chat/completions';
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_fields));
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Error: ' . curl_error($ch);
        }
        curl_close($ch);
        $response = json_decode($result, true);
        $assistant_message = $response["choices"][0]["message"]["content"];
        return $assistant_message;
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>Kayıt Form</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <h1>Kayıt Ol</h1>
        <form method="POST" action="">
            <div class="form-group">
                <label for="username">Kullanıcı:</label>
                <input type="text" class="form-control" id="username" name="username" placeholder="Kullanıcı adınızı girin.">
            </div>
            <button type="submit" class="btn btn-primary">Kayıt GPT</button>
        </form>
    </div>
    <?php
    if (isset($_POST["username"])){
        $username = $_POST["username"];
        $chatApp = new ChatApp();
        $chatApp->api_key = "sk-lyaikhPwDdeneme1234567"; // bunu kendiniz değiştirin
        $response = $chatApp->chat($username);		
        $is_valid_json = (json_decode($response) !== null);
        if ($is_valid_json) {
			$result=json_decode($response,true);
			if($result["success"]==true){
				echo "<div class='container mt-3'>";
				echo "<div class='alert alert-success'>".$_POST["username"]." Kullanıcı adı kurallara uygun.</div>";
				echo "</div>";
			}elseif($result["success"]==false){
				echo "<div class='container mt-3'>";
				echo "<div class='alert alert-danger'>".$_POST["username"]." ".$result["reason"]."</div>";
				echo "</div>";			
			}
        }
    }
    ?>
</body>
</html>

Php Twitter Api v2 ve Oauth1.0a Sınıfı – Tweet API 2023

<?php
session_start();
define("CONSUMER_KEY", "iybjF4ucDqQ9VeSJm0....");
define("CONSUMER_SECRET", "xhLbOYuQyGSE2DyrAfpwgQ4o40Z1tgq0eh07CEcAPG....");
define("OAUTH_TOKEN", "1580647705633869826-YHuT8vIGTkZCMZRDVz5IUYN.....");
define("OAUTH_TOKEN_SECRET", "kYq4PFeCHHVkjjTw6xC47q7TJDvCBQDTqyMBb....");
define("OAUTH_CALLBACK", "http://localhost:80/callback.php");
class API{
    protected $consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret;
    protected $apiUrl = 'https://api.twitter.com/';
    protected $apiStandardUrl = 'https://api.twitter.com/1.1/';
    protected $apiUploadUrl = 'https://upload.twitter.com/1.1/';
    protected $oauth = [];
    public function __construct($consumer_key, $consumer_secret, $oauth_token = false, $oauth_token_secret = false){
        $this->consumer_key = $consumer_key;
        $this->consumer_secret = $consumer_secret;
        $this->oauth_token = $oauth_token;
        $this->oauth_token_secret = $oauth_token_secret;
        if ($oauth_token == false && $oauth_token_secret == false) {
            $this->oauth = [
                'oauth_consumer_key' => $this->consumer_key,
                'oauth_nonce' => time(),
                'oauth_signature_method' => 'HMAC-SHA1',
                'oauth_timestamp' => time(),
                'oauth_version' => '1.0',
            ];
        } elseif ($oauth_token !== false && $oauth_token_secret == false) {
            $this->oauth = $oauth_token;
        } else {
            $this->oauth = [
                'oauth_consumer_key' => $this->consumer_key,
                'oauth_nonce' => time(),
                'oauth_signature_method' => 'HMAC-SHA1',
                'oauth_token' => $this->oauth_token,
                'oauth_timestamp' => time(),
                'oauth_version' => '1.0',
            ];
        }
    }
    protected function buildAutheaders($oauth){
        $headers = 'Authorization: OAuth ';
        $values = [];
        foreach ($oauth as $key => $value) {
            $values[] = "$key=\"" . rawurlencode($value) . "\"";
        }
        $headers .= implode(', ', $values);
        return $headers;
    }
    protected function buildBearerheaders($oauth){
        $headers = 'Authorization: Bearer ' . $oauth;
        return $headers;
    }
    protected function buildString($method, $url, $params){
        $headers = [];
        ksort($params);
        foreach ($params as $key => $value) {
            $headers[] = "$key=" . rawurlencode($value);
        }
        return $method . "&" . rawurlencode($url) . '&' . rawurlencode(implode('&', $headers));
    }
    protected function buildSignature($baseInfo){
        $encodeKey = rawurlencode($this->consumer_secret) . '&' . rawurlencode($this->oauth_token_secret);
        $oauthSignature = base64_encode(hash_hmac('sha1', $baseInfo, $encodeKey, true));
        return $oauthSignature;
    }
    protected function getSignature($method, $url, $params = false){
        $oauth = $this->oauth;
        if ($params == false) {
            $baseInfo = $this->buildString($method, $url, $oauth);
            $oauth['oauth_signature'] = $this->buildSignature($baseInfo);
        } else {
            $oauth = array_merge($oauth, $params);
            $baseInfo = $this->buildString($method, $url, $oauth);
            $oauth['oauth_signature'] = $this->buildSignature($baseInfo);
        }
        return $oauth;
    }
	protected function reqCurl($method = 'GET', $url, $params = false, $headers = false, $postfields = false, $userpwd = false){
        $ch = curl_init();
        if ($params == false) {
            curl_setopt($ch, CURLOPT_URL, $url);
        }
        if ($params == true) {
            curl_setopt($ch, CURLOPT_URL, $url . "?" . http_build_query($params));
        }
        if ($method == 'POST') {
            curl_setopt($ch, CURLOPT_POST, true);
        }
        if ($method == 'DELETE') {
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
        }
        if ($postfields == true) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
        }
        if ($headers == true) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }
        if ($userpwd == true) {
            curl_setopt($ch, CURLOPT_USERPWD, $this->consumer_key . ':' . $this->consumer_secret);
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $result = curl_exec($ch);
        return $result;
    }
    protected function request2($method, $req, $params = false){
        $req = substr($req, 1);
        $url = $this->apiUrl . $req;
        if ($this->oauth_token !== false && $this->oauth_token_secret == false) {
            $oauth = $this->buildBearerheaders($this->oauth);
            $headers = [];
            $headers[] = $oauth;
        } else {
            $oauth = $this->getSignature($method, $url);
            $headers = [];
            $headers[] = 'Content-type: application/json';
            $headers[] = $this->buildAutheaders($oauth);
        }
        $result = $this->reqCurl($method, $url, null, $headers, $params);
        return json_decode($result, true);
    }
    public function request($method, $req, $params = false){
        $method = strtoupper($method);
        if ($req == 'media/upload') {
            return $this->upload($method, $req, $params);
        }
        $version = explode('/', $req);
        if ($version[0] == '2') {
            $req = "/$req";
            return $this->request2($method, $req, $params);
        }
        if ($version[1] == '2') {
            return $this->request2($method, $req, $params);
        }
        if ($version[0] == 'labs') {
            $req = "/$req";
            return $this->request2($method, $req, $params);
        }
        if ($version[1] == 'labs') {
            return $this->request2($method, $req, $params);
        }
        $url = $this->apiStandardUrl . $req . ".json";
        if ($this->oauth_token !== false && $this->oauth_token_secret == false) {
            $oauth = $this->buildBearerheaders($this->oauth);
            $headers = [];
            $headers[] = $oauth;
        } else {
            $oauth = $this->getSignature($method, $url, $params);
            $headers = [];
            $headers[] = $this->buildAutheaders($oauth);
        }
        $result = $this->reqCurl($method, $url, $params, $headers, null);
        return json_decode($result, true);
    }
    protected function reqUpload($method, $req, $params){
        $url = $this->apiUploadUrl . $req . ".json";
        $oauth = $this->getSignature($method, $url);
        $headers = [];
        $headers[] = $this->buildAutheaders($oauth);
        $headers[] = 'Content-Type: multipart/form-data';
        $result = $this->reqCurl($method, $url, null, $headers, $params);
        return json_decode($result, true);
    }
    protected function uploadChunked($req, $params){
        $_params = [
            'command' => 'INIT',
            'total_bytes' => filesize($params['media']),
            'media_type' => $params['media_type'],
        ];
        if (isset($params['additional_owners'])) {
            $_params['additional_owners'] = $params['additional_owners'];
        }
        if (isset($params['media_category'])) {
            $_params['media_category'] = $params['media_category'];
        }
        $req = $this->reqUpload('POST', 'media/upload', $_params);
        $fp = fopen($params['media'], 'r');
        $segment_id = 0;
        while (!feof($fp)) {
            $chunk = fread($fp, 40960);
            $__params = [
                "command" => "APPEND",
                "media_id" => $req['media_id'],
                "segment_index" => $segment_id++,
                'media_data' => base64_encode($chunk),
            ];
            $this->reqUpload('POST', 'media/upload', $__params);
        }
        fclose($fp);
        $lastParams = array(
            "command" => "FINALIZE",
            "media_id" => $req['media_id'],
        );
        $result = $this->reqUpload('POST', 'media/upload', $lastParams);
        return $result;
    }
    public function upload($method, $req, $params){
        if ($method == 'GET') {
            return "METHOD MUST BE POST";
        }
        $url = $this->apiUploadUrl . $req . ".json";
        $c = count($params);
        if ($c == 1 && isset($params['media'])) {
            $filename = file_get_contents($params['media']);
            $base64 = base64_encode($filename);
            $_params = ['media_data' => $base64];
            return $this->reqUpload('POST', 'media/upload', $_params);
        } elseif ($c == 1 && isset($params['media_data'])) {
            $base64 = $params['media_data'];
            $_params = ['media_data' => $base64];
            return $this->reqUpload('POST', 'media/upload', $_params);
        } else {
            return $this->uploadChunked($req, $params);
        }
    }
    public function file($oauthUrl){
        $oauth = $this->getSignature("GET", $oauthUrl);
        $headers = [];
        $headers[] = $this->buildAutheaders($oauth);
        $result = $this->reqCurl("GET", $oauthUrl, null, $headers, null);
        return $result;
    }
    public function oauth($req, $params){
        $url = $this->apiUrl . $req;
        $oauth = $this->getSignature("POST", $url, $params);
        $headers = [];
        $headers[] = $this->buildAutheaders($oauth);
        $result = $this->reqCurl("POST", $url, $params, $headers, null);
        parse_str($result, $arr);
        return $arr;
    }
    public function url($req, $params){
        $url = $this->apiUrl . $req . "?" . http_build_query($params);
        return $url;
    }
    public function oauth2($req, $params){
        $url = $this->apiUrl . $req;
        $result = $this->reqCurl("POST", $url, $params, null, null, true);
        return json_decode($result, true);
    }
}
// ÖRNEK TWEET ÇEKME
$conn = new API(CONSUMER_KEY, CONSUMER_SECRET);
$params = ['grant_type' => 'client_credentials'];
$bearerToken = $conn->oauth2('oauth2/token', $params);
$conn2 = new API(CONSUMER_KEY, CONSUMER_SECRET, $bearerToken['access_token']);
$res = $conn2->request('GET', '/2/users/by/username/senggolbaok');
print_r($res);
// ÖRNEK TWEET ATMA
$conn = new API(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET);
$postfields = "{\"text\":\"Merhaba Dünya\"}";
$res = $conn->request('POST', '/2/tweets', $postfields);
print_r($res);

Kaynak: composer require ferrysyahrinal/twifer

Php ile Chatgpt yapay zeka sohbet botu sorgulama ve geçmişi hafızaya alarak cevap verme

<?php
class ChatApp {
    private $model;
    private $messages;
    public $api_key;
    public function __construct($model = "gpt-3.5-turbo", $load_file = "") {
        $this->model = $model;
        $this->messages = array();
        if ($load_file != '') {
            $this->load($load_file);
        }
    }
    public function chat($message) {
        if ($message == "exit") {
            $this->save();
            exit();
        } elseif ($message == "save") {
            $this->save();
            return "(saved)";
        }
        $this->messages[] = array("role" => "user", "content" => $message);
        $post_fields = array(
            "model" => $this->model,
            "messages" => $this->messages
        );
        $header = array(
            'Content-Type: application/json',
            'Authorization: Bearer ' . $this->api_key
        );
        $ch = curl_init();
        $url = 'https://api.openai.com/v1/chat/completions';
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_fields));
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Error: ' . curl_error($ch);
        }
        curl_close($ch);
        $response = json_decode($result, true);
        $assistant_message = $response["choices"][0]["message"]["content"];
        $this->messages[] = array("role" => "assistant", "content" => $assistant_message);
        return $assistant_message;
    }
    public function save() {
        try {
            $ts = time();
            $json_object = json_encode($this->messages, JSON_PRETTY_PRINT);
            $filename_prefix = preg_replace('/[^0-9a-zA-Z]+/', '-', substr($this->messages[0]["content"], 0, 30));
            $filename = "chat_model_" . $filename_prefix . "_" . $ts . ".json";
            file_put_contents($filename, $json_object);
        } catch (Exception $e) {
            exit();
        }
    }
    public function load($load_file) {
        $json_data = file_get_contents($load_file);
        $this->messages = json_decode($json_data, true);
    }
}
//Not: Bu sınıf yüksek ücretlere sebep olabilir.
$chatApp = new ChatApp();
$chatApp->api_key="sk-lyaikhPwD73bPVtUMO5FT3BlbkFJ"; // OpenAI API anahtarını buraya girin
//Yazışma geçmişi
$assistant_message = $chatApp->chat("Merhaba, nasılsın?");
$assistant_message = $chatApp->chat("Hava durumu hakkında bilgi verir misin?");
$assistant_message = $chatApp->chat("Konya");
//Sonuç
echo $assistant_message;
/* Çıktısı
Tamam, şu anda Konya'da hava durumu nasıl diye bakayım. Konya' da hava parçalı bulutlu olarak devam ediyor. Sıcaklık ise yaklaşık 16 derece civarında. Bugün için yağış beklenmiyor. Ancak yarın öğleden sonra hafif yağmur tahmini yapılmaktadır.
*/
// Çıkış yapmak istediğinizde "exit" komutunu kullanabilirsiniz
$chatApp->chat("exit");
?>

Xampp Php 7.4 x86 32bit VC15

 XAMPP for Windows 7.4.29 sürümü 64 bit olduğundan sizlere 32 bitlik sürümünü hazırladım.

  • Apache/2.4.38 (Win32) OpenSSL/1.1.1a PHP/7.4.29
  • Veritabanı istemcisi sürümü: libmysql – mysqlnd 7.4.29
  • PHP uzantısı: mysqli  curl  mbstring 
  • PHP sürümü: 7.4.29
  • Sunucu sürümü: 10.1.38-MariaDB – mariadb.org binary distribution
  • phpMyAdmin Sürüm bilgisi: 5.2.0
<?php //32bit
$whitelist = array('127.0.0.1','::1');
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
  $mysqli= @new mysqli("localhost","root","");
}
?>

Tıkla İndir 203MB

Phpmyadmin Güncellemesi İndir 13MB

Mysql Sıradaki Atlanmış Boş Otomatik Id Numaralarını Bulma

Bazen auto increment kullanırken aradan veriler silinebiliyor. Bu şekilde bir kullanım ile tekrar boş idleri doldurabilirsiniz

SELECT t1.id+1 AS siradaki FROM urun AS t1 WHERE 0=(SELECT COUNT(t2.id) FROM urun AS t2 WHERE t2.id=t1.id+1 order by t2.id asc) order by t1.id asc LIMIT 1

Yukarıdaki örnekte urun adlı tablodaki id sütununa göre arama yapar ve sıradaki boş id leri çağırır.

Örneğin 1,2,3,5,6 gibi bir veride 4 sonucunu verir.

SELECT t1.id+1 AS siradaki FROM urun AS t1 WHERE 0=(SELECT COUNT(t2.id) FROM urun AS t2 WHERE t2.id>=t1.id+1 and t2.id<=t1.id+21 order by t2.id asc) and t1.id>1000 order by t1.id asc LIMIT 1

Yukarıdaki örnekte urun adlı tablodaki id sütununa göre arama yapar,1000 nolu id’den büyük ve arada 20 adet ardışık boş id bulunan değerleri döndürür.

Örneğin 1025,1028,1030,1051 gibi bir veride 1031 sonucunu verir

Phpmyadmin Binary Veriyi Utf8 Görüntüleme

$result = bin2hex($content);
$result = pack('H*', $result);
$result = mb_convert_encoding($result, "UTF-8","ISO-8859-9");
$result = htmlspecialchars($result);

phpMyAdmin\libraries\classes\Display\Results.php içerisinde yaklaşık 5000.satırda handleNonPrintableContents fonksiyonu içerisindeki bin2hex fonksiyonunun olduğu satırı yukarıdaki şekilde değiştirin.

Phpmyadmin root şifresi oluşturma

Phpmyadmin sql kısmından aşağıdaki kodu girdiğiniz zaman şifreniz mysql olacaktır.

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mysql');
FLUSH PRIVILEGES;

Daha sonra phpmyadmin dosyalarının kurulu olduğu dizinden config.inc.php dosyasında bu satırı şifreniz ile değiştiriniz.

$cfg['Servers'][$i]['password'] = 'mysql';