Αναζήτηση αρχείου μέσα σε φάκελο

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
Mandingueiro
Δημοσιεύσεις: 270
Εγγραφή: 07 Φεβ 2006 19:26

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από Mandingueiro » 09 Φεβ 2011 14:53

Γειά σας παιδιά :)

Θέλω να φτιάξω ένα script το οποίο θα ψάχνει για αρχεία μέσα σε συγκεκριμένους φακέλους.

π.χ. έχω φακέλους του στυλ

/FORD
/AUDI
/BMW
/FIAT

και μέσα οι φάκελοι είναι κάπως έτσι (π.χ. ο /FORD)

ford3.img
30-56.png
ford6.png κ.ο.κ.

Εγώ θέλω όταν ο χρήστης εισάγει π.χ. στο searchbox "ford 30-56" να πηγαίνει το script και να βρίσκει απ'τον φάκελο /FORD/ το file 30-56.png και να το εμφανίζει στον browser (ως εικόνα).

Έτσι όπως το σκέφτομαι, η αναζήτηση θα πρέπει να χωρίζεται σε δυο τμήματα στην ουσία:

Το 1ο τμήμα θα ανιχνεύει απ'το search query το keyword για τον σωστό φάκελο (FORD, BMW, Audi κλπ) και θα μπαίνει μέσα στον φάκελο.

Το 2ο τμήμα θα διαβάζει το υπόλοιπο search query (αυτό που εισήχθη εκτός του "FORD" π.χ.) και θα ψάχνει για το αρχείο αυτό μέσα στον φάκελο που έχει ανιχνευθεί απ'το 1ο τμήμα.

Ποιόν τρόπο μου προτείνετε να το κάνω αυτό; Με την glob(); To site έχει περίπου 500 προϊόντα, θα είναι αργή η αναζήτηση χωρίς βάση δεδομένων;

Ευχαριστώ προκαταβολικά!

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από fafos » 09 Φεβ 2011 15:31

ta arxeia tha einai panta .png?
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
Mandingueiro
Δημοσιεύσεις: 270
Εγγραφή: 07 Φεβ 2006 19:26

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από Mandingueiro » 09 Φεβ 2011 15:33

Ναί θα είναι όλα είτε PNG είτε JPG.
fafos έγραψε:ta arxeia tha einai panta .png?

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από fafos » 09 Φεβ 2011 15:49

h anazhthsh tha ginetai apo ena pedio h tha exeis ksexoristo pedio gia thn marka kai ksexoristo gia to modelo?
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
Mandingueiro
Δημοσιεύσεις: 270
Εγγραφή: 07 Φεβ 2006 19:26

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από Mandingueiro » 09 Φεβ 2011 15:52

Μάλλον σε ένα πεδίο θα το κάνω και θα τους λέω σε ένα tip "εισάγετε την σειρά και το μοντέλο". Νομίζω δε θα χρειαστεί και δεύτερο πεδίο.
fafos έγραψε:h anazhthsh tha ginetai apo ena pedio h tha exeis ksexoristo pedio gia thn marka kai ksexoristo gia to modelo?

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από fafos » 09 Φεβ 2011 16:34

Mandingueiro έγραψε:Μάλλον σε ένα πεδίο θα το κάνω και θα τους λέω σε ένα tip "εισάγετε την σειρά και το μοντέλο". Νομίζω δε θα χρειαστεί και δεύτερο πεδίο.
fafos έγραψε:h anazhthsh tha ginetai apo ena pedio h tha exeis ksexoristo pedio gia thn marka kai ksexoristo gia to modelo?
nai.. kai oti tous peis tha to kanoun :lol:

anyway...

Κώδικας: Επιλογή όλων

<?
$search= trim&#40;$_GET&#91;'search'&#93;&#41;;
$search = preg_replace&#40;'/\s\s+/',' ', $search&#41;;
$search= explode&#40;" ", $search&#41;;

$folder = $search&#91;0&#93;.'/';// o fakellos
$file = $search&#91;1&#93;;// o titlos tou arxeiou
$images = glob&#40;"" . $folder . "*" .$file . "*.*"&#41;;

foreach&#40;$images as $image&#41;
&#123;
echo $image.'<br />';
&#125;
?>
to vasiko provlhma ths glob() einai to case sensitive to opoio shmainei oti thelei akrivos thn lexh anazhthshs se kefalaia h peza allios den sou dinei apotelesma.. opote prepei na exeis tous titlous se peza h kefalaia gia na doulepsei sosta..


an h forma stelnei post allazeis to get me post..

