/** * Retourne le debug_backtrace purgé des références à certains fichiers (et/ou chemins). * * @param array $pIgnorePaths Chemins à ignorer * @param integer $pLevel Nombre de niveau d'appels à ignorer. * @return array debug_backtrace */ private static function _filtered_debug_backtrace($pIgnorePaths = null, $pLevel = 0) { static $recurse = false; if ($recurse) { return array(); } $recurse = true; try { // Chemins à ignorer $ignorePaths = array(__FILE__, COPIX_CORE_PATH . 'shortcuts.lib.php', COPIX_TEMP_PATH); if (is_array($pIgnorePaths)) { $ignorePaths = array_merge($ignorePaths, $pIgnorePaths); } // Construit la regex pour vérifier les chemins $regex = array(); foreach ($ignorePaths as $path) { $regex[] = preg_quote(CopixConfig::getRealPath($path), '/'); } $pathRegex = '/^(' . implode('|', $regex) . ')/i'; // Filtre la pile d'appel $backtrace = array_slice(debug_backtrace(), $pLevel + 2); foreach ($backtrace as $k => $step) { if (isset($step['file']) && preg_match($pathRegex, $step['file'])) { unset($backtrace[$k]); } } $recurse = false; return array_values($backtrace); } catch (Exception $e) { $recurse = false; throw $e; } }
private function assertPathEquals($expected, $actual, $message = null) { $this->assertEquals(empty($expected) ? $expected : CopixConfig::getRealPath($expected), empty($actual) ? $actual : CopixConfig::getRealPath($actual), $message); }
/** * Filtre les fichiers de classe. * * Accepte le fichiers nommés Copix*.class.php et ICopix*.class.php. * Remplit $this->fileIncludes au fur et à mesure. * * @see CopixFile::findFiles() */ public function _classFileFilter($fullPath, $relativePath, $basePath, $depth) { if (!is_dir($fullPath) && preg_match('/^(I?Copix\\w+)\\.class\\.php$/i', basename($fullPath), $matches)) { // Ajout le lien classe=>fichier dans potentialClassPaths $this->_addPotentialClassPath($matches[1], $fullPath); $realPath = CopixConfig::getRealPath($fullPath); if (isset($this->fileIncludes[$realPath])) { return false; } $this->fileIncludes[$realPath] = sprintf("%s.'%s'", $this->basePaths[$basePath], $relativePath); return true; } return false; }
/** * Détermine si un chemin peut-être défini relativement à l'une des constantes COPIX_*_PATH. * * @param string $pPath Chemin à analyser. * @return array Un tableau array($prefixe, $cheminRelatif), si aucun préfixe ne correspond $prefixe == null */ public static function getCopixPathPrefix($pPath) { $pPath = CopixConfig::getRealPath($pPath); foreach (self::$_copixPathPrefixes as $name => $path) { if ($path === true) { $path = self::$_copixPathPrefixes[$name] = CopixConfig::getRealPath(constant($name)); } $length = strlen($path); if (substr($pPath, 0, $length) == $path) { return array($name, substr($pPath, $length)); } } return array(null, $pPath); }