我正在通过表单发送扫描并显示文件和目录到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>";
}
?>
答案 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>";
}
?>
答案 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>";
}
?>