yedeğim ekşi diyenlere;

ekşi sözlük tarafından yazarlara sunulan yedek alma hizmetinin ürünü malumunuz olduğu üzere bir xml dosyası ki bu dosyayı açıp okumak eğlenceli olmadığı gibi eziyetli. bu düşünceden hareketle ekşi yedek kurgulasak neler olur, xml dosyasını yükleyip sözlüğü kullanır gibi yedeklerimizin içinde dolaşabilsek nasıl olur diye düşününce ekşi yedek doğdu.

yedekleri görüntülemeyi kurgularken oluşan entry yığını ve tarih yumağına bakınca kaçınılmaz olarak bir takım istatistikler de doğdu. şimdilik yıllara göre başlık/entry grafiği, en çok entry girdiğim başlıklar ve en çok entry girdiğim günlerden ibaret. ilerleyen süreçte gelecek talepler ve bulunacak boş vakit doğrultusunda gelişir belki. belli mi olur?

hakkında atıp tutmak için (bkz: ekşi yedek)

kardeşi için (bkz: hangberry)

nasıl çalışır?

aşağıdaki "yedek seç!" butonuna tıklayıp "xml" dosyanızı (zip değil) seçin. sonrasında görünecek "yükle!" butonuna tıklayın. sistem xml dosyanızda herhangi bir sorun olmaması halinde size bir erişim linki, sözlükteki rumuzunuz ve yedeğinizdeki entry sayınızı belirtecek. bu bilgileri bir yere not etmeniz önemli zira yüklemiş olduğunuz yedeğe tekrar erişmek istediğinizde size özel üretilmiş link üzerinden sayfaya girerek rumuzunuzu ve yedekte yer alan entry sayınızı girmeniz gerekiyor.

kayit ve şifre gerektirmeden yedeğinize tekrar ulaştırmanın en makul çözümü bu yapıydı.

