Php URL ändern wie href?


12.01.2020, 23:20

Der Quellcode:

<?PHP
$file = "ip_log.txt";
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$content = @file_get_contents($file);
$new_content = $ip." = ".$time;
$content .= $new_content."\r\n";
@file_put_contents($file,$content);


$users = @parse_ini_file($file);
$count = 0;
foreach($users as $ip=>$time){
	if($time >= time() - 1){
		$count++;
	}
}
?>


<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <title> IP TOOLS | UCP LuGaming</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <meta name="viewport" content="width=device-width">
    <style type="text/css">
        body{ font: 14px sans-serif; text-align: center; }
    </style>
		<div class="page-header">
				<h1>IP Tools</h1>
		</div>
</head>
<body>
	<div id="ip">
		<iframe src="ip_log.txt" width="100%" height="100%" frameborder="2%"></iframe>
	</div>
		<br><a href="?aktion=clear_log" class="btn btn-danger">LOG leeren</a>
	<style>
#ip {
	position: relative;
	top: -20px;
	left: 0%;
}
	</style>
	<div id="user_online">
		Es sind <?php echo $count ?> IP Adressen, am <?php echo(date("d m Y",$time)) ?> um <?php echo(date("H:i:s",$time)) ?> Uhr Online.
	</div>
</body>
		<br><a href="admin.php" class="btn btn-danger">Zurück</a>
</html>


<?php
  $fileArray = array();
  foreach (glob("./ip_log.txt") as $filename) {
    $diff = time() - fileatime($filename); // fileatime liefert den Unixtimestamp des letzten Zugriffs auf eine Datei
    if($diff > 3600) // 3600 = 60 sec * 60 min
    {
      unlink($filename);
  }
}
?>


<?php
$fileArray = array();
foreach (glob("./ip_log.txt") as $filename) {
$diff = time() - fileatime($filename);
        if (isset($_GET['aktion']) and $_GET['aktion']=='clear_log') {
    unlink($filename);
unset($_GET["clear_log"]);


}
exit;
}
?>

//Created by LuGaming
//Klaut diesen Code nicht, es stecken 12 Stunden Arbeit drinne

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Dann leite noch nach Verarbeitung des Requests den Nutzer wieder auf die Startseite weiter.

header("Location: https://www.example.com");
Woher ich das weiß:Berufserfahrung
verreisterNutzer  12.01.2020, 22:57

Dann steht dort header alwasy sent

0
threadi  12.01.2020, 23:05
@verreisterNutzer

Das bezweifle ich. Wenn dann steht dort "Header already sent". D.h. du hast vor der header()-Funktion irgendeine andere Ausgabe. Da Du uns deinen Quellcode nicht genannt hast, kann man das nicht mal erahnen. Daher kann man deine Frage auch nicht genauer beantworten.

0
verreisterNutzer  12.01.2020, 23:17
@threadi

Bitte klaut den Code nicht, Ich saß da fast 12 Std dran

<?PHP
$file = "ip_log.txt";
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$content = @file_get_contents($file);
$new_content = $ip." = ".$time;
$content .= $new_content."\r\n";
@file_put_contents($file,$content);


$users = @parse_ini_file($file);
$count = 0;
foreach($users as $ip=>$time){
	if($time >= time() - 1){
		$count++;
	}
}
?>


<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <title> IP TOOLS | UCP LuGaming</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <meta name="viewport" content="width=device-width">
    <style type="text/css">
        body{ font: 14px sans-serif; text-align: center; }
    </style>
		<div class="page-header">
				<h1>IP Tools</h1>
		</div>
</head>
<body>
	<div id="ip">
		<iframe src="ip_log.txt" width="100%" height="100%" frameborder="2%"></iframe>
	</div>
		<br><a href="?aktion=clear_log" class="btn btn-danger">LOG leeren</a>
	<style>
#ip {
	position: relative;
	top: -20px;
	left: 0%;
}
	</style>
	<div id="user_online">
		Es sind <?php echo $count ?> IP Adressen, am <?php echo(date("d m Y",$time)) ?> um <?php echo(date("H:i:s",$time)) ?> Uhr Online.
	</div>
</body>
		<br><a href="admin.php" class="btn btn-danger">Zurück</a>
</html>


