无法发送文件夹中文件夹的路径

时间:2017-07-10 11:54:24

标签: php

我正在通过表单发送扫描并显示文件和目录到php的路径但是对于其他目录中的目录,realpath()似乎失败了。它只给出了与php本身位于同一位置的文件夹的真实路径,它无法给出不在同一位置的文件夹路径。请看看我的代码并告诉我我做错了什么。谢谢。

代码 -

<?php
if (isset($_POST['dir'])){
$dir= $_POST['dir'];
}
else {
$dir = ".";
}
if($handle=opendir($dir)){
while(false!==($file=readdir($handle))){
    if($file!="." && $file!=".."){
        if(is_dir("$dir/$file")){
            $dirs[]=$file;

        }else{
            $files[]=$file;

        }
    }
}
closedir($handle);
}
foreach($dirs as $dir){
$dirpath = realpath($dir);
?>
<form action="" method="post">
<input type="hidden" name="dir" value="<?php echo $dirpath; ?>" />
<button type="submit" ><?php echo $dir; ?> Path - <?php echo $dirpath; ?>
</button>
</form><br>
<?php
}
foreach($files as $file){
echo "$file <br>";
}
?>

3 个答案:

答案 0 :(得分:1)

我认为你的代码运行正常,我已经在我的身边进行过测试,但有一件事情会产生错误,需要定义数组并且一切正常

 $files = array();
  $dirs = array();

所以你的代码是

<?php

if (isset($_POST['dir'])) {
    $dir = $_POST['dir'];
} else {
    $dir = ".";
}
$files = array();
$dirs = array();
if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            if (is_dir("$dir/$file")) {
                $dirs[] = $file;

            } else {
                $files[] = $file;

            }
        }
    }
    closedir($handle);
}

foreach ($dirs as $dir) {
    $dirpath = realpath($dir);
    ?>
    <form action="" method="post">
        <input type="hidden" name="dir" value="<?php echo $dirpath; ?>"/>
        <button type="submit"><?php echo $dir; ?> Path - <?php echo $dirpath; ?>
        </button>
    </form><br>
    <?php
}
foreach ($files as $file) {
    echo "$file <br>";
}
?>

http://php.net/manual/en/function.is-dir.php

答案 1 :(得分:0)

我认为您的语句语法错误,

if(is_dir("$dir/$file")){

代替,

if(is_dir($dir."/".$file)){

答案 2 :(得分:0)

我通过添加$dirpath = realpath("$path/$dir")解决了这个问题,我能够扫描并显示任何目录。如果有人需要,请建议任何更正或更好的方法来执行此操作 -

<?php
 $files = array();
 $dirs = array();
if (isset($_POST['dir'])){
$path= $_POST['dir'];
}
else {
$path = ".";
}
if($handle=opendir($path)){
while(false!==($file=readdir($handle))){
    if($file!="." && $file!=".."){
        if(is_dir("$path/$file")){ 
            $dirs[]=$file;

        }else{
            $files[]=$file;

        }
    }
}
closedir($handle);
}

//--- This is the part i was looking for ------------------

foreach($dirs as $dir){
if ($path === "."){
$dirpath = realpath($dir);
}
else {
$dirpath = realpath("$path/$dir"); 
}
//--------------------------------------------------------
?>
<form action="" method="post">
 <input type="hidden" name="dir" value="<?php echo $dirpath; ?>" />
 <button type="submit" ><?php echo $dir; ?> Path - <?php echo $dirpath; ?>
 </button>
</form><br>
<?php
}
foreach($files as $file){
echo "$file <br>";
}
?>