From bba4b09ee995bd1ed7a096415285002db13096ce Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Wed, 5 Apr 2017 08:40:30 +0200 Subject: [PATCH] =?UTF-8?q?Version=202=20trouv=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addrelease.php | 31 +--- data.xml | 4 +- index.php | 470 +++++++++++++++++++++++------------------------ lastVersions.txt | 2 +- preRelease.php | 354 +++++++++++++++++------------------ test.php | 4 +- 6 files changed, 425 insertions(+), 440 deletions(-) diff --git a/addrelease.php b/addrelease.php index 805bccf..af15223 100755 --- a/addrelease.php +++ b/addrelease.php @@ -20,7 +20,7 @@ function addRelease($input) { $url = 'http://s3.amazonaws.com/MinecraftDownload/minecraft.jar'; } else { $type = 'apr'; - $url = 'http://assets.minecraft.net/'.$input.'/minecraft.zip'; + $url = 'http://assets.minecraft.net/'.$input.'/minecraft.jar'; } // Chargement du XML @@ -43,28 +43,13 @@ function addRelease($input) { // Extraction et copie de minecraft.jar $directory = $id.' - '.$lastVersions_e[0].' ('.rand(1, 1000).')'; if (!mkdir($directory) OR !copy($url, $directory.'/minecraft.jar')) { return 'ERREUR Impossible de copier le fichier ou de cr�er un nouveau dossier.';} - if ($type == 'r') { - $zip = new ZipArchive; - if ($zip->open($directory.'/minecraft.jar') AND mkdir($directory.'/content')) { - $zip->extractTo($directory.'/content'); - $zip->close(); - } - } else { - $zip = new ZipArchive; - if ($zip->open($directory.'/minecraft.jar') AND mkdir($directory.'/extract')) { - $zip->extractTo($directory.'/extract'); - $zip->close(); - $zip2 = new ZipArchive; - if ($zip2->open($directory.'/extract/bin/minecraft.jar') AND mkdir($directory.'/content')) { - $zip2->extractTo($directory.'/content'); - $zip2->close(); - } else { - return 'ERREUR Impossible d\'extraire le fichier ou de cr�er un nouveau dossier².'; - } - } else { - return 'ERREUR Impossible d\'extraire le fichier ou de cr�er un nouveau dossier.'; - } - } + $zip = new ZipArchive; + if ($zip->open($directory.'/minecraft.jar') AND mkdir($directory.'/content')) { + $zip->extractTo($directory.'/content'); + $zip->close(); + } else { + return 'ERREUR Impossible d\'extraire le fichier ou de cr�er un nouveau dossier.'; + } $md5 = md5_file($directory.'/minecraft.jar'); directoryConstruct($directory.'/content', $files, $data, directoryOld($release)); diff --git a/data.xml b/data.xml index 10aa7c3..8e36723 100755 --- a/data.xml +++ b/data.xml @@ -1,5 +1,5 @@ - + @@ -24,4 +24,4 @@ - + diff --git a/index.php b/index.php index 19d0864..e787596 100755 --- a/index.php +++ b/index.php @@ -1,236 +1,236 @@ -load('data.xml'); -$dataNode = $data->getElementsByTagName('data')->item(0); -$mcupdatesNode = $dataNode->getElementsByTagName('mcupdates')->item(0); -$releaseS = $mcupdatesNode->getElementsByTagName('release'); -$text = ''; -for ($i = $releaseS->length; $i > 1; $i--) { - $release = $releaseS->item($i-1); - $releaseInfos = $release->getElementsByTagName('infos')->item(0); - $text .= '

Minecraft '.$release->getAttribute('name').' '; - if (isset($prevRelease)) { - if ($release->getAttribute('name') == $prevRelease->getAttribute('name')) { - $text .= '(version enterrée) '; - } - } - $shortDescription = $releaseInfos->getAttribute('shortDescription'); - if ($shortDescription == 'false') { - $shortDescription = 'Pas de description.'; - } - $text .= '

'.$shortDescription.'
'; - $prevRelease = $release; -} -?> - - - -Minecraft Checker - - - - - -

Minecraft Checker

-
-

Rechercher des versions

- - -

Versions référencées

