Интересно, может ли кто-нибудь помочь мне.
Я использую программное обеспечение Augigma 'Image Uploader', чтобы пользователи могли добавлять и просматривать изображения для записей, которые они создают, с данными изображения, собранными и извлекаемыми через XML-файл.
Одна из страниц, которые я собрал, создает галерею, которая позволяет пользователю просматривать изображения, как индивидуально, так и как часть слайд-шоу «fancybox». Сценарий для этого показан ниже.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <?php $galleryPath = 'UploadedFiles/'; $thumbnailsPath = $galleryPath . 'Thumbnails/'; $absGalleryPath = realpath($galleryPath) . DIRECTORY_SEPARATOR; $descriptions = new DOMDocument('1.0'); $descriptions->load($absGalleryPath . 'files.xml'); ?> <head> <title>Gallery</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link href="Libraries/fancybox/jquery.fancybox-1.3.1.css" rel="stylesheet" type="text/css" /> <link href="Styles/style.css" rel="stylesheet" type="text/css" /> <!--[if IE]> <link href="Styles/ie.css" rel="stylesheet" type="text/css" /> <![endif]--> <script src="Libraries/jquery/jquery-1.4.3.min.js" type="text/javascript"></script> <script src="Libraries/fancybox/jquery.fancybox-1.3.1.pack.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { $('a.fancybox').fancybox(); }); </script> <style type="text/css"> <!-- .style1 { font-size: 14px; margin-right: 110px; } .style4 {font-size: 12px} --> </style> </head> <body style="font-family: Calibri; color: #505050; font-size: 9px; border-bottom-width: thin; margin-top: 5px; margin-left: -475px; margin-right: 1px; margin-bottom: -10px;"> <div align="right" class="style1"> <a href = "imagefolders.php" /> View Uploaded Images In Folder Structure <a/> ← View All Uploaded Images </div> <form id="gallery" class="page"> <div id="container"> <div id="center"> <div class="aB"> <div class="aB-B"> <?php if ('Uploaded files' != $current['title']) :?> <?php endif;?> <div class="demo"> <div class="inner"> <div class="container"> <div class="gallery"> <ul class="gallery-image-list"> <?php for ($i = 0; $i < $descriptions->documentElement->childNodes->length; $i++) : $xmlFile = $descriptions->documentElement->childNodes->item($i); $name = htmlentities($xmlFile->getAttribute('originalname'), ENT_COMPAT, 'UTF-8'); $description = htmlentities($xmlFile->getAttribute('description'), ENT_COMPAT, 'UTF-8'); $folder = htmlentities($xmlFile->getAttribute('folder'), ENT_COMPAT, 'UTF-8'); $source = $galleryPath . rawurlencode($xmlFile->getAttribute('source')); $thumbnail = $thumbnailsPath . rawurlencode($xmlFile->getAttribute('thumbnail')); ?> <li class="item"> <a class="fancybox" target="_blank" rel="original" href="<?php echo $source; ?>"><img class="preview" alt="<?php echo $name; ?>" src="<?php echo $thumbnail; ?>" /></a> </li> <li class="item"></li> <p><span class="style4"><b>Image Description:</b> <?php echo htmlentities($xmlFile->getAttribute('description'));?> <br /> <b>Image contained in folder:</b> <?php echo htmlentities($xmlFile->getAttribute('folder'));?> </span><br /> <?php endfor; ?> </li> </p> </ul> </div> </div> </div> </div> </div> </div> </div> </div> <div class="aB-a"> </div> </div> </div> </div> </form> </body> </html>
То, что я хотел бы сделать, – теперь сделать изображения, которые извлекаются, зависит от пользователя, т. Е. Пользователь А может просматривать только их изображения.
Если эта информация извлекалась прямо из базы данных mySQL, я знаю, что в PHP я могу использовать оператор SELECT WHERE для фильтрации возвращаемых записей, но может ли кто-нибудь сказать мне, пожалуйста, есть ли эквивалент XML, который я мог бы использовать?
Большое спасибо
Разрешить пользователям просматривать только собственные загруженные изображения – не такая простая задача. Если изображения хранятся в общедоступной папке, то любой может просматривать изображения с помощью своего браузера.
Для этого существует несколько альтернатив, таких как:
сохранение изображений за пределами корня сети и выборка изображений с использованием php, т. е.
Вместо предоставления ссылки на изображение. Предоставьте ссылку на скрипт cgi, который автоматически предоставит правильный заголовок и содержимое изображения.
Например: image.php? Sample.jpg
Затем вы можете убедиться, что они уже прошли аутентификацию (например, передают идентификатор сеанса) в качестве части ссылки.
Это будет частью заголовка, а затем ваши данные изображения могут следовать.
<?php $file = basename(urldecode($_GET['file'])); $fileDir = '/path/to/files/'; if (file_exists($fileDir . $file)) { //perform some authorisation check ... ... // Note: You should probably do some more checks // on the filetype, size, etc. $contents = file_get_contents($fileDir . $file); // Note: You should probably implement some kind // of check on filetype header('Content-type: image/jpeg'); echo $contents; } ?>