an to modelo einai 2 lexeis h parapano tha gurisei ola ta arxeia pou exoun thn proth lexh ston titlo tous..

to kalytero einai vash dedomenon alla ta dedomena einai liga kai den tha exeis shmantikh kathysterhsh...
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
Mandingueiro
Δημοσιεύσεις: 270
Εγγραφή: 07 Φεβ 2006 19:26

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από Mandingueiro » 09 Φεβ 2011 16:56

Πρώτα απ'όλα ευχαριστώ για τον χρόνο σου!

Αν κατάλαβα καλά υποθέτεις ότι ο χρήστης έχει δώσει στο 1ο τμήμα του search string την Μάρκα και στο άλλο το Μοντέλο (χωρισμένο με κόμμα ή κενό).

Εγώ σκεφτόμουν να καταχωρίσω σε ένα array όλες τις μάρκες (δεν είναι πολλές, γύρω στις 10), και να ψάχνει πρώτα αν οποιοδήποτε μέρος του string υπάρχει στο array. Έτσι ακόμα κι αν το βάλει στο τέλος το "FORD" π.χ. θα το βρεί. Και μετά όπως το έγραψες κι εσύ λογικά.

Παρ'όλα αυτά θα ξεκινήσω με το script και στην πορεία θα βάλω τ'αποτελέσματα γιατί προς το παρόν δεν έχω κάνει τίποτα ακόμα.

Με βάση δεδομένων δε θέλω να μπλέξω γιατί θέλει μετά πιο πολύ προγραμματισμό που δεν κατέχω μάλλον, και εφόσον θα είναι μικρή η διαφορά είμαι ΟΚ.

Άβαταρ μέλους
Mandingueiro
Δημοσιεύσεις: 270
Εγγραφή: 07 Φεβ 2006 19:26

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από Mandingueiro » 27 Μαρ 2011 18:09

Τελικά αποφάσισα να αρχίσω το script αυτό και έχω γράψει έναν κώδικα.

Με την glob() όμως, αν π.χ βάλω για keyword "50" και έχω ένα αρχείο με όνομα 50x60.png τότε θα το εμφανίσει κι αυτό στ'αποτελέσματα. Αυτό είναι κάτι που δεν το θέλω. Έχει κάποιος καμιά ιδέα για το πως μπορώ να το επιτύχω; Θέλω να κάνει δηλαδή match όλο το filename με το search term.

π.χ. αν βάλει 50x50 στο search να του εμφανίσει μόνο το 50x50.png και κανένα άλλο.

p.s. μήπως να ανεβάσω αυτό που έχω γράψει μέχρι τώρα; απλά θα έχει αρκετά λάθη και λάθος τεχνικές λογικά..

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από ThyClub » 27 Μαρ 2011 18:28

Με το File/Find.php της PEAR?
Νομίζω ότι με την παρακάτω function μπορείς να ψάξεις και με wildchars αλλά και με ολόκληρο το όνομα.

Πιθανές χρήσεις:
images|50x50.png
50x50*
*0x5*

κτλ

Δοκίμασε το. Το είχα στο Qool και δούλευε ρολόι:

Κώδικας: Επιλογή όλων

function search&#40;$file,$path&#41;&#123;
		//first replace any malicious paths
		if&#40;eregi&#40;"\.\.",$file&#41;&#41;&#123;
			//do nothing
		&#125;else&#123;
			if&#40;$path==''&#41;&#123;
				$path = "./";
			&#125;else&#123;
				$path = "./".$path;
			&#125;

			$subPath = explode&#40;"|",$file&#41;;
			$count = count&#40;$subPath&#41;;
			if&#40;$subPath&#91;1&#93;&#41;&#123;
				$path .= $subPath&#91;0&#93;."/";
			&#125;

			//echo $path;
			require_once "File/Find.php";
			$file = str_ireplace&#40;".","\\.",$file&#41;;
			$file = str_ireplace&#40;"*",".*",$file&#41;;
			$items = &File_Find&#58;&#58;glob&#40; "#$file$#", $path, 'perl' &#41;;
			foreach &#40;$items as $key=>$value&#41;&#123;
				$type = $this->getFileType&#40;$value&#41;;
				if&#40;$subPath&#91;1&#93;&#41;&#123;
					$file = $path.$value;
				&#125;else&#123;
					$file = $value;
				&#125;
				$contents&#91;'files'&#93;&#91;&#93; = array&#40;"filename"=>$file,"type"=>$type&#91;0&#93;,"ext"=>$type&#91;1&#93;&#41;;
			&#125;
			return $contents;
		&#125;

	&#125;