-
- -
-
- - - +load('data.xml'); +$dataNode = $data->getElementsByTagName('data')->item(0); +$mcupdatesNode = $dataNode->getElementsByTagName('mcupdates')->item(0); +$releaseS = $mcupdatesNode->getElementsByTagName('release'); +$text = ''; +for ($i = $releaseS->length; $i > 1; $i--) { + $release = $releaseS->item($i-1); + $releaseInfos = $release->getElementsByTagName('infos')->item(0); + $text .= '

Minecraft '.$release->getAttribute('name').' '; + if (isset($prevRelease)) { + if ($release->getAttribute('name') == $prevRelease->getAttribute('name')) { + $text .= '(version enterrée) '; + } + } + $shortDescription = $releaseInfos->getAttribute('shortDescription'); + if ($shortDescription == 'false') { + $shortDescription = 'Pas de description.'; + } + $text .= '

'.$shortDescription.'
'; + $prevRelease = $release; +} +?> + + + +Minecraft Checker + + + + + +

Minecraft Checker

+
+

Rechercher des versions

+ + +

Versions référencées

+
+ +
+
+ + + \ No newline at end of file diff --git a/lastVersions.txt b/lastVersions.txt index 59b955b..2165398 100755 --- a/lastVersions.txt +++ b/lastVersions.txt @@ -1 +1 @@ -1336223378|1.2.5|8e8778078a175a33603a585257f28563|12w18a|37d778548796dd95c4d0ea49a015be06|27|12w18a|apr \ No newline at end of file +1341566731|1.2.5|8e8778078a175a33603a585257f28563|UP|ac908492cdfe6c1d81183d2d2d7959a1|34|12w24a|apr \ No newline at end of file diff --git a/preRelease.php b/preRelease.php index b5b1d6e..f08fd3a 100755 --- a/preRelease.php +++ b/preRelease.php @@ -1,178 +1,178 @@ -load('data.xml'); - $dataNode = $data->getElementsByTagName('data')->item(0); - $mcupdatesNode = $dataNode->getElementsByTagName('mcupdates')->item(0); - $id = $mcupdatesNode->getAttribute('total')+1; - $releaseS = $mcupdatesNode->getElementsByTagName('release'); - $release = $releaseS->item($releaseS->length-1); - - // Creation du noeud XML - $releaseNode = $data->createElement('release'); - $mcupdatesNode->appendChild($releaseNode); - $infosNode = $data->createElement('infos'); - $releaseNode->appendChild($infosNode); - $files = $data->createElement('files'); - $releaseNode->appendChild($files); - - // Extraction et copie de minecraft.jar - $directory = $id.' - '.$lastVersions_e[0].' ('.rand(1, 1000).')'; - if (!mkdir($directory) OR !copy($url, $directory.'/minecraft.jar')) { return 'ERREUR Impossible de copier le fichier ou de créer un nouveau dossier.';} - $zip = new ZipArchive; - if ($zip->open($directory.'/minecraft.jar') AND mkdir($directory.'/content')) { - $zip->extractTo($directory.'/content'); - $zip->close(); - } else { - return 'ERREUR Impossible d\'extraire le fichier ou de créer un nouveau dossier.'; - } - $md5 = md5_file($directory.'/minecraft.jar'); - directoryConstruct($directory.'/content', $files, $data, directoryOld($release)); - - // Detection de $givenName - // Code par @EphysPatato - $minecraft_class = file_get_contents($directory.'/content/net/minecraft/client/Minecraft.class'); - $givenName = 'false'; - if (preg_match('/Minecraft Minecraft (.+)Minecraft main/', $minecraft_class, $matches)) { - $givenName = ''; - $givenName_w = $matches[count($matches)-1]; - for( $i = 0 ; $i < strlen($givenName_w) ; $i++ ) - { - $givenName_cw = substr($givenName_w, $i, 1); - if(($givenName_cw >= 'a' && $givenName_cw <= 'z') || ($givenName_cw >= 'A' && $givenName_cw <= 'Z') || ($givenName_cw >= '0' && $givenName_cw <= '9') || $givenName_cw == '|' || $givenName_cw == '.' || $givenName_cw == '_' || $givenName_cw == '-') - $givenName .= $givenName_cw; - } - } - // Spécifications selon le type de release - if ($type == 'r') { - $name = $givenName; - $lastVersions_e[1] = $name; - $lastVersions_e[2] = $md5; - $infosNode->setAttribute('wiki', 'http://www.minecraftwiki.net/wiki/Version_history#'.$name); - } else { - $name = $input; - $lastVersions_e[3] = $name; - $lastVersions_e[4] = $md5; - $infosNode->setAttribute('wiki', 'http://www.minecraftwiki.net/wiki/Version_history/Development_versions#'.$name); - } - - // Mise des infos dans le XML - $releaseNode->setAttribute('id', $id); - $releaseNode->setAttribute('name', $name); - $releaseNode->setAttribute('type', $type); - $infosNode->setAttribute('givenName', $givenName); - $infosNode->setAttribute('directory', $directory); - $infosNode->setAttribute('link', $url); - $infosNode->setAttribute('size', filesize($directory.'/minecraft.jar')); - $infosNode->setAttribute('md5', $md5); - $infosNode->setAttribute('sha1', sha1_file($directory.'/minecraft.jar')); - $infosNode->setAttribute('date', $lastVersions_e[0]); - $infosNode->setAttribute('shortDescription', 'false'); - $mcupdatesNode->setAttribute('total', $id); - - // Sauvegarde finale - $lastVersions_e[0] = time(); - $lastVersions_e[5] = $id; - $lastVersions_e[6] = $name; - $lastVersions_e[7] = $type; - $id = $mcupdatesNode->setAttribute('total', $id); - $lastVersions_f = fopen('lastVersions.txt', 'w'); - $lastError = error_get_last(); - if ($debug) { echo substr($lastError['file'], -14); } - if ($lastError /*AND $lastError['type']!= 2 */AND substr($lastError['file'], -14) == 'addrelease.php') { - fwrite($lastVersions_f, implode('|', $lastVersions_e_backup)); - rrmdir($directory); - return 'ERREUR "'.$lastError['message'].'" (type : '.$lastError['type'].') dans '.$lastError['file'].' ligne '.$lastError['line'].'.'; - } else { - $data->save('data.xml'); - fwrite($lastVersions_f, implode('|', $lastVersions_e)); - fclose($lastVersions_f); - return implode('|', $lastVersions_e); - } -} -function directoryConstruct($directoryName, $XML, $data, $array) { - $directory = opendir($directoryName); - while($file = readdir($directory)) { - if ($file != '.' AND $file != '..') { - if (is_dir($directoryName.'/'.$file)) { - $newDirectory = $data->createElement('dir'); - $XML->appendChild($newDirectory); - $newDirectory->setAttribute('name', $file); - if (isset($array[$file])) { - $newDirectory->setAttribute('comparaison', 'same'); - directoryConstruct($directoryName.'/'.$file, $newDirectory, $data, $array[$file]); - } else { - $newDirectory->setAttribute('comparaison', 'added'); - directoryConstruct($directoryName.'/'.$file, $newDirectory, $data, array()); - } - } else { - $fileXML = $data->createElement('file'); - $XML->appendChild($fileXML); - $fileXML->setAttribute('name', $file); - $fileXML->setAttribute('md5', md5_file($directoryName.'/'.$file)); - if (isset($array[$file])) { - if ($array[$file] == md5_file($directoryName.'/'.$file)) { - $fileXML->setAttribute('comparaison', 'same'); - } else { - $fileXML->setAttribute('comparaison', 'change'); - } - } else { - $fileXML->setAttribute('comparaison', 'added'); - } - // TODO Verifier si un fichier a été supprimé - } - } - } -} -function directoryOld($XML) { -$array = array(); - $dirS = $XML->getElementsByTagName('dir'); - for ($c = $dirS->length, $i = 0; $i < $c; $i++) { - $dir = $dirS->item($i); - $array[$dir->getAttribute('name')]= directoryOld($dir); - } - $fileS = $XML->getElementsByTagName('file'); - for ($c = $fileS->length, $i = 0; $i < $c; $i++) { - $file = $fileS->item($i); - $array[$file->getAttribute('name')] = $file->getAttribute('md5'); - } - return $array; -} -function rrmdir($dir) { // Par holger1@NOSPAMzentralplan.de - if (is_dir($dir)) { - $objects = scandir($dir); - foreach ($objects as $object) { - if ($object != "." && $object != "..") { - if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); - } - } - reset($objects); - rmdir($dir); - } - } +load('data.xml'); + $dataNode = $data->getElementsByTagName('data')->item(0); + $mcupdatesNode = $dataNode->getElementsByTagName('mcupdates')->item(0); + $id = $mcupdatesNode->getAttribute('total')+1; + $releaseS = $mcupdatesNode->getElementsByTagName('release'); + $release = $releaseS->item($releaseS->length-1); + + // Creation du noeud XML + $releaseNode = $data->createElement('release'); + $mcupdatesNode->appendChild($releaseNode); + $infosNode = $data->createElement('infos'); + $releaseNode->appendChild($infosNode); + $files = $data->createElement('files'); + $releaseNode->appendChild($files); + + // Extraction et copie de minecraft.jar + $directory = $id.' - '.$lastVersions_e[0].' ('.rand(1, 1000).')'; + if (!mkdir($directory) OR !copy($url, $directory.'/minecraft.jar')) { return 'ERREUR Impossible de copier le fichier ou de créer un nouveau dossier.';} + $zip = new ZipArchive; + if ($zip->open($directory.'/minecraft.jar') AND mkdir($directory.'/content')) { + $zip->extractTo($directory.'/content'); + $zip->close(); + } else { + return 'ERREUR Impossible d\'extraire le fichier ou de créer un nouveau dossier.'; + } + $md5 = md5_file($directory.'/minecraft.jar'); + directoryConstruct($directory.'/content', $files, $data, directoryOld($release)); + + // Detection de $givenName + // Code par @EphysPatato + $minecraft_class = file_get_contents($directory.'/content/net/minecraft/client/Minecraft.class'); + $givenName = 'false'; + if (preg_match('/Minecraft Minecraft (.+)Minecraft main/', $minecraft_class, $matches)) { + $givenName = ''; + $givenName_w = $matches[count($matches)-1]; + for( $i = 0 ; $i < strlen($givenName_w) ; $i++ ) + { + $givenName_cw = substr($givenName_w, $i, 1); + if(($givenName_cw >= 'a' && $givenName_cw <= 'z') || ($givenName_cw >= 'A' && $givenName_cw <= 'Z') || ($givenName_cw >= '0' && $givenName_cw <= '9') || $givenName_cw == '|' || $givenName_cw == '.' || $givenName_cw == '_' || $givenName_cw == '-') + $givenName .= $givenName_cw; + } + } + // Spécifications selon le type de release + if ($type == 'r') { + $name = $givenName; + $lastVersions_e[1] = $name; + $lastVersions_e[2] = $md5; + $infosNode->setAttribute('wiki', 'http://www.minecraftwiki.net/wiki/Version_history#'.$name); + } else { + $name = $input; + $lastVersions_e[3] = $name; + $lastVersions_e[4] = $md5; + $infosNode->setAttribute('wiki', 'http://www.minecraftwiki.net/wiki/Version_history/Development_versions#'.$name); + } + + // Mise des infos dans le XML + $releaseNode->setAttribute('id', $id); + $releaseNode->setAttribute('name', $name); + $releaseNode->setAttribute('type', $type); + $infosNode->setAttribute('givenName', $givenName); + $infosNode->setAttribute('directory', $directory); + $infosNode->setAttribute('link', $url); + $infosNode->setAttribute('size', filesize($directory.'/minecraft.jar')); + $infosNode->setAttribute('md5', $md5); + $infosNode->setAttribute('sha1', sha1_file($directory.'/minecraft.jar')); + $infosNode->setAttribute('date', $lastVersions_e[0]); + $infosNode->setAttribute('shortDescription', 'false'); + $mcupdatesNode->setAttribute('total', $id); + + // Sauvegarde finale + $lastVersions_e[0] = time(); + $lastVersions_e[5] = $id; + $lastVersions_e[6] = $name; + $lastVersions_e[7] = $type; + $id = $mcupdatesNode->setAttribute('total', $id); + $lastVersions_f = fopen('lastVersions.txt', 'w'); + $lastError = error_get_last(); + if ($debug) { echo substr($lastError['file'], -14); } + if ($lastError /*AND $lastError['type']!= 2 */AND substr($lastError['file'], -14) == 'addrelease.php') { + fwrite($lastVersions_f, implode('|', $lastVersions_e_backup)); + rrmdir($directory); + return 'ERREUR "'.$lastError['message'].'" (type : '.$lastError['type'].') dans '.$lastError['file'].' ligne '.$lastError['line'].'.'; + } else { + $data->save('data.xml'); + fwrite($lastVersions_f, implode('|', $lastVersions_e)); + fclose($lastVersions_f); + return implode('|', $lastVersions_e); + } +} +function directoryConstruct($directoryName, $XML, $data, $array) { + $directory = opendir($directoryName); + while($file = readdir($directory)) { + if ($file != '.' AND $file != '..') { + if (is_dir($directoryName.'/'.$file)) { + $newDirectory = $data->createElement('dir'); + $XML->appendChild($newDirectory); + $newDirectory->setAttribute('name', $file); + if (isset($array[$file])) { + $newDirectory->setAttribute('comparaison', 'same'); + directoryConstruct($directoryName.'/'.$file, $newDirectory, $data, $array[$file]); + } else { + $newDirectory->setAttribute('comparaison', 'added'); + directoryConstruct($directoryName.'/'.$file, $newDirectory, $data, array()); + } + } else { + $fileXML = $data->createElement('file'); + $XML->appendChild($fileXML); + $fileXML->setAttribute('name', $file); + $fileXML->setAttribute('md5', md5_file($directoryName.'/'.$file)); + if (isset($array[$file])) { + if ($array[$file] == md5_file($directoryName.'/'.$file)) { + $fileXML->setAttribute('comparaison', 'same'); + } else { + $fileXML->setAttribute('comparaison', 'change'); + } + } else { + $fileXML->setAttribute('comparaison', 'added'); + } + // TODO Verifier si un fichier a été supprimé + } + } + } +} +function directoryOld($XML) { +$array = array(); + $dirS = $XML->getElementsByTagName('dir'); + for ($c = $dirS->length, $i = 0; $i < $c; $i++) { + $dir = $dirS->item($i); + $array[$dir->getAttribute('name')]= directoryOld($dir); + } + $fileS = $XML->getElementsByTagName('file'); + for ($c = $fileS->length, $i = 0; $i < $c; $i++) { + $file = $fileS->item($i); + $array[$file->getAttribute('name')] = $file->getAttribute('md5'); + } + return $array; +} +function rrmdir($dir) { // Par holger1@NOSPAMzentralplan.de + if (is_dir($dir)) { + $objects = scandir($dir); + foreach ($objects as $object) { + if ($object != "." && $object != "..") { + if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); + } + } + reset($objects); + rmdir($dir); + } + } ?> \ No newline at end of file diff --git a/test.php b/test.php index 52a2198..00a0ab0 100755 --- a/test.php +++ b/test.php @@ -50,7 +50,7 @@ if (substr($lastVersions_e[3], 0, 2) == substr(date('Y'), 2, 2) AND substr($last if (true) { // if (((date('D') == 'Thu') AND $nextAPR_firstOfWeek AND time()-$lastVersions_e[0] >= 5) OR time()-$lastVersions_e[0] >= 10) { debug('nextAPR check 1'); - if (@fopen('http://assets.minecraft.net/'.$nextAPR.'/minecraft.zip', 'r')) { + if (@fopen('http://assets.minecraft.net/'.$nextAPR.'/minecraft.jar', 'r')) { include_once('addrelease.php'); echo addRelease($nextAPR); exit(); @@ -70,7 +70,7 @@ if (true) { if (true) { //if ((time()-$lastVersions_e[0] <= 20 AND !$nextAPR_firstOfWeek) OR (time()-$lastVersions_e[0] >= 60)) { debug('lastAPR re-check'); - if (@md5_file('http://assets.minecraft.net/'.$lastVersions_e[3].'/minecraft.zip') != $lastVersions_e[4]) { + if (@md5_file('http://assets.minecraft.net/'.$lastVersions_e[3].'/minecraft.jar') != $lastVersions_e[4]) { include_once('addrelease.php'); echo addRelease($lastVersions_e[3]); exit();