Avatar billede shadowsurfer Nybegynder
26. november 2003 - 10:54 Der er 10 kommentarer og
1 løsning

fejl i filesystem funktion

Jeg har lavet en classe, til at lave nogle oprationer på filsystemet, men jeg kan ikke rigtig få det til at virke efter hindsigten!

Fejl:

Warning: chdir(): No such file or directory (errno 2) in /var/hosting/dsl.dk/k47/htdocs/k47/Dirfunctions.php on line 21

Warning: readdir(): supplied argument is not a valid Directory resource in /var/hosting/dsl.dk/k47/htdocs/k47/Dirfunctions.php on line 22
---------
Ang fejl besked:
det angivet dir, test, findes
----------
Kilde kode:
test.php

<?
require("Dirfunctions.php");
$teksts = new Dirfunctions("test");
echo $teksts->getdirs();
?>

Dirfunctions.php

<?php
class Dirfunctions
{
  #The dir to operat on
  var $dir;
 
  #################################################
  # Function name: getdirs                        #
  #                                              #
  # args: none                                    #
  #                                              #
  # returns: an array of the dirs in the dir that #
  # is operated uppon                            #
  #                                              #
  #################################################
  function getdirs()
  {
    $dh  = opendir($dir);
    #saves the cwd, for later return
    $initial_path=getcwd();
    chdir($dir);
    while (false !== ($filename = readdir($dh)))
      {
      if(is_dir($filename))
        {
          $dirs[] = $filename;
        }
      }
    #returns to the cwd
    chdir($initial_path);
    return $dirs;
  }

  #################################################
  # Function name: getfiles                      #
  #                                              #
  # args: none                                    #
  #                                              #
  # returns: an array of the files in the dir    #
  # that is operated uppon                        #
  #                                              #
  #################################################
  function getfiles()
  {
    $dh  = opendir($dir);
    #saves the cwd for later return
    $initial_path=getcwd();
    chdir($dir);
    while (false !== ($filename = readdir($dh)))
      {
      if(is_file($filename))
        {
          $files[] = $filename;
          }
      }
      #return to the cwd
      chdir($initial_path);
      return $files;
  }
}

function Dirfunctions($newDir)
{
  #Check if the given dir exists
  if(file_exists($newDir))
  {
    #Check if the given dir, real is a dir
    if(is_dir($newDir))
    {
      #Sets var dir too $newDir
      $this->$dir = $newDir;
    }
    else
    {
      #The dir, isn't real a dir, but something else
      #Returns an error
      trigger_error("The defined dir, isn't a dir", E_USER_ERROR);
    }
  }
  else
  {
    #The dir, don't exists
    #Returns an error
    trigger_error("The defined dir don't exists", E_USER_ERROR);
  }
}
?>
Avatar billede erikjacobsen Ekspert
26. november 2003 - 10:56 #1
Så findes
  /var/hosting/dsl.dk/k47/htdocs/k47/test
vel ikke??
Avatar billede shadowsurfer Nybegynder
26. november 2003 - 10:59 #2
jo det gør!


$ ls /var/hosting/dsl.dk/k47/htdocs/k47/test
test2dir  test2file  testdir  testfile
Avatar billede shadowsurfer Nybegynder
26. november 2003 - 11:00 #3
Og mappen kan læses
drwxr-xr-x    4 ngk      users        4096 Nov 26 09:00 test
Avatar billede shadowsurfer Nybegynder
26. november 2003 - 11:01 #4
og under mapperne/filerne kan også læses:
drwxr-xr-x    2 ngk      users        4096 Nov 26 09:00 test2dir
-rw-r--r--    1 ngk      users          0 Nov 26 09:00 test2file
drwxr-xr-x    2 ngk      users        4096 Nov 26 09:00 testdir
-rw-r--r--    1 ngk      users          0 Nov 26 09:00 testfile
Avatar billede shadowsurfer Nybegynder
26. november 2003 - 11:20 #5
Problemer ligger sådan som jeg tyder det, når jeg indlægger et debug lag, i Konstruktøren, der ikke gemmer variablen i $dir
Avatar billede shadowsurfer Nybegynder
26. november 2003 - 11:27 #6
Det se ud som om den ikke bruger konstruktøren
Avatar billede erikjacobsen Ekspert
26. november 2003 - 11:27 #7
Ja, der er flere ting galt - jeg troede du brugte en færdig klasse, men du laver
den selv.

