PHP Classes

File: Script/_server/inc/fns/misc.php

Recommend this page to a friend!
  Classes of Pierre-Henry Soria   H2OGame PHP Game Engine   Script/_server/inc/fns/misc.php   Download  
File: Script/_server/inc/fns/misc.php
Role: Example script
Content type: text/plain
Description: Example script
Class: H2OGame PHP Game Engine
Application to manage an online games platform
Author: By
Last change:
Date: 2 years ago
Size: 11,603 bytes
 

Contents

Class file image Download
<?php /** * @author Pierre-Henry Soria <ph7software@gmail.com> * @copyright (c) 2014-2015, Pierre-Henry Soria. All Rights Reserved. * @license See H2O.LICENSE.txt and H2O.COPYRIGHT.txt in the root directory. * @link http://hizup.com */ defined('H2O') or exit('Access denied'); /** * Check valid directory. * * @param string $sDir * @return boolean */ function is_directory($sDir) { $sPathProtected = check_ext_start(check_ext_end(trim($sDir))); if (is_dir($sPathProtected)) if (is_readable($sPathProtected)) return true; return false; } /** * Check start extension. * * @param string $sDir * @return string The good extension. */ function check_ext_start($sDir) { return (!is_windows() && substr($sDir, 0, 1) != '/') ? '/' . $sDir : $sDir; } /** * Check end extension. * * @param string $sDir * @return string The good extension. */ function check_ext_end($sDir) { return (substr($sDir, -1) != H2O_DS) ? $sDir . H2O_DS : $sDir; } /** * Validate name (first and last name). * * @param string $sName * @param integer $iMin Default 2 * @param integer $iMax Default 20 * @return boolean */ function validate_name($sName, $iMin = 2, $iMax = 20) { return (is_string($sName) && mb_strlen($sName) >= $iMin && mb_strlen($sName) <= $iMax); } /** * Validate username. * * @param string $sUsername * @param integer $iMin Default 4 * @param integer $iMax Default 40 * @return integer (0 = OK | 1 = too short | 2 = too long | 3 = bad username). */ function validate_username($sUsername, $iMin = 4, $iMax = 40) { if (mb_strlen($sUsername) < $iMin) return 1; elseif (mb_strlen($sUsername) > $iMax) return 2; elseif (preg_match('/[^\w]+$/', $sUsername)) return 3; else return 0; } /** * Validate password. * * @param string $sPassword * @param integer $iMin 6 * @param integer $iMax 92 * @return integer (0 = OK | 1 = too short | 2 = too long | 3 = no number | 4 = no upper). */ function validate_password($sPassword, $iMin = 6, $iMax = 92) { if (mb_strlen($sPassword) < $iMin) return 1; elseif (mb_strlen($sPassword) > $iMax) return 2; elseif (!preg_match('/[0-9]{1,}/', $sPassword)) return 3; elseif (!preg_match('/[A-Z]{1,}/', $sPassword)) return 4; else return 0; } /** * Validate email. * * @param string $sEmail * @return boolean */ function validate_email($sEmail) { return (filter_var($sEmail, FILTER_VALIDATE_EMAIL) && mb_strlen($sEmail) < 120); } /** * Check a string identical. * * @param string $sVal1 * @param string $sVal2 * @return boolean */ function validate_identical($sVal1, $sVal2) { return ($sVal1 === $sVal2); } /** * Find a word in a sentence. * * @param string $sText Sentence. * @param string $sWord Word to find. * @return boolean Returns TRUE if the word is found, FALSE otherwise. */ function find($sText, $sWord) { return false !== stripos($sText, $sWord); } /** * Check that all fields are filled. * * @param array $aVars * @return boolean */ function filled_out($aVars) { foreach ($aVars as $sKey => $sVal) if (empty($sKey) || trim($sVal) == '') return false; return true; } /** * Redirect to another URL. * * @param string $sUrl * @param string $sMsg Default NULL * @return void */ function redirect($sUrl, $sMsg = null) { header('HTTP/1.1 301 Moved Permanently'); if (!empty($sMsg)) (new H2O\Session)->set('H2OSuccessMsg', $sMsg); // Set a success message header('Location: ' . $sUrl); exit; } /** * Delete directory. * * @param string $sPath * @return boolean */ function delete_dir($sPath) { return ( is_file($sPath) ? @unlink($sPath) : (is_dir($sPath) ? array_map(__NAMESPACE__ . '\delete_dir', glob($sPath.'/*')) === @rmdir($sPath) : false) ); } /** * Executes SQL queries. * * @param object PDO * @param string $sSqlFile SQL File. * @param string $sNewPrefix The new prefix. * @param string $sOldPrefix The prefix that must be replaced by the new. Default 'H2O_' * @return mixed (boolean | array) Returns TRUE if there are no errors, otherwise returns an ARRAY of error information. */ function exec_query_file($oDb, $sSqlFile, $sNewPrefix, $sOldPrefix = 'H2O_') { if (!is_file($sSqlFile)) return false; $sSqlContent = file_get_contents($sSqlFile); $sSqlContent = str_replace($sOldPrefix, $sNewPrefix, $sSqlContent); $rStmt = $oDb->exec($sSqlContent); unset($sSqlContent); return ($rStmt === false) ? $rStmt->errorInfo() : true; } /** * Get the current URL. * * @return string Current URL. */ function current_url() { return H2O_PROTOCOL . $_SERVER['SERVER_NAME'] . escape($_SERVER['REQUEST_URI'], true); } /** * Get the client IP address. * * @return string */ function client_ip() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) $sIp = $_SERVER['HTTP_CLIENT_IP']; elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) $sIp = $_SERVER['HTTP_X_FORWARDED_FOR']; else $sIp = $_SERVER['REMOTE_ADDR']; return preg_match('/^[a-z0-9:.]{7,}$/', $sIp) ? $sIp : '0.0.0.0'; } /** * Get the User Agent. * * @return string */ function user_agent() { return (!empty($_SERVER['HTTP_USER_AGENT'])) ? escape($_SERVER['HTTP_USER_AGENT'], true) : ''; } /** * Check if the server is in local. * * @return boolean TRUE if it is in local mode, FALSE if not. */ function is_local_host() { $sServerName = $_SERVER['SERVER_NAME']; $sHttpHost = $_SERVER['HTTP_HOST']; return ($sServerName === 'localhost' || $sServerName === '127.0.0.1' || $sHttpHost === 'localhost' || $sHttpHost === '127.0.0.1'); } /** * Escape string. * * @param string $sVal * @param boolean $bStrip Default FALSE * @return string The escaped string. */ function escape($sVal, $bStrip = false) { return ($bStrip) ? strip_tags($sVal) : htmlspecialchars($sVal, ENT_QUOTES); } /** * Clean string. * * @param string $sVal * @return string The cleaned string. */ function clean_string($sVal) { return str_replace('"', '\"', $sVal); } /** * Know if the environment mode is development or not. * * @return boolean */ function is_debug() { return H2O_ENVIRONMENT; } /** * Create a message with status formatted for JSON. * * @param integer $iStatus, 1 = success, 0 = error * @param string $sTxt * @return string JSON Format */ function json_msg($iStatus, $sTxt) { return '{"status":' . $iStatus . ',"txt":"' . $sTxt . '"}'; } /** * Generate Hash. * * @param integer $iLength Default 80 * @return string The random hash. Maximum 128 characters with whirlpool encryption. */ function generate_hash($iLength = 80) { return substr(hash('whirlpool', time() . hash('sha512', getenv('REMOTE_ADDR') . uniqid(mt_rand(), true) . microtime(true)*999999999999)), 0, $iLength); } /** * Check if Apache's mod_rewrite is installed. * * @return boolean */ function is_url_rewrite() { if (!is_file(H2O_ROOT_URL . '.htaccess')) return false; // Check if mod_rewrite is installed and is configured to be used via .htaccess if (!$bIsRewrite = (strtolower(getenv('HTTP_MOD_REWRITE')) == 'on')) { $sOutputMsg = 'mod_rewrite Works!'; if (!empty($_GET['a']) && $_GET['a'] == 'test_mod_rewrite') exit($sOutputMsg); $sPage = @file_get_contents(H2O_ROOT_URL . 'test_mod_rewrite'); $bIsRewrite = ($sPage == $sOutputMsg); } return $bIsRewrite; } /** * Check if the OS is Windows. * * @return boolean */ function is_windows() { return (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'); } /** * Use keys as search and values as replace. * * @param array $aReplace * @param mixed $mSubject * @return mixed (array | string) Returns a string or an array with the replaced values. */ function str_replace_assoc(array $aReplace, $mSubject) { return str_replace(array_keys($aReplace), array_values($aReplace), $mSubject); } /** * Get the URL contents with CURL. * * @param string $sFile * @return mixed (string | boolean) Return the result content on success, FALSE on failure. */ function get_url_contents($sFile) { $rCh = curl_init(); curl_setopt($rCh, CURLOPT_URL, $sFile); curl_setopt($rCh, CURLOPT_HEADER, 0); curl_setopt($rCh, CURLOPT_RETURNTRANSFER, 1); curl_setopt($rCh, CURLOPT_FOLLOWLOCATION, 1); $mResult = curl_exec($rCh); curl_close($rCh); unset($rCh); return $mResult; } /** * Extract Zip archive. * * @param string $sFile Zip file. * @param string $sDir Destination to extract the file. * @return boolean */ function zip_extract($sFile, $sDir) { $oZip = new \ZipArchive; $mRes = $oZip->open($sFile); if ($mRes === true) { $oZip->extractTo($sDir); $oZip->close(); return true; } return false; // Return error value } /** * Get Language Key. * * @param string $sKey [, string $... ] Language key. * @return string */ function trans() { $oRegister = H2O\Registry::getInstance(); $sKey = func_get_arg(0); $sKey = (!empty($oRegister->aLang[$sKey])) ? $oRegister->aLang[$sKey] : $sKey; for ($i = 1, $iFuncArgs = func_num_args(); $i < $iFuncArgs; $i++) $sKey = str_replace('%'. ($i-1) . '%', func_get_arg($i), $sKey); unset($oRegister); return $sKey; } /** * Check valid URL. * * @return string $sUrl * @return boolean */ function check_url($sUrl) { // Checks if URL is valid with HTTP status code '200 OK' or '301 Moved Permanently' $aUrl = @get_headers($sUrl); return (strpos($aUrl[0], '200 OK') || strpos($aUrl[0], '301 Moved Permanently')); } /** * Send an email (text and HTML format). * * @param array $aParams The parameters information to send email. * @return boolean Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise. */ function send_mail($aParams) { // Frontier to separate the text part and the HTML part. $sFrontier = "-----=" . md5(mt_rand()); // Removing any HTML tags to get a text format. // If any of our lines are larger than 70 characterse, we return to the new line. $sTextBody = wordwrap(strip_tags($aParams['body']), 70); // HTML format (you can change the layout below). $sHtmlBody = <<<EOF <html> <head> <title>{$aParams['subject']}</title> </head> <body> <div style="text-align:center">{$aParams['body']}</div> </body> </html> EOF; // If the email sender is empty, we define the server email. if (empty($aParams['from'])) $aParams['from'] = $_SERVER['SERVER_ADMIN']; /*** Headers ***/ // To avoid the email goes in the spam folder of email client. $sHeaders = "From: \"{$_SERVER['HTTP_HOST']}\" <{$_SERVER['SERVER_ADMIN']}>\r\n"; $sHeaders .= "Reply-To: <{$aParams['from']}>\r\n"; $sHeaders .= "MIME-Version: 1.0\r\n"; $sHeaders .= "Content-Type: multipart/alternative; boundary=\"$sFrontier\"\r\n"; /*** Text Format ***/ $sBody = "--$sFrontier\r\n"; $sBody .= "Content-Type: text/plain; charset=\"utf-8\"\r\n"; $sBody .= "Content-Transfer-Encoding: 8bit\r\n"; $sBody .= "\r\n" . $sTextBody . "\r\n"; /*** HTML Format ***/ $sBody .= "--$sFrontier\r\n"; $sBody .= "Content-Type: text/html; charset=\"utf-8\"\r\n"; $sBody .= "Content-Transfer-Encoding: 8bit\r\n"; $sBody .= "\r\n" . $sHtmlBody . "\r\n"; $sBody .= "--$sFrontier--\r\n"; /** Send Email ***/ return mail($aParams['to'], $aParams['subject'], $sBody, $sHeaders); }