original_string: static public function copyRecursive( $source, $destination, $depth = -1, $dirMode = 0775, $fileMode = 0664 )
      {
          // Check if source file exists at all.
          if ( !is_file( $source ) && !is_dir( $source ) )
          {
              throw new ezcBaseFileNotFoundException( $source );
          }
  
          // Destination file should NOT exist
          if ( is_file( $destination ) || is_dir( $destination ) )
          {
              throw new ezcBaseFilePermissionException( $destination, ezcBaseFileException::WRITE );
          }
  
          // Skip non readable files in source directory
          if ( !is_readable( $source ) )
          {
              return;
          }
  
          // Copy
          if ( is_dir( $source ) )
          {
              mkdir( $destination );
              // To ignore umask, umask() should not be changed with
              // multithreaded servers...
              chmod( $destination, $dirMode );
          }
          elseif ( is_file( $source ) )
          {
              copy( $source, $destination );
              chmod( $destination, $fileMode );
          }
  
          if ( ( $depth === 0 ) ||
              ( !is_dir( $source ) ) )
          {
              // Do not recurse (any more)
              return;
          }
  
          // Recurse
          $dh = opendir( $source );
          while ( ( $file = readdir( $dh ) ) !== false )
          {
              if ( ( $file === '.' ) ||
                  ( $file === '..' ) )
              {
                  continue;
              }
  
              self::copyRecursive(
                  $source . '/' . $file,
                  $destination . '/' . $file,
                  $depth - 1, $dirMode, $fileMode
              );
          }
      }
code: static public function copyRecursive( $source, $destination, $depth = -1, $dirMode = 0775, $fileMode = 0664 )
      {
          // Check if source file exists at all.
          if ( !is_file( $source ) && !is_dir( $source ) )
          {
              throw new ezcBaseFileNotFoundException( $source );
          }
  
          // Destination file should NOT exist
          if ( is_file( $destination ) || is_dir( $destination ) )
          {
              throw new ezcBaseFilePermissionException( $destination, ezcBaseFileException::WRITE );
          }
  
          // Skip non readable files in source directory
          if ( !is_readable( $source ) )
          {
              return;
          }
  
          // Copy
          if ( is_dir( $source ) )
          {
              mkdir( $destination );
              // To ignore umask, umask() should not be changed with
              // multithreaded servers...
              chmod( $destination, $dirMode );
          }
          elseif ( is_file( $source ) )
          {
              copy( $source, $destination );
              chmod( $destination, $fileMode );
          }
  
          if ( ( $depth === 0 ) ||
              ( !is_dir( $source ) ) )
          {
              // Do not recurse (any more)
              return;
          }
  
          // Recurse
          $dh = opendir( $source );
          while ( ( $file = readdir( $dh ) ) !== false )
          {
              if ( ( $file === '.' ) ||
                  ( $file === '..' ) )
              {
                  continue;
              }
  
              self::copyRecursive(
                  $source . '/' . $file,
                  $destination . '/' . $file,
                  $depth - 1, $dirMode, $fileMode
              );
          }
      }
code_tokens: static public function copyRecursive ( $ source , $ destination , $ depth = - 1 , $ dirMode = 0775 , $ fileMode = 0664 ) { // Check if source file exists at all. if ( ! is_file ( $ source ) && ! is_dir ( $ source ) ) { throw new ezcBaseFileNotFoundException ( $ source ) ; } // Destination file should NOT exist if ( is_file ( $ destination ) || is_dir ( $ destination ) ) { throw new ezcBaseFilePermissionException ( $ destination , ezcBaseFileException :: WRITE ) ; } // Skip non readable files in source directory if ( ! is_readable ( $ source ) ) { return ; } // Copy if ( is_dir ( $ source ) ) { mkdir ( $ destination ) ; // To ignore umask, umask() should not be changed with // multithreaded servers... chmod ( $ destination , $ dirMode ) ; } elseif ( is_file ( $ source ) ) { copy ( $ source , $ destination ) ; chmod ( $ destination , $ fileMode ) ; } if ( ( $ depth === 0 ) || ( ! is_dir ( $ source ) ) ) { // Do not recurse (any more) return ; } // Recurse $ dh = opendir ( $ source ) ; while ( ( $ file = readdir ( $ dh ) ) !== false ) { if ( ( $ file === '.' ) || ( $ file === '..' ) ) { continue ; } self :: copyRecursive ( $ source . '/' . $ file , $ destination . '/' . $ file , $ depth - 1 , $ dirMode , $ fileMode ) ; } }
docstring: Recursively copy a file or directory.
  
  Recursively copy a file or directory in $source to the given
  destination. If a depth is given, the operation will stop, if the given
  recursion depth is reached. A depth of -1 means no limit, while a depth
  of 0 means, that only the current file or directory will be copied,
  without any recursion.
  
  You may optionally define modes used to create files and directories.
  
  @throws ezcBaseFileNotFoundException
  If the $sourceDir directory is not a directory or does not exist.
  @throws ezcBaseFilePermissionException
  If the $sourceDir directory could not be opened for reading, or the
  destination is not writeable.
  
  @param string $source
  @param string $destination
  @param int $depth
  @param int $dirMode
  @param int $fileMode
  @return void
docstring_tokens: Recursively copy a file or directory .