Avatar billede chris_toffer Nybegynder
13. september 2012 - 10:04 Der er 10 kommentarer og
1 løsning

PHP code virker ikke efter skift til IIS 7 Web server

Hej herinde, håber nogen kan komme med et klogt bud på hvad der går galt.
Jeg har længe brugt et stykke php code der lister et directory i en web browser. Ydermere kan man navigere længere ind i directory hvis der findes undermapper. Det virker skide godt på one.com's webserver (ved ikke hvad de bruger) men når jeg kører skidtet på min egen IIS 7 på en server 2008 får jeg en kedelig oplevelse.

Jeg kan kun få koden til at virke hvis jeg ikke angiver 'dir' i koden, så kommer roden hvor index.php, som indeholder koden, ligger. Men hvis jeg vil navigere til en undermappe får jeg en fejl som er skrevet ind i koden. Det ser ud til at den ikke kan læse parent directory, men hvorfor kan den ikke det ??

<?php
#  Name of this script (to be left out of directory listing)
$THIS_SCRIPT = getenv("SCRIPT_NAME");

#  Read path argument, if blank set to "."
#$dir=$_GET['dir'];
# if ($dir=="" || $dir==false) {
#  $dir="files";
# }
$dir = ( isset($_GET['dir']) ) ? $_GET['dir'] : "";

#  Determine absolute path (include trailing / if not blank)
$absdir = realpath($dir);
if ($absdir != "") {
  $absdir .= "/";
}

#  Directory where script lives (include trailing / if not blank)
$scriptdir = getcwd();
if ($scriptdir != "") {
  $scriptdir .= "/";
}

#  Insure that absolute dir is under the current directory
#  This prevents users from submitting a dir argument
#  that reaches outside the directory where this script resides.
$pos = strpos($absdir,$scriptdir);

if ($pos !== 0) {
  echo "<b>ERROR</b>: An invalid directory (<b>$dir</b>) was entered.";
  exit();
}

#  Get clean reldir (need for file and directory URLs)
$reldir = substr($absdir,strlen($scriptdir));

#  Refresh PHP's (OS's ?) file and directory list cache
clearstatcache();

#  Read directories and files in current directory
$handle  = opendir($absdir);
while (false !== ($filename = readdir($handle)))

  #  Add directory to list
  if (is_dir($absdir."/".$filename)==true && $filename!=".") { $dirs[] = $filename; }
  #  Add file to list (omit this script)
  if (is_dir($absdir."/".$filename)==false && $filename!=$THIS_SCRIPT) {
      if ($SHOW_DOT || substr($filename,0,1)!=".") {
        $files[] = $filename;
      }
  }
}

#  Get parent directory unless current directory
#  is the same as the directory of this script.
$at_topdir = $absdir==$scriptdir;
if (! $at_topdir) {
  $absparentdir="";
  $subdirs=explode("/",$absdir);
  for($x=1;$x<=count($subdirs)-3;$x++) {
      $absparentdir.="/".$subdirs[$x];
  }
}

#  Get relative parent directory
$relparentdir = substr($absparentdir,strlen($scriptdir));

#  Sort file and directory list
if ($files) { sort($files); }
if ($dirs)  { sort($dirs); }

#  Show current directory
if ($reldir=="") {
  $showdir = ".";
} else {
  $showdir = $reldir;
}
echo "<i>Nuværende Mappe</i>:  <b>$showdir</b><br/><br/>\n";

#  Start display table
echo "<table border='0'><tr valign='top'>\n";


#  List parent directory if present
echo "<td align='left' width='150'>\n";
if ($at_topdir) {
  echo " \n";
} else {
  echo "<a href=\"$THIS_SCRIPT?dir=$relparentdir\"><img src=\"http://corporatesupport.dk/upload/images/folderBack.png\"> Forrige Mappe</a>\n";
}
echo "</td>\n";

#  List directories if present
echo "<td align='left' width='300'>\n";
if ($dirs) {
  foreach($dirs as $name) {
      #  List child directory
      if ($name!="..") {
        echo "<a href=\"$THIS_SCRIPT?dir=$reldir$name\"><img src=\"http://corporatesupport.dk/upload/images/folder.png\"> $name</a><br/>\n";
      }
  }
} else {
  print " \n";
}
echo "</td>\n";

