function doTest() { global $HOST; global $TOTAL; global $HREFS; global $REQUESTS_CNT; $RESULTS = array(); $j = 0; foreach ($HREFS as $href => $name) { ++$j; $href = ensure_starts_with($href, '/'); $path = "http://{$HOST}{$href}"; $sec = Secundomer::inst(); for ($index = 0; $index <= $REQUESTS_CNT; $index++) { if ($index == 0) { //Пропустим первый вызов, на случай кеширования file_get_contents($path); continue; } $sec->start(); file_get_contents($path); $sec->stop(); ++$TOTAL; } dolog(pad_zero_left($j, 2) . '/' . count($HREFS) . " [{$path}] - " . $sec->getAverage() . ' (' . $sec->getTotalTime() . '/' . $sec->getCount() . ')'); $RESULTS[$path] = str_replace('.', ',', round($sec->getAverage(), 2)); } asort($RESULTS, SORT_DESC); $RESULTS = array_reverse($RESULTS, true); return $RESULTS; }
/** * Href-ссылка для отображения содержимого элемента с id=$boxId. * * @param type $extractor - название javascript-класса, занимающегося извлеченеим данных из элемента с id=$boxId * * <a class="ps-bubblehref-move" data-extractor="theorem" href="#post-tr-vectors-thkoll">№1</a> */ public static function aById($boxId, $content, $extractor = null, array $attrs = array(), $blank = false) { self::attrsExtractor($attrs, $boxId, $extractor); if (!array_key_exists('href', $attrs)) { //Не передана ссылка, подставим в качестве якоря код элемента. $blank = false; $attrs['href'] = ensure_starts_with($boxId, '#'); } return PsHtml::a($attrs, $content, $blank); }
/** @return DirItem */ public static function inst($path, $name = null, $ext = null) { $itemPath = normalize_path(file_path($path, $name, $ext)); $corePath = normalize_path(PATH_BASE_DIR); //Обезопасим пути, в которых есть русские буквы try { $itemPath = iconv('UTF-8', 'cp1251', $itemPath); } catch (Exception $e) { //Если произойдёт ошибка - игнорируем } $isAbs = starts_with($itemPath, $corePath); $absPath = $isAbs ? $itemPath : next_level_dir($corePath, $itemPath); if (array_key_exists($absPath, self::$items)) { return self::$items[$absPath]; } $relPath = cut_string_start($absPath, $corePath); $relPath = ensure_starts_with($relPath, DIR_SEPARATOR); return self::$items[$absPath] = new DirItem($relPath, $absPath); }
/** * Проверяет, имеет ли файл заданное расширение. * Если нет - добавляет его. */ function ensure_file_ext($file, $ext) { $file = normalize_path($file); if (!$file || ends_with($file, DIR_SEPARATOR)) { return $file; } $ext = trim($ext); if (!$ext || $ext == '.') { return $file; } $file = cut_string_end($file, '.'); $ext = ensure_starts_with($ext, '.'); return ends_with($file, $ext) ? $file : $file . $ext; }
/** * Сохраняет значение для вставки его в запрос */ public function safe4insert($val) { if ($this->isFk()) { if (is_string($val) && contains_substring($val, 'select')) { return ensure_ends_with(ensure_starts_with($val, '('), ')'); } return is_numeric($val) ? 1 * $val : null; } switch ($this->getType()) { case self::TYPE_BIT: case self::TYPE_INT: case self::TYPE_INT_DATE: return is_numeric($val) ? 1 * $val : 'null'; case self::TYPE_CHAR: case self::TYPE_STRING: case self::TYPE_STRING_DATE: case self::TYPE_TEXT: //MySQL различает пустую строку и null. Если столбец nullable и значение пустое - вставим null //Обязательно нужно выполнить mysql_real_escape_string, чтобы безопасно вставить значение return $this->isNullable() && !$val ? 'null' : "'" . mysql_real_escape_string($val) . "'"; } }
/** * Метод к URL добавляет параметры и якорь * * @param str $base - базовый URL * @param array|str $params - строка параметров * @param str $sub - якорь * @return str */ public static function addParams($base, $params, $sub = null) { $base = trim($base); $params = self::getParamsToString($params); $delimiter = $base && $params ? contains_substring($base, '?') ? ends_with($base, '?') ? '' : '&' : '?' : ''; $sub = $sub ? ensure_starts_with($sub, '#') : ''; return $base . $delimiter . $params . $sub; }