You are here

function PclZipUtilPathInclusion in Loft Data Grids 7.2

Same name and namespace in other branches
  1. 6.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php \PclZipUtilPathInclusion()
2 calls to PclZipUtilPathInclusion()
PclZip::privCalculateStoredFilename in vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php
PclZip::privExtractFile in vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php, line 5477

Code

function PclZipUtilPathInclusion($p_dir, $p_path) {
  $v_result = 1;

  // ----- Look for path beginning by ./
  if ($p_dir == '.' || strlen($p_dir) >= 2 && substr($p_dir, 0, 2) == './') {
    $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE) . '/' . substr($p_dir, 1);
  }
  if ($p_path == '.' || strlen($p_path) >= 2 && substr($p_path, 0, 2) == './') {
    $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE) . '/' . substr($p_path, 1);
  }

  // ----- Explode dir and path by directory separator
  $v_list_dir = explode("/", $p_dir);
  $v_list_dir_size = sizeof($v_list_dir);
  $v_list_path = explode("/", $p_path);
  $v_list_path_size = sizeof($v_list_path);

  // ----- Study directories paths
  $i = 0;
  $j = 0;
  while ($i < $v_list_dir_size && $j < $v_list_path_size && $v_result) {

    // ----- Look for empty dir (path reduction)
    if ($v_list_dir[$i] == '') {
      $i++;
      continue;
    }
    if ($v_list_path[$j] == '') {
      $j++;
      continue;
    }

    // ----- Compare the items
    if ($v_list_dir[$i] != $v_list_path[$j] && $v_list_dir[$i] != '' && $v_list_path[$j] != '') {
      $v_result = 0;
    }

    // ----- Next items
    $i++;
    $j++;
  }

  // ----- Look if everything seems to be the same
  if ($v_result) {

    // ----- Skip all the empty items
    while ($j < $v_list_path_size && $v_list_path[$j] == '') {
      $j++;
    }
    while ($i < $v_list_dir_size && $v_list_dir[$i] == '') {
      $i++;
    }
    if ($i >= $v_list_dir_size && $j >= $v_list_path_size) {

      // ----- There are exactly the same
      $v_result = 2;
    }
    else {
      if ($i < $v_list_dir_size) {

        // ----- The path is shorter than the dir
        $v_result = 0;
      }
    }
  }

  // ----- Return
  return $v_result;
}