mirror of
https://github.com/wallabag/wallabag.git
synced 2024-12-16 10:22:14 +01:00
265 lines
7.8 KiB
PHP
265 lines
7.8 KiB
PHP
<?php
|
|
/**
|
|
* poche, a read it later open source system
|
|
*
|
|
* @category poche
|
|
* @author Nicolas Lœuillet <support@inthepoche.com>
|
|
* @copyright 2013
|
|
* @license http://www.wtfpl.net/ see COPYING file
|
|
*/
|
|
|
|
class MyTool
|
|
{
|
|
public static function initPhp()
|
|
{
|
|
define('START_TIME', microtime(true));
|
|
|
|
if (phpversion() < 5) {
|
|
die("Argh you don't have PHP 5 !");
|
|
}
|
|
|
|
error_reporting(E_ALL);
|
|
|
|
function stripslashesDeep($value) {
|
|
return is_array($value)
|
|
? array_map('stripslashesDeep', $value)
|
|
: stripslashes($value);
|
|
}
|
|
|
|
if (get_magic_quotes_gpc()) {
|
|
$_POST = array_map('stripslashesDeep', $_POST);
|
|
$_GET = array_map('stripslashesDeep', $_GET);
|
|
$_COOKIE = array_map('stripslashesDeep', $_COOKIE);
|
|
}
|
|
|
|
ob_start();
|
|
register_shutdown_function('ob_end_flush');
|
|
}
|
|
|
|
public static function isUrl($url)
|
|
{
|
|
// http://neo22s.com/check-if-url-exists-and-is-online-php/
|
|
$pattern='|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i';
|
|
|
|
return preg_match($pattern, $url);
|
|
}
|
|
|
|
public static function isEmail($email)
|
|
{
|
|
$pattern = "/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2, 4}$/i";
|
|
|
|
return (preg_match($pattern, $email));
|
|
}
|
|
|
|
public static function formatBBCode($text)
|
|
{
|
|
$replace = array(
|
|
'/\[m\](.+?)\[\/m\]/is'
|
|
=> '/* moderate */',
|
|
'/\[b\](.+?)\[\/b\]/is'
|
|
=> '<strong>$1</strong>',
|
|
'/\[i\](.+?)\[\/i\]/is'
|
|
=> '<em>$1</em>',
|
|
'/\[s\](.+?)\[\/s\]/is'
|
|
=> '<del>$1</del>',
|
|
'/\[u\](.+?)\[\/u\]/is'
|
|
=> '<span style="text-decoration: underline;">$1</span>',
|
|
'/\[url\](.+?)\[\/url]/is'
|
|
=> '<a href="$1">$1</a>',
|
|
'/\[url=(\w+:\/\/[^\]]+)\](.+?)\[\/url]/is'
|
|
=> '<a href="$1">$2</a>',
|
|
'/\[quote\](.+?)\[\/quote\]/is'
|
|
=> '<blockquote>$1</blockquote>',
|
|
'/\[code\](.+?)\[\/code\]/is'
|
|
=> '<code>$1</code>',
|
|
'/\[([^[]+)\|([^[]+)\]/is'
|
|
=> '<a href="$2">$1</a>'
|
|
);
|
|
$text = preg_replace(
|
|
array_keys($replace),
|
|
array_values($replace),
|
|
$text
|
|
);
|
|
|
|
return $text;
|
|
}
|
|
|
|
public static function formatText($text)
|
|
{
|
|
$text = preg_replace_callback(
|
|
'/<code_html>(.*?)<\/code_html>/is',
|
|
create_function(
|
|
'$matches',
|
|
'return htmlspecialchars($matches[1]);'
|
|
),
|
|
$text
|
|
);
|
|
$text = preg_replace_callback(
|
|
'/<code_php>(.*?)<\/code_php>/is',
|
|
create_function(
|
|
'$matches',
|
|
'return highlight_string("<?php $matches[1] ?>", true);'
|
|
),
|
|
$text
|
|
);
|
|
$text = preg_replace('/<br \/>/is', '', $text);
|
|
|
|
$text = preg_replace(
|
|
'#(^|\s)([a-z]+://([^\s\w/]?[\w/])*)(\s|$)#im',
|
|
'\\1<a href="\\2">\\2</a>\\4',
|
|
$text
|
|
);
|
|
$text = preg_replace(
|
|
'#(^|\s)wp:?([a-z]{2}|):([\w]+)#im',
|
|
'\\1<a href="http://\\2.wikipedia.org/wiki/\\3">\\3</a>',
|
|
$text
|
|
);
|
|
$text = str_replace(
|
|
'http://.wikipedia.org/wiki/',
|
|
'http://www.wikipedia.org/wiki/',
|
|
$text
|
|
);
|
|
$text = str_replace('\wp:', 'wp:', $text);
|
|
$text = str_replace('\http:', 'http:', $text);
|
|
$text = MyTool::formatBBCode($text);
|
|
$text = nl2br($text);
|
|
|
|
return $text;
|
|
}
|
|
|
|
public static function getUrl()
|
|
{
|
|
$https = (!empty($_SERVER['HTTPS'])
|
|
&& (strtolower($_SERVER['HTTPS']) == 'on'))
|
|
|| (isset($_SERVER["SERVER_PORT"])
|
|
&& $_SERVER["SERVER_PORT"] == '443'); // HTTPS detection.
|
|
$serverport = (!isset($_SERVER["SERVER_PORT"])
|
|
|| $_SERVER["SERVER_PORT"] == '80'
|
|
|| ($https && $_SERVER["SERVER_PORT"] == '443')
|
|
? ''
|
|
: ':' . $_SERVER["SERVER_PORT"]);
|
|
|
|
$scriptname = str_replace('/index.php', '/', $_SERVER["SCRIPT_NAME"]);
|
|
|
|
if (!isset($_SERVER["SERVER_NAME"])) {
|
|
return $scriptname;
|
|
}
|
|
|
|
return 'http' . ($https ? 's' : '') . '://'
|
|
. $_SERVER["SERVER_NAME"] . $serverport . $scriptname;
|
|
}
|
|
|
|
public static function rrmdir($dir)
|
|
{
|
|
if (is_dir($dir) && ($d = @opendir($dir))) {
|
|
while (($file = @readdir($d)) !== false) {
|
|
if ( $file == '.' || $file == '..' ) {
|
|
continue;
|
|
} else {
|
|
unlink($dir . '/' . $file);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function humanBytes($bytes)
|
|
{
|
|
$siPrefix = array( 'bytes', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );
|
|
$base = 1024;
|
|
$class = min((int) log($bytes, $base), count($siPrefix) - 1);
|
|
$val = sprintf('%1.2f', $bytes / pow($base, $class));
|
|
|
|
return $val . ' ' . $siPrefix[$class];
|
|
}
|
|
|
|
public static function returnBytes($val)
|
|
{
|
|
$val = trim($val);
|
|
$last = strtolower($val[strlen($val)-1]);
|
|
switch($last)
|
|
{
|
|
case 'g': $val *= 1024;
|
|
case 'm': $val *= 1024;
|
|
case 'k': $val *= 1024;
|
|
}
|
|
|
|
return $val;
|
|
}
|
|
|
|
public static function getMaxFileSize()
|
|
{
|
|
$sizePostMax = MyTool::returnBytes(ini_get('post_max_size'));
|
|
$sizeUploadMax = MyTool::returnBytes(ini_get('upload_max_filesize'));
|
|
|
|
// Return the smaller of two:
|
|
return min($sizePostMax, $sizeUploadMax);
|
|
}
|
|
|
|
public static function smallHash($text)
|
|
{
|
|
$t = rtrim(base64_encode(hash('crc32', $text, true)), '=');
|
|
// Get rid of characters which need encoding in URLs.
|
|
$t = str_replace('+', '-', $t);
|
|
$t = str_replace('/', '_', $t);
|
|
$t = str_replace('=', '@', $t);
|
|
|
|
return $t;
|
|
}
|
|
|
|
public static function renderJson($data)
|
|
{
|
|
header('Cache-Control: no-cache, must-revalidate');
|
|
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
|
|
header('Content-type: application/json; charset=UTF-8');
|
|
|
|
echo json_encode($data);
|
|
exit();
|
|
}
|
|
|
|
public static function grabToLocal($url, $file, $force = false)
|
|
{
|
|
if ((!file_exists($file) || $force) && in_array('curl', get_loaded_extensions())){
|
|
$ch = curl_init ($url);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
|
|
$raw = curl_exec($ch);
|
|
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200) {
|
|
$fp = fopen($file, 'x');
|
|
fwrite($fp, $raw);
|
|
fclose($fp);
|
|
}
|
|
curl_close ($ch);
|
|
}
|
|
}
|
|
|
|
public static function redirect($rurl = '')
|
|
{
|
|
if ($rurl === '') {
|
|
// if (!empty($_SERVER['HTTP_REFERER']) && strcmp(parse_url($_SERVER['HTTP_REFERER'],PHP_URL_HOST),$_SERVER['SERVER_NAME'])==0)
|
|
$rurl = (empty($_SERVER['HTTP_REFERER'])?'?':$_SERVER['HTTP_REFERER']);
|
|
if (isset($_POST['returnurl'])) {
|
|
$rurl = $_POST['returnurl'];
|
|
}
|
|
}
|
|
|
|
// prevent loop
|
|
if (empty($rurl) || parse_url($rurl, PHP_URL_QUERY) === $_SERVER['QUERY_STRING']) {
|
|
$rurl = MyTool::getUrl();
|
|
}
|
|
|
|
if (substr($rurl, 0, 1) !== '?') {
|
|
$ref = MyTool::getUrl();
|
|
if (substr($rurl, 0, strlen($ref)) !== $ref) {
|
|
$rurl = $ref;
|
|
}
|
|
}
|
|
header('Location: '.$rurl);
|
|
exit();
|
|
}
|
|
|
|
public static function silence_errors($num, $str)
|
|
{
|
|
// No-op
|
|
}
|
|
} |