XML'选择位置'语句

时间:2012-03-17 11:52:42

标签: php xml

我想知道是否有人可以帮助我。

我正在使用Aurigma的“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/> &larr; 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>

我现在想要做的是制作检索到的图像,特定于用户,即用户A只能查看他们的图像。

如果直接从mySQL数据库中检索此信息,我知道在PHP中我可以使用'SELECT WHERE'语句来过滤返回的记录,但有人可以告诉我,是否有可以使用的XML等价物?

非常感谢

1 个答案:

答案 0 :(得分:1)

允许用户仅查看他们自己上传的图像并非如此简单。如果图像存储在可公开访问的文件夹中,那么任何人都可以使用他们的浏览器查看图像。

为实现这一目标,有一些替代方案,例如:

  1. 将图像存储在数据库而不是文件系统中,
  2. 为文件系统上的每个用户创建一个新的foler并进行更改 每个文件夹的读写权限,或
  3. 将图像存储在Web根目录之外并获取图像 使用PHP即。

    而不是提供图像的链接。提供cgi的链接 脚本将自动提供正确的标题和 图像的内容。

    例如:image.php?sample.jpg

    然后,您可以确保它们已经过身份验证(例如,通过 会话ID)作为链接的一部分。

    这将是标题的一部分,然后您的图像数据可以 跟随。

    <?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;
    }
    
    ?>