private static function _checkReadWrite($directory) { $directory .= '/'; if (!is_dir($directory)) { echo sprintf('<tr class="fail"><td><strong>Directory %s does not exist or is not a directory.</strong></td></tr>', $directory); return false; } $octalPermissions = FileUtility::getOctalPermissions($directory); $proceed = true; /* Check for read. */ if (is_readable($directory)) { echo sprintf('<tr class="pass"><td>Directory %s is readable (permissions: %s).</td></tr>', $directory, $octalPermissions); } else { echo sprintf('<tr class="fail"><td><strong>Directory %s is not readable (permissions: %s).</strong></td></tr>', $directory, $octalPermissions); $proceed = false; } /* Check for write. */ if (is_writeable($directory)) { echo sprintf('<tr class="pass"><td>Directory %s is writeable (permissions: %s).</td></tr>', $directory, $octalPermissions); } else { echo sprintf('<tr class="fail"><td><strong>Directory %s is not writeable (permissions: %s).</strong></td></tr>', $directory, $octalPermissions); $proceed = false; } /* Test ACTUAL writeability by creating a file, not relying on is_writable() * as it sometimes returns a false positive. */ if (FileUtility::isDirectoryWritable($directory)) { echo sprintf('<tr class="pass"><td>Creating a file within %s succeeded.</td></tr>', $directory); } else { echo sprintf('<tr class="fail"><td><strong>Creating a file within %s failed. Check your permissions.</strong></td></tr>', $directory); $proceed = false; } /* Check for create directory ability. */ $testPath = $directory . 'testdir'; if (is_dir($testPath)) { FileUtility::recursivelyRemoveDirectory($testPath); } if (@mkdir($testPath, 0777)) { echo sprintf('<tr class="pass"><td>Directories can be created inside %s/.</td></tr>', $directory); } else { echo sprintf('<tr class="fail"><td><strong>Directories cannot be created inside %s/.</strong></td></tr>', $directory); $proceed = false; } if (is_dir($testPath)) { FileUtility::recursivelyRemoveDirectory($testPath); } return $proceed; }