Άβαταρ μέλους
Mandingueiro
Δημοσιεύσεις: 270
Εγγραφή: 07 Φεβ 2006 19:26

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από Mandingueiro » 27 Μαρ 2011 20:04

Έχω ήδη ξοδέψει κάποιο χρόνο για να φτιάξω το δικό μου script απ'την αρχή οπότε νομίζω καλύτερα να μη μπλέξω με νέα libraries γιατί θέλει να διαβάσω documentation κλπ.

Βρήκα πάντως τη λύση στο πρόβλημά μου (προσωρινά), χρησιμοποιώντας την glob έτσι:

Κώδικας: Επιλογή όλων

glob&#40;$folder.$value.".png"&#41;; 
Λογικά θα μου βγάλει νέα προβλήματα αυτή η προσέγγιση αλλά βλέποντας και κάνοντας. Σ'ευχαριστώ για την πρότασή σου πάντως.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από fafos » 28 Μαρ 2011 16:06

to provlhma pou mporei na sou vgalei einai oti dexetai mono png kai mono me peza..

Κώδικας: Επιλογή όλων

glob&#40;$folder.$value.".*"&#41;; 
auto den exei provlhma alla, an o titlos exei kapoia teleia isos mperdeutei sthn anazhthsh..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
Mandingueiro
Δημοσιεύσεις: 270
Εγγραφή: 07 Φεβ 2006 19:26

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από Mandingueiro » 06 Απρ 2011 12:54

Τελικά αποφάσισα να το κάνω όπως είχες πεί αρχικά fafos, δηλαδή με select όπου θα διαλέγει την σειρά. Είναι πιο εύκολο και απαιτεί λιγότερο προγραμματισμό.

Το θέμα που αντιμετωπίζω τώρα είναι το εξής:

Έχω π.χ. σε έναν φάκελο τα αρχεία
50x50.jpg
50x50 black.jpg
5x5 black.jpg

Αν κάνω search για "50x50" θα μου τα εμφανίσει όλα, μια χαρά μέχρι εδώ.

Αν όμως κάνω search για "50x50 black" τότε θα μου εμφανίσει όλα όσα έχουν "50x50" στο filename τους και επιπλέον όσα έχουν "black" στο filename τους. Φυσικά εγώ θέλω να μου επιστρέφει μόνο το "50x50 black.jpg".

Καμιά ιδέα;

Άβαταρ μέλους
Mandingueiro
Δημοσιεύσεις: 270
Εγγραφή: 07 Φεβ 2006 19:26

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από Mandingueiro » 06 Απρ 2011 12:57

Μόλις δοκίμασα να αλλάξω την preg_replace() και την explode() που μου είχες δώσει και όλα φαίνονται να λειτουργούν καλά τώρα. Αυτό είναι το σκριπτάκι που έχω μέχρι τώρα: http://pastebin.com/tCk6aFT2.

Πως σου φαίνεται;

:roll:

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από fafos » 06 Απρ 2011 15:47

apo thn stigmh pou dineis asteriskous mprosta kai piso apo to $file logiko einai na sou gyrna ola ta apotelesmata..

kalo einai to script.. mporeis na valeis kai sto field keyword ths formas ena autocomplete me ajax gia na sou gyrnaei osa arxeia yparxoun analoga me to ti grafeis ekei mesa..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
Mandingueiro
Δημοσιεύσεις: 270
Εγγραφή: 07 Φεβ 2006 19:26

Αναζήτηση αρχείου μέσα σε φάκελο

Δημοσίευση από Mandingueiro » 06 Απρ 2011 19:25

Το μόνο θέμα τώρα είναι όπως είχες πεί το case sensitive της glob(). Μάλλον θα βρω ένα batch file rename tool για να κάνω όλα τα filenames lowercase.

Καλή ιδέα το AJAX αλλά δεν έχω ιδέα απο JavaScript. Μπορείς να μου πείς πως θα περίπου θα γίνει αυτό; Η μήπως έχεις κατα νού κανένα σχετικό tutorial να κοιτάξω (για τη συγκεκριμένη λειτουργία);
fafos έγραψε:apo thn stigmh pou dineis asteriskous mprosta kai piso apo to $file logiko einai na sou gyrna ola ta apotelesmata..

kalo einai to script.. mporeis na valeis kai sto field keyword ths formas ena autocomplete me ajax gia na sou gyrnaei osa arxeia yparxoun analoga me to ti grafeis ekei mesa..

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες