diff options
author | Christian Helbling | 2016-01-08 14:40:41 +0100 |
---|---|---|
committer | Christian Helbling | 2016-01-08 14:40:41 +0100 |
commit | f7abbe808fcbe761f869e116e499f0e8fe8d631b (patch) | |
tree | ca5f21bc5fde418090cf05cd331ba6f69d9d80c1 | |
parent | 5af90e3f1f13a964e950e4379492b68c2d8f2487 (diff) | |
parent | 7c4ad5b54006acc27b6dc22d3d746d15a2d14520 (diff) | |
download | itools-f7abbe808fcbe761f869e116e499f0e8fe8d631b.tar.gz itools-f7abbe808fcbe761f869e116e499f0e8fe8d631b.tar.bz2 itools-f7abbe808fcbe761f869e116e499f0e8fe8d631b.zip |
Merge branch 'master' into cs/php7
-rw-r--r-- | it.class | 16 | ||||
-rw-r--r-- | it_url.class | 6 | ||||
-rw-r--r-- | itjs.class | 16 |
3 files changed, 17 insertions, 21 deletions
@@ -70,14 +70,14 @@ static function &cloneobj(&$object) /** * Append all arguments to a logfile (tab separated). Date will be added to filename and line * @param $name Name of logfile. Will be in log/ of service unless it starts with / - * @param $line1 Line to append (varargs) + * @param $args... Varargs to log, will be tab separated. */ static function log($name /* ... */) { $args = func_get_args(); - $line = date("Y-m-d H:i:s") . "\t" . implode("\t", array_slice($args, 1)) . "\n"; + $line = it::date("Y-m-d H:i:s") . "\t" . implode("\t", array_slice($args, 1)) . "\n"; $basefn = substr($name, 0, 1) == "/" ? $name : $GLOBALS['ULTRAHOME'] . "/log/$name"; - $fullfn = $basefn . "-" . date('Ymd'); + $fullfn = $basefn . "-" . it::date('Ymd'); if (substr($fullfn, 0, 1) == "/") { @@ -89,7 +89,8 @@ static function log($name /* ... */) @chmod("$fullfn.$tmp", 0664); @rename("$fullfn.$tmp", $fullfn); @unlink($basefn); - @symlink($fullfn, $basefn); + if (@readlink($basefn) < basename($fullfn)) # may be older due to $GLOBALS['debug_time'] + @symlink($fullfn, $basefn); } file_put_contents($fullfn, $line, FILE_APPEND); @@ -262,9 +263,7 @@ static function error($p = array()) */ static function fatal($p) { - $p = is_array($p) ? $p : array('title' => $p); - $p['backtraceskip']++; - it::error($p); + it::error(array('backtraceskip' => 2) + (is_array($p) ? $p : array('title' => $p))); if ($_SERVER['REMOTE_ADDR']) header("HTTP/1.0 500 Internal Server Error"); exit(99); @@ -1030,6 +1029,9 @@ static function json_decode($json) return ($data = json_decode($json)) === null && $json != 'null' ? it::error(array('title' => "invalid json", 'body' => $json)) : $data; } +/** + * Retuns sorted array. mode string can contain combinations of a for assoc, k for key, r for reverse and n for numeric + */ static function sort($array, $mode = "") { $func = it::replace(array('n' => ""), count_chars($mode, 3)) . "sort"; # count_chars sorts flags diff --git a/it_url.class b/it_url.class index fb5a1ff..ab1f90f 100644 --- a/it_url.class +++ b/it_url.class @@ -529,10 +529,10 @@ function get_cache_filename($p) /** * Store contents of url in a file and return file name. Threadsafe: Provides locking. Called statically. * Requires webserver writeable directory in $p['cachdedir']. Params in associative array p: + * @param $p['id'] RECOMMENDED: If you need more than one type of cache (e.g. different maxage) you should specify an id * @param $p['url'] url to get * @param $p['headers'] optional array of HTTP headers to send * @param $p['cachedir'] directory to store cache files in, @see get_cache_dir - * @param $p['id'] If you need more than one type of cache (e.g. different maxage) you can specify an id * @param $p['timeout'] timeout in seconds, default 10. fractions allowed * @param $p['maxage'] maximum age of cache entries in seconds, default 86400 * @param $p['cleanbefore'] maximum daytime when attempting cleanup, default 7200 @@ -793,8 +793,8 @@ static function absolute($url=null) function redirect($url = null, $type = "temporary") { $codes = array('permanent' => 301, 'temporary' => 303); # NOTE: HTTP 303 is called "See Other", rather than Temporary (which would be HTTP 307), but is the behaviour one usually wants for temporary redirects - if (!($code = $codes[$type])) - it::fatal("Invalid redirect type '$type', must be 'permanent' or 'temporary'"); + if (!($code = $codes[$type]) || !$url) + it::fatal("invalid redirect type or missing redirect url"); $url = preg_replace("/[\r\n].*/", '', it_url::absolute($url)); # Security: cut after CR/LF @@ -115,7 +115,7 @@ static function encode($values) static function filenames($filelist) { $result = array(); - $path = $GLOBALS['ULTRAHOME'] . "/itjs"; + $local = $GLOBALS['ULTRAHOME'] . "/itjs"; $itjs = "/www/server/phpinclude/itools/itjs"; $libsearch = strlen($GLOBALS['debug_lib']) > 1 ? "/www/lib-" . $GLOBALS['debug_lib'] . ".search.ch" : "/www/lib.search.ch"; $special = array( @@ -124,19 +124,13 @@ static function filenames($filelist) "state.html" => "$itjs/state.html", "error.gif" => "$itjs/error.gif", "search.css" => "$libsearch/doc/search.css", - "searchlib.js" => "$libsearch/itjs/searchlib.js", - "sl_state.js" => "$libsearch/itjs/sl_state.js", - "sl_dropdown.js" => "$libsearch/itjs/sl_dropdown.js", - "sl_collapse.js" => "$libsearch/itjs/sl_collapse.js", - "sl_adid_debug.js" => "$libsearch/itjs/sl_adid_debug.js", - "locateme.js" => "$libsearch/itjs/locateme.js", "prettyprint.css" => "$libsearch/doc/prettyprint.css", "PIE.htc" => "$libsearch/doc/PIE.htc", ); - foreach (array_filter(explode(",", basename($filelist))) as $file) + foreach (it::match("[-\w.=?&]+", basename($filelist), array('all' => true)) as $file) # split by comma but ignore illegal chars { - $filenames = $special[$file] ?: (file_exists("$path/" . it::replace(array('[\?\x00].*' => ""), $file)) ? "$path/$file" : "$libsearch/itjs/$file"); + $filenames = $special[$file] ?: (file_exists("$local/$file") ? "$local/$file" : "$libsearch/itjs/$file"); foreach (explode(",", $filenames) as $filename) if (!$seen[$filename]++) @@ -198,7 +192,7 @@ static function checksum($fnlist, $p = array()) { $p += array('short_expire' => true); - $filenames = array_merge(is_array($fnlist) ? $fnlist : itjs::filenames($fnlist), array("/www/lib.search.ch/var/jquery-ui/dist/minified/jquery.ui.core.min.js", "/www/lib.search.ch/var/jquery/dist/jquery.min.js")); # jquery files included by lib/jquery.js + $filenames = array_merge(itjs::filenames(join(",", (array)$fnlist)), array("/www/lib.search.ch/var/jquery-ui/dist/minified/jquery.ui.core.min.js", "/www/lib.search.ch/var/jquery/dist/jquery.min.js")); # jquery files included by lib/jquery.js $key = "itjs_" . md5(join("", it::map('"$v" . @filemtime("$v")', $filenames))); if ($p['short_expire'] && (time() - max(@array_map('filemtime', $filenames)) < 60)) @@ -210,7 +204,7 @@ static function checksum($fnlist, $p = array()) function crcurl($url, $p = array()) { if (it::match('^http', $url)) # remote url, must fetch to crc - list($fn, $short_expire) = array(it_url::get_cache(array('url' => $url, 'maxage' => 3600) + $p), false); + list($fn, $short_expire) = array(it_url::get_cache(array('url' => $url, 'maxage' => 3600, 'id' => "itjs_crcurl") + $p), false); else list($fn, $short_expire) = array(($m = it::match("^//(\w+)(/.*)", $url)) ? "/www/$m[0].search.ch" . $m[1] : $GLOBALS['ULTRAHOME'] . $url, true);; |