WP_CLI

Extractor::extract_tarball()private staticWP-CLI 1.0

Extract a tarball to a specific destination.

Method of the class: Extractor{}

No Hooks.

Return

null. Nothing.

Usage

$result = Extractor::extract_tarball( $tarball, $dest );
$tarball(string) (required)
-
$dest(string) (required)
-

Extractor::extract_tarball() code WP-CLI 2.8.0-alpha

private static function extract_tarball( $tarball, $dest ) {
	// Ensure the destination folder exists or can be created.
	if ( ! self::ensure_dir_exists( $dest ) ) {
		throw new Exception( "Could not create folder '{$dest}'." );
	}

	if ( class_exists( 'PharData' ) ) {
		try {
			$phar    = new PharData( $tarball );
			$name    = Utils\basename( $tarball );
			$tempdir = Utils\get_temp_dir()
						. uniqid( 'wp-cli-extract-tarball-', true )
						. "-{$name}";

			$phar->extractTo( $tempdir );

			self::copy_overwrite_files(
				self::get_first_subfolder( $tempdir ),
				$dest
			);

			self::rmdir( $tempdir );
			return;
		} catch ( Exception $e ) {
			WP_CLI::warning(
				"PharData failed, falling back to 'tar xz' ("
				. $e->getMessage() . ')'
			);
			// Fall through to trying `tar xz` below.
		}
	}

	// Ensure relative paths cannot be misinterpreted as hostnames.
	// Prepending `./` will force tar to interpret it as a filesystem path.
	if ( self::path_is_relative( $tarball ) ) {
		$tarball = "./{$tarball}";
	}

	if ( ! file( $tarball )
		|| ! is_readable( $tarball )
		|| filesize( $tarball ) <= 0 ) {
		throw new Exception( "Invalid zip file '{$tarball}'." );
	}

	// Note: directory must exist for tar --directory to work.
	$cmd = Utils\esc_cmd(
		'tar xz --strip-components=1 --directory=%s -f %s',
		$dest,
		$tarball
	);

	$process_run = WP_CLI::launch(
		$cmd,
		false /*exit_on_error*/,
		true /*return_detailed*/
	);

	if ( 0 !== $process_run->return_code ) {
		throw new Exception(
			sprintf(
				'Failed to execute `%s`: %s.',
				$cmd,
				self::tar_error_msg( $process_run )
			)
		);
	}
}