mysqli = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname, $dbport); $this->mysqli->set_charset("utf8"); if (!$this->mysqli) { echo 'database connection error'; exit(); } } catch (Exception $e) { echo 'database connection error'; exit(); } } public function generateInsertQuery($table, $columnArray, $valueArray) { try { if ((sizeof($columnArray) == sizeof($valueArray))) { $values = ''; foreach ($valueArray as $value) { $values .= $value . ","; } $values = mb_substr($values, 0, -1); $query = "insert into $table (" . implode(',', $columnArray) . ") values (" . $values . ")"; $response = self::runQuery($query); if ($response != FALSE) { return $response; } else { return false; } } else { return false; } } catch (Exception $e) { return false; } } public function runQuery($query) { $result = mysqli_query($this->mysqli, $query); if (!$result) { // self::recordError("[runQuery][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } else { return $result; } } public function recordError($errorMessage) { } public function escapeContent($content) { $result = @mysqli_escape_string($this->mysqli, $content); $result = @trim($result); return $result; } public function realEscapeContent($content) { $result = @mysqli_real_escape_string($this->mysqli, $content); return $result; } public function removeSlashes($content) { $result = str_replace('\\', '', $content); return $result; } public function generateInsertQueryLastInsertId($table, $columnArray, $valueArray) { try { if ((sizeof($columnArray) == sizeof($valueArray))) { $values = ''; foreach ($valueArray as $value) { $values .= $value . ","; } $values = mb_substr($values, 0, -1); $query = "insert into $table (" . implode(',', $columnArray) . ") values (" . $values . ")"; $response = self::runQueryReturnInsertId($query); if ($response != false) { return $response; } else { self::recordError("[generateInsertQueryLastInsertId][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } } } catch (Exception $e) { self::recordError("[generateInsertQueryLastInsertId][" . serialize($columnArray) . "] - [" . serialize($valueArray) . "]"); return false; } } public function runQueryReturnInsertId($query) { $result = mysqli_query($this->mysqli, $query); if (!$result) { self::recordError("[runQueryReturnInsertId][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } else { $insertedId = mysqli_insert_id($this->mysqli); return $insertedId; } } public function generateUpdateQuery($table, $updateArray, $whereClause) { try { $query = "update $table set " . implode(',', $updateArray) . " where $whereClause"; if (self::runQuery($query) != false) { return true; } else { self::recordError("[generateUpdateQuery][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } } catch (Exception $e) { self::recordError("[generateUpdateQuery][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } } public function generateUpdateQueryAffected($table, $updateArray, $whereClause) { try { $query = "update $table set " . implode(',', $updateArray) . " where $whereClause"; $responseQuery = self::runQueryAffected($query); return $responseQuery; } catch (Exception $e) { $query = "update $table set " . implode(',', $updateArray) . " where $whereClause"; self::recordError("[generateUpdateQueryAffected][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } } public function runQueryAffected($query) { try { $query = addslashes($query); $result = mysqli_query($this->mysqli, $query); if (!$result) { self::recordError("[runQueryAffected][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } else { return mysqli_affected_rows($this->mysqli); } } catch (Exception $e) { self::recordError("[runQueryAffected][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } } public function fillOptionsWithoutSelected($query) { $result = self::runQuery($query); $html = ""; while ($row = mysqli_fetch_row($result)) { $html .= ''; } echo $html; } public function fillOptions($query, $default = 0) { $result = self::runQuery($query); $html = ""; while ($row = mysqli_fetch_row($result)) { $html .= ''; } echo $html; } public function oneObjectQuery($query) { $result = mysqli_query($this->mysqli, $query); if (isset($result) && mysqli_num_rows($result) == 1) { $obj = mysqli_fetch_object($result); if (sizeof($obj) > 0) { return $obj; } else { self::recordError("[oneObjectQuery][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } } else { self::recordError("[oneObjectQuery][" . $query . "] -" . mysqli_error($this->mysqli)); return false; } } public function oneValueQuery($query) { $result = self::runQuery($query); if (isset($result) && $result != false && self::numRows($result) == 1) { $value = @implode(mysqli_fetch_assoc($result)); if (isset($value) && $value != "") { return $value; } else { return false; } } else { return false; } } public function numRows($result) { if (isset($result)) { $numrows = mysqli_num_rows($result); } else { $numrows = 0; } return $numrows; } public static function encryptUnsecureString($backupDate, $nick, $entryCount) { $key = substr(dbparam::$unsecureKey, 16, 48); $password = hash('sha512', $key); $password = hash('haval256,5', $password); $password = hash('crc32b', $password); $password = hash('sha512', substr(dbparam::$unsecureKey, 0, 15) . md5($backupDate) . substr(dbparam::$unsecureKey, 16, 31) . sha1($nick) . substr(dbparam::$unsecureKey, 32, 47) . md5($entryCount) . substr(dbparam::$unsecureKey, 48, 63) . $password . substr(dbparam::$unsecureKey, 64)); $password = hash('sha256', $password); $encrypted = base64_encode($password); return $encrypted; } public static function getPagination($total, $page = 1) { $limit = 50; if ($total < $limit) { return ""; } $last = ceil($total / $limit); $next = $page + 1; $prev = $page - 1; $previousClass = ($page == 1) ? " disabled" : ""; $nextClass = ($page == $last) ? " disabled" : ""; $result = '
/
'; return $result; } public static function xml2assoc($xml) { $tree = null; while ($xml->read()) { if ($xml->nodeType == XMLReader::END_ELEMENT) { return $tree; } else if ($xml->nodeType == XMLReader::ELEMENT) { $node = array(); $node['tag'] = $xml->name; if ($xml->hasAttributes) { $attributes = array(); while ($xml->moveToNextAttribute()) { $attributes[$xml->name] = $xml->value; } $node['attr'] = $attributes; } if (!$xml->isEmptyElement) { $childs = self::xml2assoc($xml, $node['tag']); $node['childs'] = $childs; } $tree[] = $node; } else if ($xml->nodeType == XMLReader::TEXT) { $node = array(); $node['text'] = $xml->value; $tree[] = $node; } } return $tree; } public static function encryptSuccessPayload($username, $password, $key, $random) { return self::encryptSecureString(json_encode(array("username" => $username, "password" => $password, "key" => $key, "rand"=>$random))); } public static function decryptSuccessPayload($q) { $decrypted = self::decryptSecureString($q); $obj = @json_decode($decrypted, true); if (isset($obj) && sizeof($obj) == 4) { if (isset($obj['username']) && $obj['username'] !== "" && isset($obj['password']) && $obj['password'] !== "" && isset($obj['key']) && $obj['key'] !== "") { return $obj; } else { return false; } } else { return false; } } public static function encryptSecureString($string) { $key = substr(dbparam::$unsecureKey, 16,48); $password = hash('sha512', $key); $password = hash('haval256,5', $password); $password = hash('crc32b', $password); $password = hash('sha512', substr(dbparam::$secureKey, 0, 64) . $password . substr(dbparam::$secureKey, 64)); $password = hash('sha256', $password); $password = @base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($password), $string, MCRYPT_MODE_CBC, md5(sha1($password)))); $encrypted = base64_encode($password); return $encrypted; } public static function decryptSecureString($string) { $key = substr(dbparam::$unsecureKey, 16,48); $string = base64_decode($string); $password = hash('sha512', $key); $password = hash('haval256,5', $password); $password = hash('crc32b', $password); $password = hash('sha512', substr(dbparam::$secureKey, 0, 64) . $password . substr(dbparam::$secureKey, 64)); $password = hash('sha256', $password); $decrypted = @rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($password), base64_decode($string), MCRYPT_MODE_CBC, md5(sha1($password))), "\0"); return $decrypted; } function __destruct() { mysqli_close($this->mysqli); } }