- 16, May 2024
- #1
Хорошо.
Я создаю галерею, где пользователи могут войти в систему для загрузки в свои папки или просто просмотреть страницу через «общедоступный» (не вошедший в систему) — я пытаюсь сделать возможным делиться загрузками из вошедшего в систему пользователя в общую папку без необходимости дублировать файлы.
Для этого я пытаюсь использовать symlink() - который работает (в том смысле, что файл, который я нажимаю «сделать общедоступным», получает символическую ссылку, созданную в общей папке, - однако ссылка не возвращается к фактическому файлу в папке пользователя).
Я немного в растерянности относительно того, что мне нужно делать.
Код make_public выглядит следующим образом:
Не совсем понимаю, почему, потому что если я повторю имя пользователя $username, оно покажет правильное значение. Ссылка создается в правильной папке, но не распознается как ссылка, если я использую для нее is_link() или readlink() (возвращает bool(false) в var_dump()).
Есть ли у кого-нибудь какие-нибудь советы о том, как я могу сделать это правильно? Например, общедоступный файл представляет собой изображение. Что мне нужно, чтобы показать его как обычный файл изображения в общедоступной галерее?
Я создаю галерею, где пользователи могут войти в систему для загрузки в свои папки или просто просмотреть страницу через «общедоступный» (не вошедший в систему) — я пытаюсь сделать возможным делиться загрузками из вошедшего в систему пользователя в общую папку без необходимости дублировать файлы.
Для этого я пытаюсь использовать symlink() - который работает (в том смысле, что файл, который я нажимаю «сделать общедоступным», получает символическую ссылку, созданную в общей папке, - однако ссылка не возвращается к фактическому файлу в папке пользователя).
Я немного в растерянности относительно того, что мне нужно делать.
Код make_public выглядит следующим образом:
<?php
if (!session_id()) { session_start(); };
require_once('conf/config.php');
$symbolic = (isset($_POST['filename']) ? $_POST['filename'] : '');
if (!empty($symbolic)) {
$username = ((isset($_POST['username']) && !empty($_POST['username'])) ? $_POST['username'].'/' : $username);
$fullpath = $userpath.$username.'/'.$symbolic;
$checkthumbs = explode('/',$symbolic);
$checkthumbs[1] = ($checkthumbs[0] == 'video') ? $checkthumbs[1].'.jpg' : $checkthumbs[1];
$thumbs = ($checkthumbs[0] == 'pictures' || $checkthumbs[0] == 'video') ? symlink($userpath.$username.$checkthumbs[0].'/thumbs/'.$checkthumbs[1],$userpath.'public/'.$checkthumbs[0].'/thumbs/'.$checkthumbs[1]) : false;
symlink($userpath.$username.$symbolic,$userpath.'public/'.$symbolic);
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
echo json_encode(["content"=>"File made public","infotype"=>"success"]);
} else {
header('location: gallery');
}
}
?>
PHP: Что происходит, так это то, что «цель» (первая часть символической ссылки ()), похоже, использует папку «public/» в качестве цели вместо папки с именем пользователя.
Не совсем понимаю, почему, потому что если я повторю имя пользователя $username, оно покажет правильное значение. Ссылка создается в правильной папке, но не распознается как ссылка, если я использую для нее is_link() или readlink() (возвращает bool(false) в var_dump()).
Есть ли у кого-нибудь какие-нибудь советы о том, как я могу сделать это правильно? Например, общедоступный файл представляет собой изображение. Что мне нужно, чтобы показать его как обычный файл изображения в общедоступной галерее?