summaryrefslogtreecommitdiffstats
path: root/library/FileHandler.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/FileHandler.php')
-rw-r--r--library/FileHandler.php376
1 files changed, 188 insertions, 188 deletions
diff --git a/library/FileHandler.php b/library/FileHandler.php
index 7bcce61..05c756c 100644
--- a/library/FileHandler.php
+++ b/library/FileHandler.php
@@ -7,200 +7,200 @@ require 'Preprocessor.php';
* @author Jacob Oettinger
* @author Joakim Nygård
*/
-class Webgrind_FileHandler{
-
- private static $singleton = null;
-
-
- /**
- * @return Singleton instance of the filehandler
- */
- public static function getInstance(){
- if(self::$singleton==null)
- self::$singleton = new self();
- return self::$singleton;
- }
-
- private function __construct(){
- // Get list of files matching the defined format
- $files = $this->getFiles(Webgrind_Config::xdebugOutputFormat(), Webgrind_Config::xdebugOutputDir());
-
- // Get list of preprocessed files
+class Webgrind_FileHandler
+{
+
+ private static $singleton = null;
+
+
+ /**
+ * @return Singleton instance of the filehandler
+ */
+ public static function getInstance() {
+ if (self::$singleton==null)
+ self::$singleton = new self();
+ return self::$singleton;
+ }
+
+ private function __construct() {
+ // Get list of files matching the defined format
+ $files = $this->getFiles(Webgrind_Config::xdebugOutputFormat(), Webgrind_Config::xdebugOutputDir());
+
+ // Get list of preprocessed files
$prepFiles = $this->getPrepFiles('/\\'.Webgrind_Config::$preprocessedSuffix.'$/', Webgrind_Config::storageDir());
- // Loop over the preprocessed files.
- foreach($prepFiles as $fileName=>$prepFile){
- $fileName = str_replace(Webgrind_Config::$preprocessedSuffix,'',$fileName);
-
- // If it is older than its corrosponding original: delete it.
- // If it's original does not exist: delete it
- if(!isset($files[$fileName]) || $files[$fileName]['mtime']>$prepFile['mtime'] )
- unlink($prepFile['absoluteFilename']);
- else
- $files[$fileName]['preprocessed'] = true;
- }
- // Sort by mtime
- uasort($files,array($this,'mtimeCmp'));
-
- $this->files = $files;
- }
-
- /**
- * Get the value of the cmd header in $file
- *
- * @return void string
- */
- private function getInvokeUrl($file){
- if (preg_match('/.webgrind$/', $file))
- return 'Webgrind internal';
-
- // Grab name of invoked file.
- $fp = fopen($file, 'r');
+ // Loop over the preprocessed files.
+ foreach ($prepFiles as $fileName=>$prepFile) {
+ $fileName = str_replace(Webgrind_Config::$preprocessedSuffix,'',$fileName);
+
+ // If it is older than its corrosponding original: delete it.
+ // If it's original does not exist: delete it
+ if (!isset($files[$fileName]) || $files[$fileName]['mtime']>$prepFile['mtime'])
+ unlink($prepFile['absoluteFilename']);
+ else
+ $files[$fileName]['preprocessed'] = true;
+ }
+ // Sort by mtime
+ uasort($files,array($this,'mtimeCmp'));
+
+ $this->files = $files;
+ }
+
+ /**
+ * Get the value of the cmd header in $file
+ *
+ * @return void string
+ */
+ private function getInvokeUrl($file) {
+ if (preg_match('/.webgrind$/', $file))
+ return 'Webgrind internal';
+
+ // Grab name of invoked file.
+ $fp = fopen($file, 'r');
$invokeUrl = '';
- while ((($line = fgets($fp)) !== FALSE) && !strlen($invokeUrl)){
- if (preg_match('/^cmd: (.*)$/', $line, $parts)){
+ while ((($line = fgets($fp)) !== FALSE) && !strlen($invokeUrl)) {
+ if (preg_match('/^cmd: (.*)$/', $line, $parts)) {
$invokeUrl = isset($parts[1]) ? $parts[1] : '';
}
}
fclose($fp);
- if (!strlen($invokeUrl))
+ if (!strlen($invokeUrl))
$invokeUrl = 'Unknown!';
- return $invokeUrl;
- }
-
- /**
- * List of files in $dir whose filename has the format $format
- *
- * @return array Files
- */
- private function getFiles($format, $dir){
- $list = preg_grep($format,scandir($dir));
- $files = array();
-
- $scriptFilename = $_SERVER['SCRIPT_FILENAME'];
-
- # Moved this out of loop to run faster
- if (function_exists('xdebug_get_profiler_filename'))
- $selfFile = realpath(xdebug_get_profiler_filename());
- else
- $selfFile = '';
-
- foreach($list as $file){
- $absoluteFilename = $dir.$file;
-
- // Exclude webgrind preprocessed files
- if (false !== strstr($absoluteFilename, Webgrind_Config::$preprocessedSuffix))
- continue;
-
- // Make sure that script never parses the profile currently being generated. (infinite loop)
- if ($selfFile == realpath($absoluteFilename))
- continue;
-
- $invokeUrl = rtrim($this->getInvokeUrl($absoluteFilename));
- if (Webgrind_Config::$hideWebgrindProfiles && $invokeUrl == dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'index.php')
- continue;
-
-
- $files[$file] = array('absoluteFilename' => $absoluteFilename,
- 'mtime' => filemtime($absoluteFilename),
- 'preprocessed' => false,
- 'invokeUrl' => $invokeUrl,
- 'filesize' => $this->bytestostring(filesize($absoluteFilename))
- );
- }
- return $files;
- }
-
- /**
- * List of files in $dir whose filename has the format $format
- *
- * @return array Files
- */
- private function getPrepFiles($format, $dir){
- $list = preg_grep($format,scandir($dir));
- $files = array();
-
- $scriptFilename = $_SERVER['SCRIPT_FILENAME'];
-
- foreach($list as $file){
- $absoluteFilename = $dir.$file;
-
- // Make sure that script does not include the profile currently being generated. (infinite loop)
- if (function_exists('xdebug_get_profiler_filename') && realpath(xdebug_get_profiler_filename())==realpath($absoluteFilename))
- continue;
-
- $files[$file] = array('absoluteFilename' => $absoluteFilename,
- 'mtime' => filemtime($absoluteFilename),
- 'preprocessed' => true,
- 'filesize' => $this->bytestostring(filesize($absoluteFilename))
- );
- }
- return $files;
- }
- /**
- * Get list of available trace files. Optionally including traces of the webgrind script it self
- *
- * @return array Files
- */
- public function getTraceList(){
- $result = array();
- foreach($this->files as $fileName=>$file){
- $result[] = array('filename' => $fileName,
- 'invokeUrl' => str_replace($_SERVER['DOCUMENT_ROOT'].'/', '', $file['invokeUrl']),
- 'filesize' => $file['filesize'],
- 'mtime' => date(Webgrind_Config::$dateFormat, $file['mtime'])
- );
- }
- return $result;
- }
-
- /**
- * Get a trace reader for the specific file.
- *
- * If the file has not been preprocessed yet this will be done first.
- *
- * @param string File to read
- * @param Cost format for the reader
- * @return Webgrind_Reader Reader for $file
- */
- public function getTraceReader($file, $costFormat){
- $prepFile = Webgrind_Config::storageDir().$file.Webgrind_Config::$preprocessedSuffix;
- try{
- $r = new Webgrind_Reader($prepFile, $costFormat);
- } catch (Exception $e){
- // Preprocessed file does not exist or other error
- Webgrind_Preprocessor::parse(Webgrind_Config::xdebugOutputDir().$file, $prepFile);
- $r = new Webgrind_Reader($prepFile, $costFormat);
- }
- return $r;
- }
-
- /**
- * Comparison function for sorting
- *
- * @return boolean
- */
- private function mtimeCmp($a, $b){
- if ($a['mtime'] == $b['mtime'])
- return 0;
-
- return ($a['mtime'] > $b['mtime']) ? -1 : 1;
- }
-
- /**
- * Present a size (in bytes) as a human-readable value
- *
- * @param int $size size (in bytes)
- * @param int $precision number of digits after the decimal point
- * @return string
- */
- private function bytestostring($size, $precision = 0) {
- $sizes = array('YB', 'ZB', 'EB', 'PB', 'TB', 'GB', 'MB', 'KB', 'B');
- $total = count($sizes);
-
- while($total-- && $size > 1024) {
- $size /= 1024;
- }
- return round($size, $precision).$sizes[$total];
+ return $invokeUrl;
+ }
+
+ /**
+ * List of files in $dir whose filename has the format $format
+ *
+ * @return array Files
+ */
+ private function getFiles($format, $dir) {
+ $list = preg_grep($format,scandir($dir));
+ $files = array();
+
+ $scriptFilename = $_SERVER['SCRIPT_FILENAME'];
+
+ # Moved this out of loop to run faster
+ if (function_exists('xdebug_get_profiler_filename'))
+ $selfFile = realpath(xdebug_get_profiler_filename());
+ else
+ $selfFile = '';
+
+ foreach ($list as $file) {
+ $absoluteFilename = $dir.$file;
+
+ // Exclude webgrind preprocessed files
+ if (false !== strstr($absoluteFilename, Webgrind_Config::$preprocessedSuffix))
+ continue;
+
+ // Make sure that script never parses the profile currently being generated. (infinite loop)
+ if ($selfFile == realpath($absoluteFilename))
+ continue;
+
+ $invokeUrl = rtrim($this->getInvokeUrl($absoluteFilename));
+ if (Webgrind_Config::$hideWebgrindProfiles && $invokeUrl == dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'index.php')
+ continue;
+
+ $files[$file] = array('absoluteFilename' => $absoluteFilename,
+ 'mtime' => filemtime($absoluteFilename),
+ 'preprocessed' => false,
+ 'invokeUrl' => $invokeUrl,
+ 'filesize' => $this->bytestostring(filesize($absoluteFilename))
+ );
+ }
+ return $files;
+ }
+
+ /**
+ * List of files in $dir whose filename has the format $format
+ *
+ * @return array Files
+ */
+ private function getPrepFiles($format, $dir) {
+ $list = preg_grep($format,scandir($dir));
+ $files = array();
+
+ $scriptFilename = $_SERVER['SCRIPT_FILENAME'];
+
+ foreach ($list as $file) {
+ $absoluteFilename = $dir.$file;
+
+ // Make sure that script does not include the profile currently being generated. (infinite loop)
+ if (function_exists('xdebug_get_profiler_filename') && realpath(xdebug_get_profiler_filename())==realpath($absoluteFilename))
+ continue;
+
+ $files[$file] = array('absoluteFilename' => $absoluteFilename,
+ 'mtime' => filemtime($absoluteFilename),
+ 'preprocessed' => true,
+ 'filesize' => $this->bytestostring(filesize($absoluteFilename))
+ );
+ }
+ return $files;
+ }
+ /**
+ * Get list of available trace files. Optionally including traces of the webgrind script it self
+ *
+ * @return array Files
+ */
+ public function getTraceList() {
+ $result = array();
+ foreach ($this->files as $fileName=>$file) {
+ $result[] = array('filename' => $fileName,
+ 'invokeUrl' => str_replace($_SERVER['DOCUMENT_ROOT'].'/', '', $file['invokeUrl']),
+ 'filesize' => $file['filesize'],
+ 'mtime' => date(Webgrind_Config::$dateFormat, $file['mtime'])
+ );
+ }
+ return $result;
+ }
+
+ /**
+ * Get a trace reader for the specific file.
+ *
+ * If the file has not been preprocessed yet this will be done first.
+ *
+ * @param string File to read
+ * @param Cost format for the reader
+ * @return Webgrind_Reader Reader for $file
+ */
+ public function getTraceReader($file, $costFormat) {
+ $prepFile = Webgrind_Config::storageDir().$file.Webgrind_Config::$preprocessedSuffix;
+ try {
+ $r = new Webgrind_Reader($prepFile, $costFormat);
+ } catch (Exception $e) {
+ // Preprocessed file does not exist or other error
+ Webgrind_Preprocessor::parse(Webgrind_Config::xdebugOutputDir().$file, $prepFile);
+ $r = new Webgrind_Reader($prepFile, $costFormat);
+ }
+ return $r;
+ }
+
+ /**
+ * Comparison function for sorting
+ *
+ * @return boolean
+ */
+ private function mtimeCmp($a, $b) {
+ if ($a['mtime'] == $b['mtime'])
+ return 0;
+
+ return ($a['mtime'] > $b['mtime']) ? -1 : 1;
+ }
+
+ /**
+ * Present a size (in bytes) as a human-readable value
+ *
+ * @param int $size size (in bytes)
+ * @param int $precision number of digits after the decimal point
+ * @return string
+ */
+ private function bytestostring($size, $precision = 0) {
+ $sizes = array('YB', 'ZB', 'EB', 'PB', 'TB', 'GB', 'MB', 'KB', 'B');
+ $total = count($sizes);
+
+ while ($total-- && $size > 1024) {
+ $size /= 1024;
+ }
+ return round($size, $precision).$sizes[$total];
}
-} \ No newline at end of file
+}