summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Helbling2016-01-08 14:40:41 +0100
committerChristian Helbling2016-01-08 14:40:41 +0100
commitf7abbe808fcbe761f869e116e499f0e8fe8d631b (patch)
treeca5f21bc5fde418090cf05cd331ba6f69d9d80c1
parent5af90e3f1f13a964e950e4379492b68c2d8f2487 (diff)
parent7c4ad5b54006acc27b6dc22d3d746d15a2d14520 (diff)
downloaditools-f7abbe808fcbe761f869e116e499f0e8fe8d631b.tar.gz
itools-f7abbe808fcbe761f869e116e499f0e8fe8d631b.tar.bz2
itools-f7abbe808fcbe761f869e116e499f0e8fe8d631b.zip
Merge branch 'master' into cs/php7
-rw-r--r--it.class16
-rw-r--r--it_url.class6
-rw-r--r--itjs.class16
3 files changed, 17 insertions, 21 deletions
diff --git a/it.class b/it.class
index b097e60..6840eaa 100644
--- a/it.class
+++ b/it.class
@@ -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
diff --git a/itjs.class b/itjs.class
index c54abd3..18c7a18 100644
--- a/itjs.class
+++ b/itjs.class
@@ -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);;