first commit
This commit is contained in:
98
speedtest.php
Normal file
98
speedtest.php
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
/**
|
||||
* speed.php - All-in-One Speedtest Endpoint
|
||||
*
|
||||
* FÜHRE DIESES SKRIPT EINMALIG PER CLI AUS, UM DIE ZUFALLSDATEN-DATEI ZU GENERIEREN:
|
||||
* > php /pfad/zum/script/speed.php
|
||||
*/
|
||||
|
||||
// --- KONFIGURATION ---
|
||||
define('DATA_FILE_NAME', 'random_data.php');
|
||||
// KORREKTUR: Wir definieren den VOLLSTÄNDIGEN Pfad zur Datendatei,
|
||||
// basierend auf dem Speicherort dieses Skripts. Das ist jetzt idiotensicher.
|
||||
define('DATA_FILE_PATH', __DIR__ . '/' . DATA_FILE_NAME);
|
||||
define('NUM_CHUNKS', 10);
|
||||
define('CHUNK_SIZE_KB', 256);
|
||||
|
||||
|
||||
// --- KONTEXT-WEICHE: CLI oder WEB? ---
|
||||
if (php_sapi_name() === 'cli') {
|
||||
// --- GENERATOR-MODUS ---
|
||||
echo "Führe im CLI-Modus aus. Generiere '" . DATA_FILE_PATH . "'...\n";
|
||||
|
||||
$chunk_size_bytes = CHUNK_SIZE_KB * 1024;
|
||||
$chunks_array = [];
|
||||
for ($i = 0; $i < NUM_CHUNKS; $i++) {
|
||||
echo "Generiere Block " . ($i + 1) . "/" . NUM_CHUNKS . "...\n";
|
||||
$random_data = random_bytes($chunk_size_bytes);
|
||||
$chunks_array[] = base64_encode($random_data);
|
||||
}
|
||||
|
||||
$file_content = "<?php\n// " . DATA_FILE_NAME . "\n// Generiert am: " . date('Y-m-d H:i:s') . "\n\n";
|
||||
$file_content .= "\$RANDOM_CHUNKS = [\n";
|
||||
foreach ($chunks_array as $chunk) {
|
||||
$file_content .= " '" . $chunk . "',\n";
|
||||
}
|
||||
$file_content .= "];\n?>";
|
||||
|
||||
// KORREKTUR: Schreibe in den absoluten Pfad.
|
||||
if (file_put_contents(DATA_FILE_PATH, $file_content)) {
|
||||
echo "\nERFOLG: '" . DATA_FILE_PATH . "' wurde erfolgreich erstellt.\n";
|
||||
} else {
|
||||
echo "\nFEHLER: Konnte '" . DATA_FILE_PATH . "' nicht schreiben.\n";
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
// --- WEB-MODUS ---
|
||||
|
||||
// Security & Caching Headers
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
|
||||
header("Pragma: no-cache");
|
||||
|
||||
// Logik-Weiche: GET für Download, POST für Upload
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
// --- UPLOAD LOGIK ---
|
||||
$input = file_get_contents('php://input');
|
||||
$received_bytes = strlen($input);
|
||||
header('Content-Type: text/plain');
|
||||
echo $received_bytes;
|
||||
exit();
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
||||
// --- DOWNLOAD LOGIK ---
|
||||
if (!file_exists(DATA_FILE_PATH)) {
|
||||
http_response_code(503); // Service Unavailable
|
||||
echo "FEHLER: Bitte das Skript zuerst einmal per CLI ausführen um Zufallsdaten zu erzeugen.";
|
||||
exit();
|
||||
}
|
||||
|
||||
require_once DATA_FILE_PATH;
|
||||
|
||||
$chunks_to_send = isset($_GET['chunks']) ? (int)$_GET['chunks'] : 1;
|
||||
$chunk_size_bytes = CHUNK_SIZE_KB * 1024;
|
||||
$total_size_bytes = $chunks_to_send * $chunk_size_bytes;
|
||||
|
||||
header('Content-Type: application/octet-stream');
|
||||
header('Content-Length: ' . $total_size_bytes);
|
||||
|
||||
for ($i = 0; $i < $chunks_to_send; $i++) {
|
||||
$random_chunk_base64 = $RANDOM_CHUNKS[array_rand($RANDOM_CHUNKS)];
|
||||
echo base64_decode($random_chunk_base64);
|
||||
flush();
|
||||
}
|
||||
exit();
|
||||
}
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'HEAD') {
|
||||
// Der Jitter-Test sendet HEAD. Wir antworten einfach mit 200 OK.
|
||||
// Der Webserver sorgt dafür, dass kein Body gesendet wird.
|
||||
exit();
|
||||
}
|
||||
|
||||
// Fallback für andere HTTP-Methoden
|
||||
http_response_code(405);
|
||||
echo "Method Not Allowed";
|
||||
exit();
|
||||
?>
|
||||
Reference in New Issue
Block a user