Der er i hvert fald to ting galt:
1) Din konstruktør skal være inde i klassen (vink: indrykning)
2) Du skal huske $this->dir  (flere steder)
Avatar billede shadowsurfer Nybegynder
26. november 2003 - 11:49 #8
- Konstruktøren er nu flytte ind i klassen
- rettet til $this->dir (flere steder)
- debug-lag lagt ind.

klassen virker stadig ikke. Følgende resultat fås ved køresel af test.php:

The given dir is /var/hosting/dsl.dk/k47/htdocs/k47/test

The folder is:
/var/hosting/dsl.dk/k47/htdocs/k47/testArray

------------------------------------------------------------------
Jeg kan ikke se hvorfor der sættes Array bag på /var/hosting/dsl.dk/k47/htdocs/k47/test
----------------------------------------------------

Ny udgave af Dirfunctions.php:
<?php
class Dirfunctions
{
  #The dir to operat on
  var $dir;
 
  #################################################
  # Function name: getdirs                        #
  #                                              #
  # args: none                                    #
  #                                              #
  # returns: an array of the dirs in the dir that #
  # is operated uppon                            #
  #                                              #
  #################################################
  function getdirs()
  {
    echo "<br>The folder is:<br> $this->dir";
    $dh  = opendir($this->dir);
    #saves the cwd, for later return
    $initial_path=getcwd();
    chdir($this->dir);
    while (false !== ($filename = readdir($dh)))
      {
      if(is_dir($filename))
        {
          $dirs[] = $filename;
        }
      }
    closedir($dh);
    #returns to the cwd
    chdir($initial_path);
    return $dirs;
  }

  #################################################
  # Function name: getfiles                      #
  #                                              #
  # args: none                                    #
  #                                              #
  # returns: an array of the files in the dir    #
  # that is operated uppon                        #
  #                                              #
  #################################################
  function getfiles()
  {
    echo "<br>The folder is:<br> $this->dir";
    $dh  = opendir($this->dir);
    #saves the cwd for later return
    $initial_path=getcwd();
    chdir($this->dir);
    while (false !== ($filename = readdir($dh)))
      {
      if(is_file($filename))
        {
          $files[] = $filename;
          }
      }
      closedir($dh);
      #return to the cwd
      chdir($initial_path);
      return $files;
  }

function Dirfunctions($newDir)
{
  echo "<br>The given dir is $newDir<br>";
  #Check if the given dir exists
  if(file_exists($newDir))
  {
    #Check if the given dir, real is a dir
    if(is_dir($newDir))
    {
      #Sets var dir too $newDir
      $this->dir = $newDir;
    }
    else
    {
      #The dir, isn't real a dir, but something else
      #Returns an error
      trigger_error("The defined dir, isn't a dir", E_USER_ERROR);
    }
  }
  else
  {
    #The dir, don't exists
    #Returns an error
    trigger_error("The defined dir don't exists", E_USER_ERROR);
  }
}

}
?>
Avatar billede erikjacobsen Ekspert
26. november 2003 - 11:50 #9
Nej, du kan ikke bare printe et array. Prøv

print_r($teksts->getdirs());
Avatar billede shadowsurfer Nybegynder
26. november 2003 - 11:54 #10
Tak skal du havde for hjælpen.
Skriv et svar og du få pointen :-)
Avatar billede erikjacobsen Ekspert
26. november 2003 - 11:58 #11
ok da
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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