Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Scriere nume fisiere dintr-un director intr-o BD
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Subiectul anterior :: Subiectul următor  
Autor Mesaj
stefantem



Data înscrierii: 02/Mar/2005
Mesaje: 10
Locație: Rm.Valcea

Trimis: Mie Aug 03, 2005 6:15 pm    Titlul subiectului: Scriere nume fisiere dintr-un director intr-o BD  

As avea nevoie de un script care sa imi scrie numele tuturor fisierelor dintr-un director dat intr-o tabela a unei BD.

fisiere (id, nume_director, nume_fisier)
Sus  
johnny



Data înscrierii: 31/Iul/2004
Mesaje: 904
Locație: Bucuresti

Trimis: Mie Aug 03, 2005 6:49 pm    Titlul subiectului:  

readdir()
dir()

tabel mysql:
tabel_fisiere

id_fisier INT 8, PK, auto_increment
denumire_director
denumire_fisier: varchar 255


mysql_query()

o sugestie:
ai putea retine si directoarele in baza de date si sa fie diferentiate de fisiere printr-un flag.

si in loc de denumire_director - id_director...
Sus  
whooper



Data înscrierii: 05/Apr/2005
Mesaje: 727
Locație: Toronto ON

Trimis: Mie Aug 03, 2005 8:23 pm    Titlul subiectului:  

ar putea sa le si sorteze in ordine alfabetica, sa tina minte si grupul in care au fost adaugate (batchNr) si sa poata face cautarea recursiv :)

Cod: CREATE DATABASE `dirwalker` ;

CREATE TABLE `dirfiles` (
`ID` BIGINT NOT NULL AUTO_INCREMENT ,
`BATCH` BIGINT NOT NULL ,
`NAME` VARCHAR( 255 ) NOT NULL ,
`TYPE` CHAR( 1 ) NOT NULL ,
PRIMARY KEY ( `ID` )
) TYPE = MYISAM ;


Cod: <?php
// DirWalker
///////////////////////////////////////////////////////////////////////////////////
// DB Settings

   $db['host']='localhost';
   $db['name']='dirwalker';
   $db['user']='DBuser';
   $db['pass']='DbPass';
   $db['link']=NULL;

//
///////////////////////////////////////////////////////////////////////////////////
// Runtime Settings

   $dircounter=0;
   $debug=true;

   $root=".."; // aici ii spui care e directorul care vrei sa-l citeasca


  // te conectezi la DB
   $db['link'] = @mysql_connect($db['host'],$db['user'],$db['pass']);
   if(!$db['link']) { if($debug) echo 'DirWalker.> cannot connect';  return 0; } else { if($debug) echo 'DirWalker.> db_connect ok <br>';}
   $msdb = @mysql_select_db($db['name']);
   if(!$msdb) { if($debug) echo 'DirWalker.> cannot select db'; return 0; } else { if($debug) echo 'DirWalker.> db_select ok <br>';}

   if($debug) echo 'DirWalker.> DB connected... <br>';

   // select batch number
      $batch = mysql_fetch_array(mysql_query('SELECT MAX(batch) FROM dirfiles;'));
      if($batch[0]>0) $batch[0] ++; else $batch[0]=1;

   parseDir($root,0);


   if($debug) echo 'DirWalker.> DB disconnected... <br>';
   echo 'All Done!';

//
///////////////////////////////////////////////////////////////////////////////////
// Functions

function parseDir($path,$depth) {
   global $dircounter,$debug,$msdb,$batch;

   $dir=opendir($path);
   while(($file=readdir($dir))!==false) {
      if(ereg("^\.$", $file)||ereg("^\.\.$", $file)) continue;
      if(is_dir($path.'/'.$file))
         $dirs[]=$file;
      else
         $files[]=$file;
   }
   closedir($dir);

   if(isset($dirs)) {
      natsort($dirs);
         foreach($dirs as $subdir) {
                        if($debug) echo $batch[0].' >> '.$path.'/'.$subdir.' << D'; 
                        $dir_name = $path.'/'.$subdir;
                        $Q1 = "INSERT INTO `dirfiles`( `ID`,`BATCH`,`NAME`,`TYPE`) VALUES('','$batch[0]','$dir_name','D');";
                        $result = mysql_query($Q1);
                        if($debug) echo '<br>'.$Q1.'<br>';
                        if($result) if($debug) echo ' << OK. <br>';                                 
         $innerdir=opendir($path.'/'.$subdir);
         $innerfiles=0;
         while(($file=readdir($innerdir))!==false) {
            if(ereg("^\.$", $file)||ereg("^\.\.$", $file)) continue;
            $innerfiles++;
         }
         if($innerfiles>0) {
            $dirc=$dircounter;
            $dircounter++;
// daca vrei cautare recursiva, decomenteaza linia urmatoare.
            // parseDir($path.'/'.$subdir,$depth+1);
         }
      }
   }

   if(isset($files)) {
      natsort($files);
      foreach($files as $file) {
                  if($debug) echo $batch[0].' >> '.$path.'/'.$file.' << F';
                  $file_name = $path.'/'.$file;
                  $Q2 = "INSERT INTO `dirfiles`( `ID`,`BATCH`,`NAME`,`TYPE`) VALUES('','$batch[0]','$file_name','F');";
                  $result = mysql_query($Q2);
                  if($debug) echo '<br>'.$Q2.'<br>';
                  if($result) if($debug) echo ' << OK. <br>';   
      }
   }
}
?> Codul este extras dintr-o chestie mai mare si adaptat. Poti desface PATH-ul de SUBDIR sau FILE si stoca separat continutul. De asemenea poti modifica minor scriptul sa-i poti da ca parametru BatchNr .. si/sau RootDir-ul. :)

Incearca intai cu $debug=true; .. dupa care poti rula cu $debug=false;
Sus  
aurelian



Data înscrierii: 01/Iun/2003
Mesaje: 833
Locație: Bucuresti

Trimis: Joi Aug 04, 2005 8:40 am    Titlul subiectului:  

poate te ajuta si o solutie php 5 only:

directory tree:
http://cvs.php.net/co.php/php-src/ext/spl/examples/directorytree.php?r=1.13

directory tree iterator pe care il hakuiesti putin sa corespunda dorintelor tale (in metoda current):
http://cvs.php.net/co.php/php-src/ext/spl/examples/directorytreeiterator.inc?r=1.13
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community