v2.5.2
Giriş yap

Fonksiyon ile Post ( PHP )

rennie
660 defa görüntülendi

Selamlar...

<a href="javascript:ServerRestart();"><span class="orange">Restart</span></a>

Bu şekilde bir yapı var. Yapmak istediğim olay şu:
Click yaptığım zaman

function ServerRestart(){
    alert("UYARI: Tebrikler, sunucunuz yeniden başlatıldı. Başlama süresi max: 10 saniyedir.");
}

Bu fonksiyon çalışacak ama "alert" öncesi farklı bir sayfaya bilgi göndermem lazım. Yani restart komutunu.
Oda bu komut:

$Restart = "screen -dr $who -X quit; sleep 1;

Click işlemi a.php ' de
Restart işlemi b.php ' de

Son olarak kişi 2. kez restart yapmak istediğinde 5 dakika beklemelisin uyarısı çıkması gerek. Biraz karışık oldu ama bunu nasıl yapabilirim ?

ersiin
1157 gün önce
<?php
session_start();
function kacDKOldu( $tarih ){
    try {    
        $date1 = new DateTime( date('Y-m-d H:i:s') );
        $date2 = new DateTime( $tarih );
 
        $interval = $date1->diff( $date2 );
 
        $result = $interval->format('%i');  
        $result = preg_replace('/\b0+\s+[a-zA-Z-ıü]+,?\s*/is','',$result);
         
        return $result;
    } catch (Exception $e) {    
        return false;
    }       
}

if($_SESSION){
if($_SESSION["tiklamazamani"]==""){
    $date = "";
}else{
	$zaman = $_SESSION["tiklamazamani"];
    $date = kacDKOldu($zaman);
}
}

if($_GET){
    if($_GET["action"]=="serverrestart"){
        if($date=="" || $date > 5){
        			//bu alandaki kodlar sadece ilk tıklama yapıldığında çalışır.
        			//ikinci bir tıklamada çalışması için tıklama üzerinden 5dk geçmesi gerekir.
                    //php kodların
        	
            $_SESSION["tiklamazamani"] = date('Y-m-d H:i:s');
        }else{
        	$gecenzaman = kacDKOldu($zaman);
        	$kalanzaman = 5 - $gecenzaman;
        	if($gecenzaman=="0"){
        		setcookie("restartmesaji", "Tıklama üzerinden henüz birkaç saniye geçti. $kalanzaman dakika sonra yeniden deneyin. ");
        	}else{

        		if($gecenzaman=="5"){
        			setcookie("restartmesaji", "Tıklama yapabilmeniz için birkaç saniye kaldı.");
        		}else{
        	setcookie("restartmesaji", "Tıklama üzerinden henüz $gecenzaman dakika geçti. $kalanzaman dakika sonra yeniden deneyin. ");
        }
        }
        }
     
    }
}
?>
<script type="text/javascript">
	function getCookie(cname) {
  let name = cname + "=";
  let decodedCookie = decodeURIComponent(document.cookie);
  let ca = decodedCookie.split(';');
  for(let i = 0; i <ca.length; i++) {
    let c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}
	function ServerRestart() {
  var baglan = new XMLHttpRequest();
  baglan.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
var response = this.responseText;
let restartmesaji = getCookie("restartmesaji");
 if (restartmesaji != "") {
alert(getCookie("restartmesaji"));
}

        }
  }
  baglan.open("GET", "sayfaadi.php?action=serverrestart", true);
  baglan.send();
}

</script>
<a href="nojavascript...ServerRestart();"><span class="orange">Restart</span></a>

//php kodların kısmına, yazmak istediğin komut vs. şeyleri yazabilirsin yine.
Zaman değerini cookieye atarsak kullanıcı cookieyi değiştirerek sistemi kandırabilir diye session'a atadım. Mesajı cookieye atama nedenim de js tarafında da cookieye erişmek ve js ile alert etmek.
response text'i kullanmadım çünkü aynı sayfa içerisinde hem php hem js yani html kullandığımız için response text'e tüm page döndürülecekti.
5 dakika geçmeden 2. tıklamayı kabul etmemek için bunu kullanabilirsin, kolay gelsin. Biraz karmaşık ama anlayacaksın eminim :)
"sayfaadi.php?action=serverrestart" kısmını, kodu yazdığın sayfa adı ile değiştirip direkt kopyalayıp yapıştırabilirsin tüm kodu. Çalışıyor.

Kaynaklar

İki tarih arasındaki farkı bulmak için yararlandığım kaynak: https://www.vyz.gen.tr/php-ile-kac-dakika-once-yazildi
JavaScript cookie için yararlandığım kaynak: https://www.w3schools.com/js/js_cookies.asp