如何将参数值从两个不同的函数转换为另一个函数中的另一个变量?

时间:2018-08-07 08:57:36

标签: php

我正在做两件事:

  • 显示本地驱动器和
  • 中的目录列表
  • 在单击时显示该目录中文件夹的内容 文件夹名称。

我从下面的代码中获取目录列表,但是我无法使用这些文件来获取路径以及要显示其内容的文件名。

在这里,我从$path内的createDir()获取路径,从createDir()函数中的队列数组获取文件名。

有人可以帮助我将整个路径和文件名一起放入一个变量中,我可以在函数外部使用该变量来显示内容吗?

获取目录列表:

$path = "ggadmin/production/images/";

function createDir($path = '.')
{   
    if ($handle = opendir($path)) 
    {
        echo "<ul id='image'>";

        while (false !== ($file = readdir($handle))) 
        {
            $queue[]='';
            if (is_dir($path.$file) && $file != '.' && $file != '..')
                printSubDir($file, $path, $queue);
            elseif ($file != '.' && $file !='..')
                $queue[] = $file;
        }
        global $file;
        global $data;
        $file1 = implode(',',$queue);
        $file2 = explode(',', $file1);
        $data = var_export($path.$file1);
        /* eval('$data1 = ' . $data);*/

        printQueue($queue, $path);
        echo "</ul>";
    }
}

function printQueue($queue, $path)
{
    foreach ($queue as $file) 
    {
        printFile($file, $path);
    } 
}

function printFile($file, $path)
{
    echo  "<li><a href=\"".$path.$file."\">$file</a></li>";
}        

function printSubDir($dir, $path)
{       
    global $data1;
    echo "<li><a href=test1.php?data=$data1><span class=\"toggle\">$dir</span></a>";
    createDir($path.$dir."/");
    echo "</li>";

    /* global $image = createDir($path.$dir."/");*/
}

createDir($path);
global $path;
var_dump($path);

3 个答案:

答案 0 :(得分:1)

我想分享同一任务的两个解决方案。 1)样式化解决方案

<?
header('Content-Type: text/html; charset=utf-8');
$host = $_SERVER['HTTP_HOST'];
setlocale(LC_TIME, "ru_RU.utf8");
date_default_timezone_set('Europe/Moscow');

/*
Directory Listing Script - Version 2
====================================
Script Author: Ash Young <ash@evoluted.net>. www.evoluted.net
Layout: Manny <manny@tenka.co.uk>. www.tenka.co.uk
*/
$startdir = '.';
$showthumbnails = false; 
$showdirs = true;
$forcedownloads = false;
$hide = array(
                'dlf',
                'public_html',              
                'index.php',
                'Thumbs',
                '.htaccess',
                '.htpasswd',
                'default.php'
            );
$displayindex = false;
$allowuploads = false;
$overwrite = false;

$indexfiles = array (
                'index.html',
                'index.htm',
                'default.htm',
                'default.html'
            );

$filetypes = array (
                'png' => 'jpg.gif',
                'jpeg' => 'jpg.gif',
                'bmp' => 'jpg.gif',
                'jpg' => 'jpg.gif', 
                'gif' => 'gif.gif',
                'zip' => 'archive.png',
                'rar' => 'archive.png',
                'exe' => 'exe.gif',
                'setup' => 'setup.gif',
                'txt' => 'text.png',
                'htm' => 'html.gif',
                'html' => 'html.gif',
                'php' => 'php.gif',             
                'fla' => 'fla.gif',
                'swf' => 'swf.gif',
                'xls' => 'xls.gif',
                'doc' => 'doc.gif',
                'sig' => 'sig.gif',
                'fh10' => 'fh10.gif',
                'pdf' => 'pdf.gif',
                'psd' => 'psd.gif',
                'rm' => 'real.gif',
                'mpg' => 'video.gif',
                'mpeg' => 'video.gif',
                'mov' => 'video2.gif',
                'avi' => 'video.gif',
                'eps' => 'eps.gif',
                'gz' => 'archive.png',
                'asc' => 'sig.gif',
            );

error_reporting(0);
if(!function_exists('imagecreatetruecolor')) $showthumbnails = false;
$leadon = $startdir;
if($leadon=='.') $leadon = '';
if((substr($leadon, -1, 1)!='/') && $leadon!='') $leadon = $leadon . '/';
$startdir = $leadon;

if($_GET['dir']) {
    // check this is okay.

    if(substr($_GET['dir'], -1, 1)!='/') {
        $_GET['dir'] = $_GET['dir'] . '/';
    }

    $dirok = true;
    $dirnames = split('/', $_GET['dir']);
    for($di=0; $di<sizeof($dirnames); $di++) {

        if($di<(sizeof($dirnames)-2)) {
            $dotdotdir = $dotdotdir . $dirnames[$di] . '/';
        }

        if($dirnames[$di] == '..') {
            $dirok = false;
        }
    }

    if(substr($_GET['dir'], 0, 1)=='/') {
        $dirok = false;
    }

    if($dirok) {
         $leadon = $leadon . $_GET['dir'];
    }
}



