win_is_writable()
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() 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;
}