fix: robust activity attachment path resolution
This commit is contained in:
parent
96493ac1a2
commit
78bc67fc8a
@ -7,18 +7,49 @@ $filelist = $attachment;
|
|||||||
$file_array = explode (',', $filelist);
|
$file_array = explode (',', $filelist);
|
||||||
|
|
||||||
function resolve_attachment_relative_path($filename) {
|
function resolve_attachment_relative_path($filename) {
|
||||||
$uploadRoot = FCPATH . 'file' . DIRECTORY_SEPARATOR;
|
$filename = trim($filename);
|
||||||
$pattern = $uploadRoot . '*' . DIRECTORY_SEPARATOR . '*' . DIRECTORY_SEPARATOR . $filename;
|
if ($filename === '') {
|
||||||
$matches = @glob($pattern);
|
return '';
|
||||||
if ($matches !== false) {
|
}
|
||||||
foreach ($matches as $match) {
|
|
||||||
if (is_file($match)) {
|
$normalized = str_replace('\\', '/', ltrim($filename, '/'));
|
||||||
$relative = str_replace('\\', '/', substr($match, strlen($uploadRoot)));
|
|
||||||
return 'file/' . $relative;
|
$directCandidates = [];
|
||||||
|
if (strpos($normalized, 'file/') === 0 || strpos($normalized, 'upload/') === 0) {
|
||||||
|
$directCandidates[] = $normalized;
|
||||||
|
} else {
|
||||||
|
$directCandidates[] = 'upload/' . $normalized;
|
||||||
|
$directCandidates[] = 'file/' . $normalized;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($directCandidates as $candidate) {
|
||||||
|
$absolutePath = FCPATH . str_replace('/', DIRECTORY_SEPARATOR, $candidate);
|
||||||
|
if (is_file($absolutePath)) {
|
||||||
|
return $candidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$basename = basename($normalized);
|
||||||
|
if ($basename === '') {
|
||||||
|
return 'upload/' . $normalized;
|
||||||
|
}
|
||||||
|
|
||||||
|
$roots = ['file', 'upload'];
|
||||||
|
foreach ($roots as $root) {
|
||||||
|
$rootPath = FCPATH . $root . DIRECTORY_SEPARATOR;
|
||||||
|
$pattern = $rootPath . '*' . DIRECTORY_SEPARATOR . '*' . DIRECTORY_SEPARATOR . $basename;
|
||||||
|
$matches = @glob($pattern);
|
||||||
|
if ($matches !== false) {
|
||||||
|
foreach ($matches as $match) {
|
||||||
|
if (is_file($match)) {
|
||||||
|
$relative = str_replace('\\', '/', substr($match, strlen($rootPath)));
|
||||||
|
return $root . '/' . $relative;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 'file/' . $filename;
|
|
||||||
|
return 'upload/' . $basename;
|
||||||
}
|
}
|
||||||
|
|
||||||
$i = 1;
|
$i = 1;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user