* @copyright 2016-2019 GFI Informatique, 2016-2019 TNT * @license https://opensource.org/licenses/MIT MIT License */ require_once _PS_MODULE_DIR_.'tntofficiel/libraries/TNTOfficiel_ClassLoader.php'; class TNTOfficiel_Tools { /** * Prevent Construct. */ final private function __construct() { trigger_error(sprintf('%s() %s is static.', __FUNCTION__, get_class($this)), E_USER_ERROR); } /** * Get Bootstrap HTML alert. * * @param type $arrArgAlert * * @return string */ public static function getAlertHTML($arrArgAlert) { TNTOfficiel_Logstack::log(); // Define message sort. $arrAlertHTML = array( 'info' => null, 'warning' => null, 'success' => null, 'error' => null ); foreach ($arrArgAlert as $strAlertType => $arrAlertMsg) { if (count($arrAlertMsg) > 0) { foreach ($arrAlertMsg as $k => $a) { if (is_array($a)) { $arrAlertMsg[$k] = $k.": ".implode("\n ", $a); } } $arrAlertMsg = array_map('htmlentities', $arrAlertMsg); if ($strAlertType == 'info') { $arrAlertHTML[$strAlertType] = '
' .(count($arrAlertMsg) === 1 ? array_shift($arrAlertMsg) : ('')) .'
'; } elseif ($strAlertType == 'warning') { $arrAlertHTML[$strAlertType] = '
' .(count($arrAlertMsg) === 1 ? array_shift($arrAlertMsg) : ('')) .'
'; } elseif ($strAlertType == 'success') { $arrAlertHTML[$strAlertType] = '
' .(count($arrAlertMsg) === 1 ? array_shift($arrAlertMsg) : ('')) .'
'; } elseif ($strAlertType == 'error') { $arrAlertHTML[$strAlertType] = '
' .(count($arrAlertMsg) === 1 ? array_shift($arrAlertMsg) : ('')) .'
'; } } if (array_key_exists($strAlertType, $arrAlertHTML) && !$arrAlertHTML[$strAlertType]) { unset($arrAlertHTML[$strAlertType]); } } return $arrAlertHTML; } /** * Validate a Fixed Phone (FR,MC only). * * @param string $strArgISOCode The ISO Country Code. * @param string $strArgPhoneFixed The Fixed Phone Number. * * @return bool|string The Formated Fixed Phone String if valid, else false. */ public static function validateFixedPhone($strArgISOCode, $strArgPhoneFixed) { TNTOfficiel_Logstack::log(); if (!is_string($strArgISOCode)) { return false; } if (!is_string($strArgPhoneFixed)) { return false; } // Format par pays. $arrPhoneFormatCountry = array( 'FR' => array( 'strCoutryCode' => '33', 'strTrunkp' => '0', 'strFixed' => '([1234589])([0-9]{8})' ), 'MC' => array( 'strCoutryCode' => '377', 'strTrunkp' => '', 'strFixed' => '([89])([0-9]{7})' ) ); $strISOCode = Tools::strtoupper($strArgISOCode); if (!array_key_exists($strISOCode, $arrPhoneFormatCountry)) { return false; } // Check allowed character. if (!Validate::isPhoneNumber($strArgPhoneFixed)) { return false; } // Get Country Data. $arrPhoneFormat = $arrPhoneFormatCountry[ $strISOCode ]; // Cleaning Phone Input. $strPhoneFixedClean = preg_replace('/[^+0-9()]/ui', '', $strArgPhoneFixed); // Root. $strRoot = '(?:(?:(?:\+|00)'.$arrPhoneFormat['strCoutryCode'] .'(?:\('.$arrPhoneFormat['strTrunkp'].'\))?)|'.$arrPhoneFormat['strTrunkp'].')'; if (preg_match('/^'.$strRoot.'('.$arrPhoneFormat['strFixed'].')$/ui', $strPhoneFixedClean, $matches)) { $strPhoneFixedID = $arrPhoneFormat['strTrunkp'].$matches[1]; $strPhoneFixedIDLength = Tools::strlen($strPhoneFixedID); if ($strPhoneFixedIDLength < 1 || $strPhoneFixedIDLength > 63) { return false; } return $strPhoneFixedID; } return false; } /** * Validate a Mobile Phone (FR,MC only). * * @param string $strArgISOCode The ISO Country Code. * @param string $strArgPhoneMobile The Mobile Phone Number. * * @return bool|string The Formated Mobile Phone String if valid, else false. */ public static function validateMobilePhone($strArgISOCode, $strArgPhoneMobile) { TNTOfficiel_Logstack::log(); if (!is_string($strArgISOCode)) { return false; } if (!is_string($strArgPhoneMobile)) { return false; } // Format apr pays. $arrPhoneFormatCountry = array( 'FR' => array( 'strCoutryCode' => '33', 'strTrunkp' => '0', 'strMobile' => '([67])([0-9]{8})' ), 'MC' => array( 'strCoutryCode' => '377', 'strTrunkp' => '', 'strMobile' => '(?:([34])([0-9]{7})|([6])([0-9]{8}))' ) ); $strISOCode = Tools::strtoupper($strArgISOCode); if (!array_key_exists($strISOCode, $arrPhoneFormatCountry)) { return false; } // Check allowed character. if (!Validate::isPhoneNumber($strArgPhoneMobile)) { return false; } // Get Country Data. $arrPhoneFormat = $arrPhoneFormatCountry[ $strISOCode ]; // Cleaning Phone Input. $strPhoneMobileClean = preg_replace('/[^+0-9()]/ui', '', $strArgPhoneMobile); // Root. $strRoot = '(?:(?:(?:\+|00)'.$arrPhoneFormat['strCoutryCode'] .'(?:\('.$arrPhoneFormat['strTrunkp'].'\))?)|'.$arrPhoneFormat['strTrunkp'].')'; if (preg_match('/^'.$strRoot.'('.$arrPhoneFormat['strMobile'].')$/ui', $strPhoneMobileClean, $matches)) { $strPhoneMobileID = $arrPhoneFormat['strTrunkp'].$matches[1]; $strPhoneMobileIDLength = Tools::strlen($strPhoneMobileID); if ($strPhoneMobileIDLength < 1 || $strPhoneMobileIDLength > 63) { return false; } return $strPhoneMobileID; } return false; } /** * Create a new directory with default index.php file. * Don't do log here. * * @param array $arrArgDirectoryList an array of directories. * * @return bool */ public static function makeDirectory($arrArgDirectoryList, $strRoot = '') { $strIndexFileContent = << * @copyright 2016-2019 GFI Informatique, 2016-2019 TNT * @license https://opensource.org/licenses/MIT MIT License */ header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Location: ../"); exit; PHP; $arrDirectoryList = (array)$arrArgDirectoryList; foreach ($arrDirectoryList as $strDirectory) { // If directory do not exist, create it. $boolSuccess = true; if (!is_string($strDirectory)) { continue; } // If directory do not exist, create it. if (!is_dir($strRoot.$strDirectory)) { $intUMask = umask(0); $boolSuccess = mkdir($strRoot.$strDirectory, 0770, true) && $boolSuccess; umask($intUMask); if (!$boolSuccess) { return false; } } $strFileName = $strRoot.$strDirectory.'index.php'; // If index file does not exist, create it. if (!file_exists($strFileName)) { touch($strFileName); chmod($strFileName, 0660); $rscFile = fopen($strFileName, 'w'); if ($rscFile === false) { return false; } fwrite($rscFile, $strIndexFileContent); fclose($rscFile); } } return true; } /** * Remove a list of files or directories. * * @param $strModuleDirSrc * @param array $arrRemoveFileList * @param array $arrRemoveDirList * * @return bool */ public static function removeFiles($strModuleDirSrc, $arrRemoveFileList = array(), $arrRemoveDirList = array()) { foreach ($arrRemoveFileList as $strFile) { $strFQFile = $strModuleDirSrc.$strFile; try { // Delete file if exist. if (file_exists($strFQFile)) { Tools::deleteFile($strFQFile); } } catch (Exception $objException) { TNTOfficiel_Logger::logException($objException); return false; } } foreach ($arrRemoveDirList as $strDir) { $strFQDir = $strModuleDirSrc.$strDir; try { // Delete dir if exist. if (file_exists($strFQDir)) { Tools::deleteDirectory($strFQDir); } } catch (Exception $objException) { TNTOfficiel_Logger::logException($objException); return false; } } return true; } /** * Split a string un array of strings with a maximum of chars. * @param string $strArgSubject * @param int $intArgLength * * @return array */ public static function strSplitter($strArgSubject, $intArgLength = 32) { $intLength = (int)$intArgLength; $strSubject = trim((string)$strArgSubject); if (!($intLength > 0) || Tools::strlen($strSubject) <= $intLength) { return array( $strSubject ); } $arrResult = array(); while (Tools::strlen($strSubject) > 0) { $rxpSplitter = '/^\s*+([^\n]{0,'.$intLength.'})(:?\s+([^\n]*?))?\s*$/ui'; if (preg_match($rxpSplitter, $strSubject, $arrBackRefList) === 1) { // warp line. $arrResult[] = $arrBackRefList[1]; if (array_key_exists(3, $arrBackRefList)){ $strSubject = $arrBackRefList[3]; } else { $strSubject = ''; } } else { // cut word. $arrResult[] = Tools::substr($strSubject, 0, $intLength); $strSubject = Tools::substr($strSubject, $intLength); } } return $arrResult; } /** * Convert input string for compatibility with webservice. * Input: * a-z0-9àâäéèêëîïôöùûüñ²&"#'{}()[]|_\/ç^@°=+-£$¤%µ*<>?,.;:§! * Â’€ê^²ç#~&まa-z0-9âéïùñ * `²'|"/°-£¤µ*,.;:§()[] * Output: * a-z0-9aaaeeeeiioouuun²&"#'{}()[]|_\/c^@°=+-£$¤%µ*<>?,.;:§! A'Ee^²c#-&maa-z0-9aeiun '²'|"/°-£¤µ*,.;:§()[] * * @param $strArgInput * @return mixed */ public static function translitASCII($strArgInput, $intLength = 0) { $strRegExp = <<<'SQL' /[^a-z0-9àâäéèêëîïôöùûüñ£$¤%µ*<>?,.;:§!²&"#'|_\\\/ç^@°=+{}()[\]\-]++/ui SQL; $strNoControlChars = preg_replace('/[\p{Cn}]++/u', '?', $strArgInput); // PHP 7+ $boolExistTransliterator = function_exists('transliterator_transliterate'); if ($boolExistTransliterator) { $stASCII = transliterator_transliterate('Any-Latin; Latin-ASCII;', $strNoControlChars); } else { $arrRegExTranslitMap = array ( '/[            ]/u' => ' ', '/[©]/u' => '(C)', '/[«≪]/u' => '<<', '/[­˗‐‑‒–—―−﹘﹣-]/u' => '-', '/[®]/u' => '(R)', '/[»≫]/u' => '>>', '/[¼]/u' => ' 1/4', '/[½]/u' => ' 1/2', '/[¾]/u' => ' 3/4', '/[ÀÁÂÃÄÅĀĂĄǍǞǠǺȀȂȦȺΆΑḀẠẢẤẦẨẪẬẮẰẲẴẶÅA]/u' => 'A', '/[ÆǢǼ]/u' => 'AE', '/[ÇĆĈĊČƇȻḈℂℭⅭC]/u' => 'C', '/[ÈÉÊËĒĔĖĘĚƐȄȆȨɆΈΉΕΗḔḖḘḚḜẸẺẼẾỀỂỄỆℰE]/u' => 'E', '/[ÌÍÎÏĨĪĬĮİƖƗǏȈȊɪΊΙΪḬḮỈỊℐℑⅠI]/u' => 'I', '/[ÐĎĐƉƊƋΔḊḌḎḐḒⅅⅮD]/u' => 'D', '/[ÑŃŅŇŊƝǸɴΝṄṆṈṊℕN]/u' => 'N', '/[ÒÓÔÕÖØŌŎŐƠǑǪǬǾȌȎȪȬȮȰΌΏΟΩṌṎṐṒỌỎỐỒỔỖỘỚỜỞỠỢΩO]/u' => 'O', '/[×⁎﹡*]/u' => '*', '/[ÙÚÛÜŨŪŬŮŰŲƯǓǕǗǙǛȔȖɄṲṴṶṸṺỤỦỨỪỬỮỰU]/u' => 'U', '/[ÝŶŸƳȲɎʏΎΥΫϒϓϔẎỲỴỶỸỾY]/u' => 'Y', '/[ÞΘϴ]/u' => 'TH', '/[ß]/u' => 'ss', '/[àáâãäåāăąǎǟǡǻȁȃȧάαḁẚạảấầẩẫậắằẳẵặa]/u' => 'a', '/[æǣǽ]/u' => 'ae', '/[çćĉċčƈȼɕḉⅽc]/u' => 'c', '/[èéêëēĕėęěȅȇȩɇɛέήεηϵḕḗḙḛḝẹẻẽếềểễệℯⅇe]/u' => 'e', '/[ìíîïĩīĭįıǐȉȋɨͺΐίιϊḭḯỉịℹⅈⅰi]/u' => 'i', '/[ðďđƌȡɖɗδḋḍḏḑḓⅆⅾd]/u' => 'd', '/[ñńņňŋƞǹȵɲɳνṅṇṉṋn]/u' => 'n', '/[òóôõöøōŏőơǒǫǭǿȍȏȫȭȯȱοωόώṍṏṑṓọỏốồổỗộớờởỡợℴo]/u' => 'o', '/[÷⁄∕/]/u' => '/', '/[ùúûüũūŭůűųưǔǖǘǚǜȕȗʉṳṵṷṹṻụủứừửữựu]/u' => 'u', '/[ýÿŷƴȳɏΰυϋύẏẙỳỵỷỹỿy]/u' => 'y', '/[þθϑ]/u' => 'th', '/[ĜĞĠĢƓǤǦǴɢʛΓḠG]/u' => 'G', '/[ĝğġģǥǧǵɠɡγḡℊg]/u' => 'g', '/[ĤĦȞʜḢḤḦḨḪℋℍH]/u' => 'H', '/[ĥħȟɦɧḣḥḧḩḫẖℎh]/u' => 'h', '/[IJ]/u' => 'IJ', '/[ij]/u' => 'ij', '/[ĴɈJ]/u' => 'J', '/[ĵǰȷɉɟʝϳⅉj]/u' => 'j', '/[ĶƘǨΚḰḲḴKK]/u' => 'K', '/[ķƙǩκϰḱḳḵk]/u' => 'k', '/[ĸʠq]/u' => 'q', '/[ĹĻĽĿŁȽʟΛḶḸḺḼℒⅬL]/u' => 'L', '/[ĺļľŀłƚȴɫɬɭλḷḹḻḽℓⅼl]/u' => 'l', '/[ʼn]/u' => '\'n', '/[Œɶ]/u' => 'OE', '/[œ]/u' => 'oe', '/[ŔŖŘȐȒɌʀΡṘṚṜṞℛℜℝR]/u' => 'R', '/[ŕŗřȑȓɍɼɽɾρϱṙṛṝṟr]/u' => 'r', '/[ŚŜŞŠȘΣϷϹϺṠṢṤṦṨS]/u' => 'S', '/[śŝşšſșȿʂςσϲϸϻṡṣṥṧṩẛẜẝs]/u' => 's', '/[ŢŤŦƬƮȚȾΤṪṬṮṰT]/u' => 'T', '/[ţťŧƫƭțȶʈτṫṭṯṱẗt]/u' => 't', '/[ŴẀẂẄẆẈW]/u' => 'W', '/[ŵẁẃẅẇẉẘw]/u' => 'w', '/[ŹŻŽƵȤΖẐẒẔℤℨZ]/u' => 'Z', '/[źżžƶȥɀʐʑζẑẓẕz]/u' => 'z', '/[ƀƃɓβϐḃḅḇb]/u' => 'b', '/[ƁƂɃʙΒḂḄḆℬB]/u' => 'B', '/[ƑḞℱF]/u' => 'F', '/[ƒḟf]/u' => 'f', '/[ƕ]/u' => 'hv', '/[Ƣ]/u' => 'OI', '/[ƣ]/u' => 'oi', '/[ƤΠṔṖℙP]/u' => 'P', '/[ƥπϖṕṗp]/u' => 'p', '/[ƲṼṾỼⅤV]/u' => 'V', '/[DŽDZ]/u' => 'DZ', '/[DžDz]/u' => 'Dz', '/[dždzʣʥ]/u' => 'dz', '/[LJ]/u' => 'LJ', '/[Lj]/u' => 'Lj', '/[lj]/u' => 'lj', '/[NJ]/u' => 'NJ', '/[Nj]/u' => 'Nj', '/[nj]/u' => 'nj', '/[Ǯ]/u' => 'Ʒ', '/[ǯ]/u' => 'ʒ', '/[ȸ]/u' => 'db', '/[ȹ]/u' => 'qp', '/[ɱμḿṁṃⅿm]/u' => 'm', '/[ʋṽṿỽⅴv]/u' => 'v', '/[ʦ]/u' => 'ts', '/[ʪ]/u' => 'ls', '/[ʫ]/u' => 'lz', '/[ʹʻʼʽˈʹ‘’‛′']/u' => '\'', '/[ʺ“”‟″"]/u' => '"', '/[˂‹﹤<]/u' => '<', '/[˃›﹥>]/u' => '>', '/[˄ˆ^]/u' => '^', '/[ˋ`]/u' => '`', '/[ː﹕:]/u' => ':', '/[˖﹢+]/u' => '+', '/[˜~]/u' => '~', '/[̀]/u' => '̀', '/[́]/u' => '́', '/[̓]/u' => '̓', '/[̈́]/u' => '̈́', '/[;﹔;]/u' => ';', '/[·]/u' => '·', '/[ΜḾṀṂℳⅯM]/u' => 'M', '/[ΞẊẌⅩX]/u' => 'X', '/[Φ]/u' => 'PH', '/[Χ]/u' => 'CH', '/[Ψ]/u' => 'PS', '/[ξẋẍℌⅹx]/u' => 'x', '/[φϕ]/u' => 'ph', '/[χ]/u' => 'ch', '/[ψ]/u' => 'ps', '/[ẞ]/u' => 'SS', '/[Ỻ]/u' => 'LL', '/[ỻ]/u' => 'll', '/[‖∥]/u' => '||', '/[‚﹐﹑,]/u' => ',', '/[„]/u' => ',,', '/[․﹒.]/u' => '.', '/[‥]/u' => '..', '/[…]/u' => '...', '/[‼]/u' => '!!', '/[⁅﹝[]/u' => '[', '/[⁆﹞]]/u' => ']', '/[⁇]/u' => '??', '/[⁈]/u' => '?!', '/[⁉]/u' => '!?', '/[₠]/u' => 'CE', '/[₢]/u' => 'Cr', '/[₣]/u' => 'Fr.', '/[₤]/u' => 'L.', '/[₧]/u' => 'Pts', '/[₹]/u' => 'Rs', '/[₺]/u' => 'TL', '/[℀]/u' => 'a/c', '/[℁]/u' => 'a/s', '/[℅]/u' => 'c/o', '/[℆]/u' => 'c/u', '/[№]/u' => 'No', '/[ℚQ]/u' => 'Q', '/[℞]/u' => 'Rx', '/[℡]/u' => 'TEL', '/[℻]/u' => 'FAX', '/[⅓]/u' => ' 1/3', '/[⅔]/u' => ' 2/3', '/[⅕]/u' => ' 1/5', '/[⅖]/u' => ' 2/5', '/[⅗]/u' => ' 3/5', '/[⅘]/u' => ' 4/5', '/[⅙]/u' => ' 1/6', '/[⅚]/u' => ' 5/6', '/[⅛]/u' => ' 1/8', '/[⅜]/u' => ' 3/8', '/[⅝]/u' => ' 5/8', '/[⅞]/u' => ' 7/8', '/[⅟]/u' => ' 1/', '/[Ⅱ]/u' => 'II', '/[Ⅲ]/u' => 'III', '/[Ⅳ]/u' => 'IV', '/[Ⅵ]/u' => 'VI', '/[Ⅶ]/u' => 'VII', '/[Ⅷ]/u' => 'VIII', '/[Ⅸ]/u' => 'IX', '/[Ⅺ]/u' => 'XI', '/[Ⅻ]/u' => 'XII', '/[ⅱ]/u' => 'ii', '/[ⅲ]/u' => 'iii', '/[ⅳ]/u' => 'iv', '/[ⅵ]/u' => 'vi', '/[ⅶ]/u' => 'vii', '/[ⅷ]/u' => 'viii', '/[ⅸ]/u' => 'ix', '/[ⅺ]/u' => 'xi', '/[ⅻ]/u' => 'xii', '/[∖﹨\]/u' => '\\', '/[∣|]/u' => '|', '/[﹖?]/u' => '?', '/[﹗!]/u' => '!', '/[﹙(]/u' => '(', '/[﹚)]/u' => ')', '/[﹛{]/u' => '{', '/[﹜}]/u' => '}', '/[﹟#]/u' => '#', '/[﹠&]/u' => '&', '/[﹦=]/u' => '=', '/[﹩$]/u' => '$', '/[﹪%]/u' => '%', '/[﹫@]/u' => '@', '/[0]/u' => '0', '/[1]/u' => '1', '/[2]/u' => '2', '/[3]/u' => '3', '/[4]/u' => '4', '/[5]/u' => '5', '/[6]/u' => '6', '/[7]/u' => '7', '/[8]/u' => '8', '/[9]/u' => '9', '/[_]/u' => '_', '/[⦅]/u' => '((', '/[⦆]/u' => '))', ); $stASCII = preg_replace(array_keys($arrRegExTranslitMap), $arrRegExTranslitMap, $strNoControlChars); } $arrRegExMap = array( '/[~]/u' => '-', '/[’`]/u' => '\'', '/[€]/u' => 'E' ); $stASCIICompat = preg_replace(array_keys($arrRegExMap), $arrRegExMap, $stASCII); $stASCIIFilter = preg_replace($strRegExp, ' ', $stASCIICompat); $stASCIIFilterTrim = trim($stASCIIFilter); $stASCIIFilterFinal = $stASCIIFilterTrim; if ($intLength > 0) { $stASCIIFilterFinal = Tools::substr($stASCIIFilterTrim, 0, $intLength); } return $stASCIIFilterFinal; } /** * @param $strArgValue * @return string */ public static function encodeBase64($strArgValue) { return (string)base64_encode($strArgValue); } /** * @param $strArgValue * @return string */ public static function decodeBase64($strArgValue) { return (string)base64_decode($strArgValue); } /** * @param $strArgInflateValue * @return string */ public static function deflate($strArgInflateValue) { return (string)base64_encode(gzdeflate($strArgInflateValue)); } /** * @param $strArgDeflateValue * @return string */ public static function inflate($strArgDeflateValue) { return (string)gzinflate(base64_decode($strArgDeflateValue)); } /** * Donwload an existing file or content. * * @param string $strFileLocation * @param string|null $strContent * @param string $strContentType * * @return bool false if error. */ public static function download($strFileLocation, $strContent = null, $strContentType = 'application/octet-stream') { // File location must be a string. if (!is_string($strFileLocation)) { return false; } // If content, must be a string. if ($strContent !== null && !is_string($strContent)) { return false; } // If no content, file must exist. if ($strContent === null && !file_exists($strFileLocation)) { return false; } // End output buffer. if (ob_get_length() > 0) { ob_end_clean(); } // Set header. ob_start(); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: public'); header('Content-Description: File Transfer'); header('Content-type: '.$strContentType); header('Content-Disposition: attachment; filename="'.basename($strFileLocation).'"'); header('Content-Transfer-Encoding: binary'); ob_end_flush(); // Output content. if ($strContent !== null) { echo $strContent; } else { readfile($strFileLocation); } // We want to be sure that download content is the last thing this controller will do. exit; } /** * @param $strArgURL * @param null $arrArgOptions * * @return array * * @throws Exception */ public static function cURLRequest($strArgURL, $arrArgOptions = null) { TNTOfficiel_Logstack::log(); // Check extension. if (!extension_loaded('curl')) { throw new Exception(sprintf('PHP cURL extension is required')); } $strURL = trim($strArgURL); $arrResult = array( 'options' => array( // Check server certificate's name against host. // 0: disable, 2: enable. CURLOPT_SSL_VERIFYHOST => 0, // Check server peer's certificate authenticity through certification authority (CA) for SSL/TLS. CURLOPT_SSL_VERIFYPEER => true, // Path to Certificate Authority (CA) bundle. // https://curl.haxx.se/docs/caextract.html // https://curl.haxx.se/ca/cacert.pem CURLOPT_CAINFO => _PS_CACHE_CA_CERT_FILE_, // Start a new cookie session (ignore all previous cookies session) CURLOPT_COOKIESESSION => true, // Follow HTTP 3xx redirects. CURLOPT_FOLLOWLOCATION => true, // Max redirects allowed. CURLOPT_MAXREDIRS => 8, // curl_exec return response string instead of true (no direct output). CURLOPT_RETURNTRANSFER => true, // Include response header in output. //CURLOPT_HEADER => false, // Include request header ? //CURLINFO_HEADER_OUT => false, // HTTP code >= 400 considered as error. Use curl_error (curl_exec return false ?). //CURLOPT_FAILONERROR => true, // Proxy. //CURLOPT_PROXY => $strProxy //CURLOPT_PROXYUSERPWD => 'user:password', //CURLOPT_PROXYAUTH => 1, //CURLOPT_PROXYPORT => 80, //CURLOPT_PROXYTYPE => CURLPROXY_HTTP, // Timeout for connection to the server. CURLOPT_CONNECTTIMEOUT => TNTOfficiel::REQUEST_CONNECTTIMEOUT, // Timeout global. CURLOPT_TIMEOUT => TNTOfficiel::REQUEST_TIMEOUT ) ); if (is_array($arrArgOptions)) { $arrResult['options'] = $arrArgOptions + $arrResult['options']; } $rscCURLHandler = curl_init(); foreach ($arrResult['options'] as $intCURLConst => $mxdValue) { // May warn if open_basedir or deprecated safe_mode set. if ((ini_get('safe_mode') || ini_get('open_basedir')) && $intCURLConst === CURLOPT_FOLLOWLOCATION ) { continue; } curl_setopt($rscCURLHandler, $intCURLConst, $mxdValue); } curl_setopt($rscCURLHandler, CURLOPT_URL, $strURL); // curl_exec return false on error. $arrResult['response'] = curl_exec($rscCURLHandler); $arrResult['info'] = curl_getinfo($rscCURLHandler); $arrResult['error'] = curl_error($rscCURLHandler); curl_close($rscCURLHandler); return $arrResult; } }