 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| 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: 712
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 |
|
| |
|