Merge pull request #2675 from HB9HIL/check-folder-permissions

Debug View - Check File Permissions recursive
这个提交包含在:
Peter Goodhall 2023-11-12 11:57:09 +00:00 提交者 GitHub
当前提交 838051452c
找不到此签名对应的密钥
GPG 密钥 ID: 4AEE18F83AFDEB23

查看文件

@ -15,48 +15,16 @@ class Debug extends CI_Controller {
$this->load->helper('file'); $this->load->helper('file');
// Test writing to backup folder // Test writing to backup folder
if ( ! write_file('backup/myfile.txt', "dummydata")) $backup_folder = $this->is_really_writable('backup');
{ $data['backup_folder'] = $backup_folder;
$data['backup_folder'] = false;
}
else
{
if(unlink(realpath('backup/myfile.txt'))) {
$data['backup_folder'] = true;
} else {
$data['backup_folder'] = false;
}
}
// Test writing to updates folder // Test writing to updates folder
if ( ! write_file('updates/myfile.txt', "dummydata")) $updates_folder = $this->is_really_writable('updates');
{ $data['updates_folder'] = $updates_folder;
$data['updates_folder'] = false;
}
else
{
if(unlink(realpath('updates/myfile.txt'))) {
$data['updates_folder'] = true;
} else {
$data['updates_folder'] = false;
}
}
// Test writing to uploads folder // Test writing to uploads folder
if ( ! write_file('uploads/myfile.txt', "dummydata")) $uploads_folder = $this->is_really_writable('uploads');
{ $data['uploads_folder'] = $uploads_folder;
$data['uploads_folder'] = false;
}
else
{
if(unlink(realpath('uploads/myfile.txt'))) {
$data['uploads_folder'] = true;
} else {
$data['uploads_folder'] = false;
}
}
$data['page_title'] = "Debug"; $data['page_title'] = "Debug";
@ -65,5 +33,29 @@ class Debug extends CI_Controller {
$this->load->view('interface_assets/footer'); $this->load->view('interface_assets/footer');
} }
private function is_really_writable($folder)
{
// Get the absolute path to the folder
$path = FCPATH . $folder;
// Check if the folder exists
if (!file_exists($path)) {
return false;
}
// Check if the folder is writable
if (is_writable($path)) {
// Check if the subdirectories are writable (recursive check)
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
foreach ($iterator as $item) {
if (!is_writable($item->getPathname())) {
return false;
}
}
return true;
}
return false;
}
} }