#  List files if present
echo "<td align='left' width='300'>\n";
if ($files) {
  foreach($files as $name) {
      #  Form relative path to file by removing leading /.
      echo "<a href=\"$reldir$name\"><img src=\"http://corporatesupport.dk/upload/images/filesmall.png\">  $name</a><br/>\n";
  }
} else {
  print " \n";
}
echo "</td>\n";

#  Finish table
echo "</tr></table>\n";

?>
Avatar billede chris_toffer Nybegynder
13. september 2012 - 10:05 #1
Min phplog giver mig følgende:

[13-Sep-2012 07:53:32 UTC] PHP Notice: Undefined variable: SHOW_DOT in C:\inetpub\UploadUdenSikkerhed\index.php on line 61
[13-Sep-2012 07:53:32 UTC] PHP Notice: Undefined variable: SHOW_DOT in C:\inetpub\UploadUdenSikkerhed\index.php on line 61
[13-Sep-2012 07:53:32 UTC] PHP Notice: Undefined variable: SHOW_DOT in C:\inetpub\UploadUdenSikkerhed\index.php on line 61
[13-Sep-2012 07:53:32 UTC] PHP Notice: Undefined variable: SHOW_DOT in C:\inetpub\UploadUdenSikkerhed\index.php on line 61
[13-Sep-2012 07:53:32 UTC] PHP Notice: Undefined variable: absparentdir in C:\inetpub\UploadUdenSikkerhed\index.php on line 79
Avatar billede michael_stim Ekspert
13. september 2012 - 11:21 #2
Den kan ikke finde ud af hvad $SHOW_DOT er. Du skal definere/sætte variablen. Den skla formodentlig sætte til true eller false et eller andet sted.
if ($SHOW_DOT || substr($filename,0,1)!=".") {
Avatar billede chris_toffer Nybegynder
13. september 2012 - 11:57 #3
Jeg forstår bare ikke hvorfor det er et problem i IIS 7 med PHP når det fungerer uden denne tilrettelse når jeg har den kørende på one.com's webhotel ?

Men jeg vil da prøve at se på det.
Avatar billede michael_stim Ekspert
13. september 2012 - 12:05 #4
one.com kører garanteret med apache.
Avatar billede chris_toffer Nybegynder
13. september 2012 - 12:31 #5
Jeg har styr på show_dot men har problemer med:

[13-Sep-2012 07:53:32 UTC] PHP Notice: Undefined variable: absparentdir in C:\inetpub\UploadUdenSikkerhed\index.php on line 79

Hvordan kan jeg definere den ?
Avatar billede chris_toffer Nybegynder
13. september 2012 - 12:41 #6
Jeg har nu fået defineret absparentdir som true så nu får jeg ingen fejl i min php log, men stadigvæk får jeg denne når jeg forsøger at navigere til mit under directory images:

ERROR: An invalid directory (images) was entered.

Fejlen kommer fra selve koden:
#  Insure that absolute dir is under the current directory
#  This prevents users from submitting a dir argument
#  that reaches outside the directory where this script resides.
$pos = strpos($absdir,$scriptdir);

if ($pos !== 0) {
  echo "<b>ERROR</b>: An invalid directory (<b>$dir</b>) was entered.";
  exit();
}

Men hvad der går galt kan jeg bare ikke regne ud ?
Håber nogen kan hjælpe.
Avatar billede michael_stim Ekspert
13. september 2012 - 12:50 #7
Returnerer strpos ikke false?

if ($pos !== false) {
Avatar billede chris_toffer Nybegynder
13. september 2012 - 13:05 #8
Jo den gør da.
Efter at jeg har rettet den til ikke at retunere en false, virker det nu!
Avatar billede michael_stim Ekspert
13. september 2012 - 13:11 #9
Bare accepter dit eget svar, da jeg ikke samler på point.
Avatar billede chris_toffer Nybegynder
13. september 2012 - 13:16 #10
super.
Avatar billede michael_stim Ekspert
13. september 2012 - 13:35 #11
Glem ikke at accepter dit svar så tråden bliver lukket.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester