Может быть, я задаю неправильный вопрос, я просто не знаю, как определить его более конкретно, извините за это.
Я хочу создать ссылки (src в теге img) это выглядит так:
«bla-bla.com/7e0cfd63-dfc1-4038-A859-ff201dea7b65«и сможет» расшифровать «его обратно.
Причина почему>
Мои ссылки (src в теге img) сейчас так выглядимMYDOMAIN / SomeFolder / image1.jpg«, так что если пользователь изменится»image1.jpg«до»image2.jpg«он получит« прямой доступ »(я думаю, это так и называется).
Поэтому я хочу предотвратить «прямой доступ», но все же иметь возможность делиться ссылками.
Может быть, я слишком усложняю проблему, и есть другой — простой способ сделать это или какое-то расширение php для этой работы, пожалуйста, дайте мне знать.
Сервер:
выиграть 2012 р2
Apache + php5 + MySQL
Постскриптум
«7e0cfd63-dfc1-4038-a859-ff201dea7b65» — это UUID, верно?
Я видел это в YouTube ссылки на видео.
Поиск в Google дал много результатов для UUID / GUID скриптов / техники / как это работает и так далее, но я не смог найти реализацию для ссылок …
P.P.S
если вы перейдете к изображению моего профиля здесь на stackoverflow:
https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0е?с = 48&д = identicon&г = П.Г.&е = 1
и измените F на D, вы получите другое изображение
https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0d?с = 48&д = identicon&г = П.Г.&е = 1
Это то, чего я не хочу.
Я бы предложил использовать:
mod_rewrite
mod_rewrite
Вы используете это, чтобы перенаправить все URL, которые соответствуют не настоящие папка для сценария декодирования. Именование фальшивой папки imgs
Конфигурация apache будет выглядеть (не проверено):
RewriteEngine on
RewriteRule ^/img/(.*)$ get_image.php?uuid=$1 [L]
Это должно соответствовать URL, как /img/7e0cfd63-dfc1-4038-a859-ff201dea7b65
и перенаправить на /get_image.php?uuid=7e0cfd63-dfc1-4038-a859-ff201dea7b65
, (Ваши изображения теперь источник: src="/img/7e0cfd63-dfc1-4038-a859-ff201dea7b65"
)
Этот скрипт будет использовать базу данных, чтобы выяснить реальное местоположение изображения, которое также может находиться за пределами веб-корня вашего приложения! Однако Apache должен иметь доступ к файлу (на основании разрешений файловой системы). Для этого примера давайте предположим, что все ваши изображения в /data/mydomain/images
, Ваш скрипт может выглядеть так:
$image_id = $_GET['uuid'];
// ...
$sql = "SELECT * FROM images WHERE uuid='$image_id' LIMIT 1";
$result = mysql_query($sql);
$r = mysql_fetch_array($result);
// DB has the RELATIVE path
$imagepath = "/data/mydomain/images" . $r['path'];
// Produce proper Image
header("Content-Type: image/jpeg");
header("Content-Length: " . filesize($imagepath));
echo file_get_contents("$imagepath");
Обратите внимание, что потребуется больше кода, если вы хотите поддерживать больше типов изображений / пантомимы.
Наконец, в вашей базе данных вам нужно по крайней мере два поля в images
Таблица:
uuid
: UUID изображения. Сделайте это первичным ключом или, если вы предпочитаете иметь целочисленный ключ auto_increment, индексируйте этот столбец (для производительности)rpath
: Относительный путь к изображению в месте хранения (например: /somefolder/image1.jpg
)Это должно быть все :). Я не проверял ничего из вышеперечисленного, но, собрав все вместе, должен достичь того, что вы хотите
Других решений пока нет …