forked from Chaospott/site
		
	
		
			
				
	
	
		
			202 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
function _match_owners_if_possible($target_filename, $match_from_filename)
 | 
						|
{
 | 
						|
    try {
 | 
						|
        if (false === ($intended_uid = fileowner($match_from_filename)) ) throw new Exception("fileowner failed on source");
 | 
						|
        if (false === ($intended_gid = filegroup($match_from_filename)) ) throw new Exception("filegroup failed on source");
 | 
						|
 | 
						|
        if (false === ($uid = fileowner($target_filename)) ) throw new Exception("fileowner failed on target");
 | 
						|
        if (false === ($gid = filegroup($target_filename)) ) throw new Exception("filegroup failed on target");
 | 
						|
        
 | 
						|
        if ($intended_uid != $uid && ! chown($target_filename, $intended_uid)) throw new Exception("chown failed on target");
 | 
						|
        if ($intended_gid != $gid && ! chgrp($target_filename, $intended_gid)) throw new Exception("chgrp failed on target");
 | 
						|
    } catch (Exception $e) {
 | 
						|
        error_log("Cannot assign ownership of [$target_filename] to owner of [$match_from_filename]: " . $e->getMessage());
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
function file_put_contents_as_dir_owner($filename, $data)
 | 
						|
{
 | 
						|
    if (false !== ($ret = file_put_contents($filename, $data)) ) {
 | 
						|
        _match_owners_if_possible($filename, dirname($filename));
 | 
						|
    }    
 | 
						|
    return $ret;
 | 
						|
}
 | 
						|
 | 
						|
function mkdir_as_parent_owner($pathname, $mode = 0777, $recursive = false)
 | 
						|
{
 | 
						|
    echo "$pathname\n";
 | 
						|
    if (false !== ($ret = mkdir($pathname, $mode, $recursive)) ) {
 | 
						|
        _match_owners_if_possible($pathname, dirname($pathname));
 | 
						|
    }
 | 
						|
    return $ret;
 | 
						|
}
 | 
						|
 | 
						|
function h($text) 
 | 
						|
{ 
 | 
						|
    $text =$text;// mb_convert_encoding($text, 'UTF-8', 'UTF-8');
 | 
						|
    return htmlentities($text, ENT_QUOTES, 'UTF-8'); 
 | 
						|
}
 | 
						|
 | 
						|
function js_array($in_array)
 | 
						|
{
 | 
						|
    if (! is_array($in_array)) return '[]';
 | 
						|
    return '[' . implode(',', array_map('js_string', $in_array)) . ']';
 | 
						|
}
 | 
						|
 | 
						|
function js_string($input)
 | 
						|
{
 | 
						|
    if (! strlen($input)) return "''";
 | 
						|
    try {
 | 
						|
        $wchars = mb_convert_encoding($input, 'UCS-2', 'UTF-8');
 | 
						|
        $out = '';
 | 
						|
        foreach (str_split($wchars, 2) as $wchar) {
 | 
						|
            list($o1, $o2) = array(ord($wchar[0]), ord($wchar[1]));
 | 
						|
            if ($o1 == 0 && (
 | 
						|
                $o2 <= 0x1F || 
 | 
						|
                $wchar[1] == '<' || $wchar[1] == '>' || $wchar[1] == '"' || $wchar[1] == '&'
 | 
						|
            )) {
 | 
						|
                $out .= '\x' . sprintf('%02x', $o2);
 | 
						|
            } else if ($o1 == 0 && $wchar[1] == "\\") {
 | 
						|
                $out .= "\\\\";
 | 
						|
            } else if ($o1 == 0 && $wchar[1] == "'") {
 | 
						|
                $out .= "\'";
 | 
						|
            } else if ($o1 == 0 && $o2 <= 0x7F) {
 | 
						|
                $out .= $wchar[1];
 | 
						|
            } else {
 | 
						|
                $out .= '\u' . sprintf('%02x%02x', $o1, $o2);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return "'$out'";
 | 
						|
    } catch (Exception $e) {
 | 
						|
        error_log('js_string(): ' . $e->getMessage() . ' [input:[' . $input . ']]');
 | 
						|
 | 
						|
        $str = str_replace(array('\\', "'"), array("\\\\", "\\'"), $input);
 | 
						|
        $str = preg_replace('#([\x00-\x1F])#e', '"\x" . sprintf("%02x", ord("\1"))', $str);
 | 
						|
        return "'{$str}'";
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
function starts_with($haystack, $needle)
 | 
						|
{
 | 
						|
    return (substr($haystack, 0, strlen($needle)) == $needle);
 | 
						|
}
 | 
						|
 | 
						|
function ends_with($haystack, $needle)
 | 
						|
{
 | 
						|
    return (substr($haystack, 0 - strlen($needle)) == $needle);
 | 
						|
}
 | 
						|
 | 
						|
function contains($haystack, $needle)
 | 
						|
{
 | 
						|
    return (strpos($haystack, $needle) !== false);
 | 
						|
}
 | 
						|
 | 
						|
function contains_any($haystack, array $needles)
 | 
						|
{
 | 
						|
    foreach ($needles as $needle) {
 | 
						|
        if (strpos($haystack, $needle) !== false) return true;
 | 
						|
    }
 | 
						|
    return false;
 | 
						|
}
 | 
						|
 | 
						|
function contains_all($haystack, array $needles)
 | 
						|
{
 | 
						|
    foreach ($needles as $needle) {
 | 
						|
        if (strpos($haystack, $needle) === false) return false;
 | 
						|
    }
 | 
						|
    return true;
 | 
						|
}
 | 
						|
 | 
						|
function substring_before($haystack, $needle, $from_end = false)
 | 
						|
{
 | 
						|
    if ($from_end) {
 | 
						|
        if ( ($p = strrpos($haystack, $needle)) === false) return $haystack;
 | 
						|
    } else {
 | 
						|
        if ( ($p = strpos($haystack, $needle)) === false) return $haystack;
 | 
						|
    }
 | 
						|
    return substr($haystack, 0, $p);
 | 
						|
}
 | 
						|
 | 
						|
function substring_after($haystack, $needle, $from_end = false)
 | 
						|
{
 | 
						|
    if ($from_end) {
 | 
						|
        if ( ($p = strrpos($haystack, $needle)) === false) return $haystack;
 | 
						|
    } else {
 | 
						|
        if ( ($p = strpos($haystack, $needle)) === false) return $haystack;
 | 
						|
    }
 | 
						|
    return substr($haystack, $p + strlen($needle));
 | 
						|
}
 | 
						|
 | 
						|
function substring_between($haystack, $left_needle, $right_needle, $from_end = false)
 | 
						|
{
 | 
						|
    return substring_before(
 | 
						|
        substring_after($haystack, $left_needle), $right_needle, $from_end
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
function normalize_space($str, $trim_beginning_and_end = true)
 | 
						|
{
 | 
						|
    if ($trim_beginning_and_end) $str = trim($str);
 | 
						|
    $str = str_replace("\xC2\xA0", ' ', $str);
 | 
						|
    return preg_replace('/\s\s+/ms', ' ', $str);
 | 
						|
}
 | 
						|
 | 
						|
function pluralize($number, $noun, $nouns = false)
 | 
						|
{
 | 
						|
    if (! $nouns) $nouns = $noun . 's';
 | 
						|
    return number_format($number) . ' ' . ($number == 1 ? $noun : $nouns);
 | 
						|
}
 | 
						|
 | 
						|
function array_to_verbal_list(array $a, $and_or_or = 'and')
 | 
						|
{
 | 
						|
    $c = count($a);
 | 
						|
    if (! $c) return '';
 | 
						|
    if ($c == 1) return $a[0];
 | 
						|
    if ($c == 2) return $a[0] . ' ' . $and_or_or . ' ' . $a[1];
 | 
						|
    $last = array_pop($a);
 | 
						|
    return implode(', ', $a) . ', ' . $and_or_or . ' ' . $last;
 | 
						|
}
 | 
						|
 | 
						|
function strip_tags_preserve_space($str, $allowable_tags = false)
 | 
						|
{    
 | 
						|
    $str = preg_replace('#([^ ])<(p|br|ul|ol|li)/?>#msi', '\\1 <\\2>', $str);
 | 
						|
    return (
 | 
						|
        $allowable_tags ? strip_tags($str, $allowable_tags) : strip_tags($str)
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
function summarize(
 | 
						|
    $text, $length, $ellipsis = '...', $encoding = 'UTF-8', 
 | 
						|
    $strict_cut = false, $strict_sentences = false
 | 
						|
)
 | 
						|
{
 | 
						|
    if ($length == 0) return $text;
 | 
						|
    
 | 
						|
    if ($strict_sentences) {
 | 
						|
        $split_char = '.';
 | 
						|
        $ellipsis = '.' . $ellipsis;
 | 
						|
    } else {
 | 
						|
        $split_char = ' ';
 | 
						|
    }
 | 
						|
        
 | 
						|
    if (mb_strlen($text, $encoding) <= $length) return $text;
 | 
						|
    $cut_str = mb_substr($text, 0, $length + 1, $encoding);
 | 
						|
    $split_pos = (
 | 
						|
        $cut_str ? mb_strrpos($cut_str, $split_char, $encoding) : false
 | 
						|
    );
 | 
						|
    
 | 
						|
    if ($split_pos) {
 | 
						|
        return mb_substr($text, 0, $split_pos, $encoding) . $ellipsis;
 | 
						|
    } else {
 | 
						|
        return ($strict_cut ? $ellipsis : $cut_str . $ellipsis);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
function safe_unlink($file)
 | 
						|
{
 | 
						|
    try { @unlink($file); } catch (Exception $e) { }
 | 
						|
}
 | 
						|
 |