<?php
  $fileArray = array();
  foreach (glob("./ip_log.txt") as $filename) {
    $diff = time() - fileatime($filename); // fileatime liefert den Unixtimestamp des letzten Zugriffs auf eine Datei
    if($diff > 3600) // 3600 = 60 sec * 60 min
    {
      unlink($filename);
  }
}
?>


<?php
$fileArray = array();
foreach (glob("./ip_log.txt") as $filename) {
$diff = time() - fileatime($filename);
        if (isset($_GET['aktion']) and $_GET['aktion']=='clear_log') {
    unlink($filename);
unset($_GET["clear_log"]);


}
exit;
}
?>


0
threadi  12.01.2020, 23:21
@verreisterNutzer

Du müsstest die Prüfung, ob aktion als Parameter mitgeschickt wurde am Anfang des Quellcodes einfügen, nicht am Ende. Dann würde die von mir vorgeschlagene header()-Funktion auch funktionieren.

0
regex9  12.01.2020, 23:30
@verreisterNutzer

Das sollten wir jetzt wohl auch als Antwort schreiben: Bitte klaue unsere Lösungsvorschläge nicht, wir saßen da X Minuten dran. 😒

Deine Fehler beginnen schon beim Markup.

  • Ein div gehört nicht in den head (sondern in den body) und die Zeile nach dem schließenden body-Element müsste dadrüber. Verschiebe außerdem alle Styles in das eine style-Element im head.
  • Die Attribute width und height dürfen keine Einheitsangaben bekommen. Setze die Ausmaße stattdessen via CSS, dann darfst du % verwenden. Wirf bei der Gelegenheit das frameborder-Attribut raus und setze den Rahmen stattdessen ebenfalls via CSS (border).

Deine PHP-Blöcke solltest du alle nach oben schieben. Dann würde auch der exit-Aufruf am Ende Sinn machen. Wo du die header-Funktion aufrufst, habe ich noch nicht entdeckt. Aber in der Theorie wäre es hinter diesen beiden Zeilen:

unlink($filename);
unset($_GET["clear_log"]);
// header ...
exit;

Das funktioniert aber nur, wenn die PHP-Blöcke noch vor dem Doctype stehen.

0

Du kannst es per $_POST Methode lösen und dies danach automatisch löschen. Sprich nachdem du es einmal verarbeitet hast, setze den Wert auf 0 und damit hat sich das dann.

if (isset($_POST["clear_log"]) && $_POST["clear_log"]==1) {
	unset($_POST["clear_log"]);
	// Code ausführen
	
}
MarcoS2  12.01.2020, 23:03

Würde alternativ auch mit $_GET gehen, da du in deinem Beispiel ja mit diesem arbeitest. Also statt $_POST dann eben $_GET

0
regex9  12.01.2020, 23:15
@MarcoS2

Der Parameter bei ihm heißt aktion, nicht clear_log.

Gäbe es diese Unterscheidung zwischen 0/1, könntest du die obige Zeile verkürzen, indem du die Funktion empty statt isset verwendest.

0
MarcoS2  12.01.2020, 23:16
@regex9

Tatsache mein Fehler! Scheint die Müdigkeit zu sein.

0

Das geht mittels dem Location-Header.

Allerdings nur, wenn du zuvor keine Ausgabe (z.B. HTML) verursacht hast. Beispiel:

//Funktioniert NICHT
<html>
  <body>
    Hallo Welt
    <?php
      if($soundso) header('Location: test.de');
    ?>
  </body>
</html>
//Funktioniert
<?php
  if($soundso) header('Location: test.de');
?>
<html>
  <body>
    Hallo Welt
  </body>
</html>

Notfalls könnte man noch mittels JavaScript redirecten. Sprich, am Ende der Seite mittels PHP einfach ein JavaScript Skript ausgeben, Beispiel:

<html>
  <body>
    Hallo Welt
  </body>
</html>
<?php
  if($soundso) echo '<script>location.href = "test.de";</script>';
?>

Das geht aber natürlich nur, wenn JavaScript im Browser aktiviert ist.

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung
regex9  12.01.2020, 23:10

1) Dem Aufruf der header-Funktion sollte der Aufruf von exit folgen, um sich eine weitere Ausführung des Skripts zu ersparen.

2) Die letzte Variante wäre inkorrektes Markup. Es spricht nichts dagegen, das script-Element an der richtigen Stelle (im body oder head) zu rendern.

1