win_is_writable()WP 2.8.0

Workaround for Windows bug in is_writable() function

PHP has issues with Windows ACL's for determine if a directory is writable or not, this works around them by checking the ability to open files rather than relying upon PHP to interpret the OS ACL.

No Hooks.

Returns

bool. Whether the path is writable.

Usage

win_is_writable( $path );
$path(string) (required)
Windows path to check for write-ability.

Notes

See: https://bugs.php.net/bug.php?id=27609
See: https://bugs.php.net/bug.php?id=30931

Changelog

Since 2.8.0 Introduced.

win_is_writable() code WP 7.1

function win_is_writable( $path ) {
	if ( '/' === $path[ strlen( $path ) - 1 ] ) {
		// If it looks like a directory, check a random file within the directory.
		return win_is_writable( $path . uniqid( mt_rand() ) . '.tmp' );
	} elseif ( is_dir( $path ) ) {
		// If it's a directory (and not a file), check a random file within the directory.
		return win_is_writable( $path . '/' . uniqid( mt_rand() ) . '.tmp' );
	}

	// Check tmp file for read/write capabilities.
	$should_delete_tmp_file = ! file_exists( $path );

	$f = @fopen( $path, 'a' );
	if ( false === $f ) {
		return false;
	}
	fclose( $f );

	if ( $should_delete_tmp_file ) {
		unlink( $path );
	}

	return true;
}