コード例 #1
0
ファイル: toLog.php プロジェクト: sobiron236/cupsfilter
 /**
  * Retrieve all different elements
  *
  * @param $Message
  * @return boolean
  */
 function toLog($Message = false, $Method = "a", $FileName = "error.log")
 {
     if (is_array($Message) or is_object($Message)) {
         $Message = print_r_log($Message);
     }
     $fp = fopen("{$FileName}", $Method);
     if ($FileName == "error.log") {
         fwrite($fp, "LOG " . date("Y-m-d H:i:s") . "\n" . $Message . "\n");
     } else {
         fwrite($fp, $Message);
     }
     fclose($fp);
     return true;
 }
コード例 #2
0
ファイル: SQLEngine.php プロジェクト: klofac/combros
 /**
  * slouzi pro nakesovani odpovedi dotazu typu SELECT pokud nekolik modulu na strance vola backend se stejnymi parametry
  * soucasne promazava cache po stanovenem limitu a umoznuje sdileni odpovedi vice aplikacnimi servery
  * @param string $query SQL dotaz SELECT ktery se ma vykonat
  * @param string $Benchmarked je-li vyplneno, bude zalogovan banchmark test do err_log a text bude pouzit jako identifikator ve vypisu logu
  * @param int $maxold pocet minut jak muze byt vysledek stary, jinak dojde k jeho aktualizaci (default 0) 0=cache off
  * @return array $out["rows"] ... radky s vysledky s omezenim limit, $out["count"] ... pocet nalezenych vysedku bez omezeni limitu
  */
 public function query($query, $params = array(), $benchMarked = "", $maxOld = 0)
 {
     if (!is_array($params)) {
         $params = array($params);
     }
     $time_start = microtime(true);
     $isCache = $maxOld > 0 && !$this->isUpdate($query);
     $actualPDO = $this->getPDO($query, $isCache);
     $connectionInfo = $actualPDO === $this->pdoMaster ? $this->masterHost . "/" . $this->masterDBName . " (master)" : ($connectionInfo = $this->slaveHost . "/" . $this->slaveDBName . " (slave)");
     if ($isCache) {
         // vypocteme id dotazu pro cache
         $checksum = sprintf("%u\n", crc32($query . print_r_log($params)));
         // zjistime zda uz takovy dotaz neprobehl a zda neni po expiraci
         $stmt = $actualPDO->prepare("SELECT *,TIMESTAMPDIFF(MINUTE,created,NOW()) AS oldmin FROM cache_sql WHERE sql_hash=?");
         $stmt->execute(array($checksum));
         $cache = $stmt->fetch();
         $isCache = $stmt->rowCount() > 0 && $cache['oldmin'] < $maxOld;
     }
     //znovu se ptam na stejnou podminku, protoze se mohla mezitim zmenit
     if ($isCache) {
         $out = unserialize($cache['result']);
     } else {
         // neprobehl nebo vyexpiroval - provedeme dotaz a vysledek ulozime do cache
         $stmt = $actualPDO->prepare($query);
         $stmt->setFetchMode(PDO::FETCH_ASSOC);
         $success = $stmt->execute($params);
         $errorInfo = $stmt->errorInfo();
         $out['errorCode'] = $errorInfo[0];
         $out['errorText'] = $errorInfo[2];
         $out["rows"] = $stmt->fetchAll();
         $out["lastInsertId"] = $actualPDO->lastInsertId();
         $out["affectedRows"] = $stmt->rowCount();
         if (!SQLEngine::isError($out)) {
             $out['errorText'] = "";
             $rs1 = $actualPDO->query("SELECT FOUND_ROWS() as pocet")->fetch();
             $out['count'] = $rs1['pocet'];
             //pokud nezafunguje found_rows a vrati 0-1 radku, tak pro jistotu si vezmu pocet z vracenych radku
             if ($out['count'] + 0 < 2) {
                 $out['count'] = count($out["rows"]);
             }
         } else {
             logmsg("SQLERROR:" . self::getErrorCode($out) . ":" . self::getErrorText($out) . "\n" . $query . "\n" . print_r_log($params), PEAR_LOG_CRIT);
         }
         if ($maxOld > 0) {
             // ulozime vysledek do cache pokud nepresahuje limitni delku mediumtext 2^24
             $serial = serialize($out);
             if (strlen($serial) < pow(2, 24) && strlen($serial) > 0) {
                 $sql = "REPLACE cache_sql SET sql_hash=?, result=?";
                 $stmt = $actualPDO->prepare($sql);
                 $stmt->execute(array($checksum, $serial));
             }
         }
     }
     $time_end = microtime(true);
     $time = $time_end - $time_start;
     global $conf;
     if ($conf["enableProfiler"]) {
         $stmt = $actualPDO->prepare("select count(*) as pocet from inzerat");
         $stmt->setFetchMode(PDO::FETCH_ASSOC);
         $success = $stmt->execute(array());
         $rs1 = $stmt->fetch();
         $profilerInsert = "INSERT INTO profiler_data (request_id, request_uri, startSql, stopSql, query, params, pocetInzeratu, callStack) VALUES (?, ?, ?, ?, ?, ?, ?, ?);";
         $e = new Exception();
         $profileParams = array($_SERVER["REQUEST_TIME"], $_SERVER["REQUEST_URI"], $time_start, $time_end, $query, serialize($params), $rs1["pocet"], $e->getTraceAsString());
         $stmt = $this->getPDOMaster()->prepare($profilerInsert);
         $stmt->execute($profileParams);
     }
     logmsg("BENCHMARK {$benchMarked} STOP for connection " . $connectionInfo . " " . round($time, 3) . "\n" . print_r_log($query) . "\n" . print_r_log($params), PEAR_LOG_DEBUG);
     return $out;
 }