$opendir = $leadon;
if(!$leadon) $opendir = '.';
if(!file_exists($opendir)) {
    $opendir = '.';
    $leadon = $startdir;
}

clearstatcache();
if ($handle = opendir($opendir)) {
    while (false !== ($file = readdir($handle))) { 
        // first see if this file is required in the listing
        if ($file == "." || $file == "..")  continue;
        $discard = false;
        for($hi=0;$hi<sizeof($hide);$hi++) {
            if(strpos($file, $hide[$hi])!==false) {
                $discard = true;
            }
        }

        if($discard) continue;
        if (@filetype($leadon.$file) == "dir") {
            if(!$showdirs) continue;

            $n++;
            if($_GET['sort']=="date") {
                $key = @filemtime($leadon.$file) . ".$n";
            }
            else {
                $key = $n;
            }
            $dirs[$key] = $file . "/";
        }
        else {
            $n++;
            if($_GET['sort']=="date") {
                $key = @filemtime($leadon.$file) . ".$n";
            }
            elseif($_GET['sort']=="size") {
                $key = @filesize($leadon.$file) . ".$n";
            }
            else {
                $key = $n;
            }
            $files[$key] = $file;

            if($displayindex) {
                if(in_array(strtolower($file), $indexfiles)) {
                    header("Location: $file");
                    die();
                }
            }
        }
    }
    closedir($handle); 
}

// sort our files
if($_GET['sort']=="date") {
    @ksort($dirs, SORT_NUMERIC);
    @ksort($files, SORT_NUMERIC);
}
elseif($_GET['sort']=="size") {
    @natcasesort($dirs); 
    @ksort($files, SORT_NUMERIC);
}
else {
    @natcasesort($dirs); 
    @natcasesort($files);
}

// order correctly
if($_GET['order']=="desc" && $_GET['sort']!="size") {$dirs = @array_reverse($dirs);}
if($_GET['order']=="desc") {$files = @array_reverse($files);}
$dirs = @array_values($dirs); $files = @array_values($files);

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Welcome to My CV Folder.</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link href="http://www.main-hosting.com/hostinger/welcome/css/site.css" media="screen" rel="stylesheet" type="text/css" />
        <link rel="icon" type="image/png" href="http://cdx.kz/storage/app/media/logo_thumb32.jpg">
    </head>
    <body>
        <div id="main">
            <div id="content">
                <div class="header"></div>
                <div class="content">
                    <h1>Web Explorer</h1>
                    <p>NAVIGATION => <a href="http://wego.esy.es">HOME</a> <?
                    echo urldecode($_SERVER['REQUEST_URI']);                                        
                    ?></p>
                    <div id="files">
                        <div class="top"></div>
                        <div class="cont">

                            <div id="listingcontainer">
                                <div id="listing">
                                <?
                                $class = 'b';
                                if($dirok) {
                                ?>
                                  <div><a href="<?=$dotdotdir;?>" class="<?=$class;?>"><img src="http://www.main-hosting.com/hostinger/welcome/index/dirup.png" alt="Folder" /><strong>..</strong> <em>-</em><? $mtime = filemtime($dotdotdir); $mtime = date("m/d/Y H:i:s", $mtime); $mtime = strftime("%B %e, %G %T", strtotime($mtime)); print ucfirst($mtime); ?></a></div>
                                <?
                                    if($class=='b') $class='w';
                                    else $class = 'b';
                                }
                                $arsize = sizeof($dirs);
                                for($i=0;$i<$arsize;$i++) {
                                ?>
                                  <div><a href="<?=$leadon.$dirs[$i];?>" class="<?=$class;?>"><img src="http://www.main-hosting.com/hostinger/welcome/index/folder.png" alt="<?=$dirs[$i];?>" /><strong><?=$dirs[$i];?></strong> <em>-</em><? $mtime = filemtime($leadon.$dirs[$i]); $mtime = date("m/d/Y H:i:s", $mtime); $mtime = strftime("%B %e, %G %T", strtotime($mtime)); print ucfirst($mtime); ?></a></div>
                                <?
                                    if($class=='b') $class='w';
                                    else $class = 'b';  
                                }

                                $arsize = sizeof($files);
                                for($i=0;$i<$arsize;$i++) {
                                    $icon = 'unknown.png';
                                    $ext = strtolower(substr($files[$i], strrpos($files[$i], '.')+1));
                                    $supportedimages = array('gif', 'png', 'jpeg', 'jpg');
                                    $thumb = '';

                                    if($filetypes[$ext]) {
                                        $icon = $filetypes[$ext];
                                    }

                                    $filename = $files[$i];
                                    if(strlen($filename)>43) {
                                        $filename = substr($files[$i], 0, 40) . '...';
                                    }

                                    $fileurl = $leadon . $files[$i];
                                ?>
                                  <div><a href="<?=$fileurl;?>" class="<?=$class;?>"<?=$thumb2;?>><img src="http://cpanel.main-hosting.com/images/index/<?=$icon;?>" alt="<?=$files[$i];?>" /><strong><?=$filename;?></strong><em><?=round(filesize($leadon.$files[$i])/1024);?> KB</em><? $mtime = filemtime($leadon.$files[$i]); $mtime = date("m/d/Y H:i:s", $mtime); $mtime = strftime("%B %e, %G %T", strtotime($mtime)); print ucfirst($mtime); ?><?=$thumb;?></a></div>
                                <?
                                    if($class=='b') $class='w';
                                    else $class = 'b';  
                                }   
                                ?>
                                </div>
                            </div>

                        </div>
                        <div class="bottom"></div>
                        <div class="clear"></div>
                    </div>
                    <div class="clear"></div>
                </div>
                <div class="footer"></div>
                <div class="clear"></div>
            </div>
            <div id="footer">
                <div class="links">
                    <a href="http://cdx.kz" target="_blank">Also visit CDX.KZ</a> &copy; <? print date('Y'); ?>. 
                </div>

            </div>
        </div>
    </body>
</html>

2)简单实用的解决方案

tml>
    <head>
        <meta charset="utf-8" />
        <title>File in current Folder</title>
    </head> 
    <body>
    <h1>File List</h1>
    <?
        $files = scandir('.');
        echo '<table>';
        foreach ($files as $key=>$file){
            echo '<tr>';
            if ($file=='index.php' or $file=='.'){}else{
                echo '<td><a href="'.$file.'">'.$file.'</a>';
                if ($file != '..')
                    echo '</td><td><a href="index.php?content='.substr($file,0,sizeof($file)-6).'">->Show file contents<-</a>';
                echo '</td>';
            }
            echo '</tr>';
        } 
        echo '</table>';
    ?>

    <?
        if (!empty($_GET['content'])){
            $file_name = str_replace('.','x',$_GET['content']).'.html';
            $content = file_get_contents($file_name);

            $content = htmlspecialchars($content);

            echo '<hr/>';
            echo 'File '.$file_name.' content:<br/>';
            echo '<pre><code>';
            echo $content;
            echo '</code></pre><hr/>';
        }
    ?>
    </body>
</html>

答案 1 :(得分:0)

谢谢,我按照以下方式整理了答案。

由于我的目录列表正确显示了上述代码。我没有从两个函数中获取参数,而是对printSubDir($dir, $path)函数进行了如下修改

function printSubDir($dir, $path)
    {       
        global $data;
        $data = $path.''.$dir;
                echo "<li><a href='test1.php?data=$data'><span 
 class=\"toggle\">$dir</span></a>";
        createDir($path.$dir."/");
        echo "</li>";
    }

从上面的代码中,我得到($ _GET ['data'])test1.php中的数据值,并显示了test1.php本身的所有内容。

答案 2 :(得分:0)

我用自举样式设置,看看这个:

<html>
    <head>
        <meta charset="utf-8" />
        <title>Files and Folders</title>
        <link href="https://stackpath.bootstrapcdn.com/bootswatch/4.1.2/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-bWCgyti3fD0r6vAulgU8WBFKOn7fne8sSrA5BVeNehYyqHOsyn7bBi7T848TkMo2" crossorigin="anonymous">
    </head> 
    <body>
    <div class="row">
        <div class="col-md-4">
            <h3>What is in folder?</h3>
            <?
                $files = scandir('.');
                echo '<table>';
                foreach ($files as $key=>$file){
                    echo '<tr>';
                    if ($file=='index.php' or $file=='.'){}else{
                        echo '<td><a href="'.$file.'">'.$file.'</a>';
                        if ($file != '..')
                            echo '</td><td><a href="index.php?content='.substr($file,0,sizeof($file)-6).'">->Show file contents<-</a>';
                        echo '</td>';
                    }
                    echo '</tr>';
                } 
                echo '</table>';
            ?>
        </div>

        <div class="col-md-8">
            <h2>File Content:</h2>
            <?
                if (!empty($_GET['content'])){
                    $file_name = str_replace('.','x',$_GET['content']).'.html';
                    $content = file_get_contents($file_name);

                    $content = htmlspecialchars($content);

                    echo '<hr/>';
                    echo 'File '.$file_name.' content:<br/>';
                    echo '<pre><code>';
                    echo $content;
                    echo '</code></pre><hr/>';
                }
            ?>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
    </body>
</html>