【问题标题】:image retrieval from directory and session variable issues - php从目录和会话变量问题中检索图像 - php
【发布时间】:2015-06-06 07:34:22
【问题描述】:

我从服务器上的目录中检索图像时遇到问题,所以主要顺序是:在页面(multiupload.php)中,我添加了输入,允许预览图像,当用户提交时,将创建一个带有会话 ID 的新目录,然后将图像存储在唯一目录中,然后将页面定向到 (drag.php)。新加载的页面有一个带有不同 div 的画布,用于控制附加到该画布的过滤器。我的问题在于检索具有指定 s_id 的图像作为从一页到另一页的目录名称。

问:我是否正确检索会话变量?或适当地使用它们?

这是来自 multiupload.php 的上传脚本的必要 sn-ps。

<?php
  $dir_id = session_id(md5(uniqid()));
  session_start($dir_id);
  $path = "uploads/";
  $dir = $path.$dir_id;
  $path = $path.$dir_id."/";
  if (file_exists($dir)) {
    system('/bin/rm -rf ' . escapeshellarg($dir));
  } else {
    mkdir($path);
    chmod($path, 0722);  
  }
  $_SESSION["id"] = $dir_id;
  $_SESSION["directory"] = "/" . $dir;
  $_SESSION["path_name"] = $path;
?>

我定义了目录、整个路径和目录的 ID。我想在下一页中检索 id,但它没有正确执行。

这是drag.php中的检索代码

$realPath = 'uploads/'. echo $_SESSION['id'];

$handle = opendir(dirname(realpath(__FILE__)).$realPath;
while($file = readdir($handle)){
    if($file !== '.' && $file !== '..'){
        echo '<img src="uploads/'.$file.'" border="0" />';
    }
}

我的最终结果是我希望在页面上绘制所有图像。现在,我希望它们可以在任何可见的地方绘制。

如果我的问题不清楚,请随时编辑或评论我应该更改的地方。如果您需要更多代码或信息,请告诉我。

【问题讨论】:

  • 使用这一行 $realPath = 'uploads/'.$_SESSION['id'];而不是 $realPath = 'uploads/'。回声 $_SESSION['id'];
  • 很好的解释器@ApoorvBambarde。

标签: javascript php jquery html canvas


【解决方案1】:

这将只提供使用会话变量的目录中的图像文件。

<?php
  $dir=$_SESSION['id'];
  $realPath = '/uploads/'.$dir;
  $handle = opendir(dirname(realpath(__FILE__)).$realPath);
    while($file = readdir($handle)){
      if($file !== '.' && $file !== '..'){
      if(fnmatch('*.jpg', $file) || fnmatch('*.png', $file) || fnmatch('*.jpeg', $file)){
            echo '<img src="'.$realPath.'/'.$file.'"/>';
         }
    }
  }
?>

【讨论】:

    【解决方案2】:

    请将您的代码修改为以下代码:

    <?php
      $dir=$_SESSION['id'];
      $realPath = '/uploads/'.$dir;
      $handle = opendir(dirname(realpath(__FILE__)).$realPath);
        while($file = readdir($handle)){
          if($file !== '.' && $file !== '..'){
            echo '<img src="'.$realPath.'/'.$file.'" border="0" width="200" />';
        }
      }
    ?>
    

    我已经使用了这段代码,我得到了这样的 o/p:

    【讨论】:

      【解决方案3】:
      <?php
        $dir_id = session_id(md5(uniqid()));
        session_start();
        $path = "uploads/";
        $dir = $path.$dir_id;
        $path = $path.$dir_id."/";
        if (file_exists($dir)) {
            system('/bin/rm -rf ' . escapeshellarg($dir));
        } else {
          mkdir($path);
          chmod($path, 0722);  
        }
        $_SESSION["id"] = $dir_id;
        $_SESSION["directory"] = "/" . $dir;
        $_SESSION["path_name"] = $path;
      ?>
      

      在任何需要获取会话的 file.php 中:

      <?php
        session_start();
      
        $realPath = 'uploads/'.$_SESSION['id'];
      
        $handle = opendir(dirname(realpath(__FILE__)).$realPath;
        while($file = readdir($handle)){
            if($file !== '.' && $file !== '..'){
                echo '<img src="uploads/'.$file.'" border="0" />';
            }
        }
      ?>
      

      我建议您阅读:http://www.w3schools.com/php/php_sessions.asp 当我 6 年前开始使用 php 时 - 它非常有帮助

      【讨论】:

      • 我认为这更多的是指出您需要从要访问会话数据的任何页面调用 session_start() ..
      • 所以我写了“在任何 file.php 中,你需要获取会话:”,我错了吗?
      • 那是正确的,它的常见做法是在每个页面的顶部包含/要求一个通用的 php 文件.. 类似于 header.php 并包含诸如 session_start() 之类的项目。你是对的,你需要在脚本中调用它才能访问它们
      • 你的意思是 - 建议 OP 创建类似头文件的东西,它会自动包含在任何 file.php 中?
      • 是的,它很容易维护单个文件与多个文件.. 与使用相同的 menu.php 文件包含 HTML 菜单系统相同.. 使工作变得轻松
      【解决方案4】:

      session_start 不带任何参数。它只是放置一个cookie并读取会话变量。 (在 $_SESSION 中公开)。您必须在每个页面上使用 session_start() 才能读取 $_SESSION 变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 2011-12-10
        相关资源
        最近更新 更多