Scandir

  • Creatore Discussione Creatore Discussione Fabio90
  • Data di inizio Data di inizio

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
salve.. Sto cercando di integrare un motore di ricerca nel sito che però non è collegato al Database ma a trovare i file in una cartella
Sono arrivato a questo punto
HTML:
<form method='post' action='scandir.php'>
<input type='text' name='file'>
<input type='submit' name='cerca' value='Cerca'>
</form>

PHP:
<?php
$file = $_POST["file"];
$directory = "/pdf";

// scandir della $directory per trovare file immesso

echo $file //stampo file se esiste oppure nessun file trovato
?>

dovrebbe essere così la struttura però non riesco a convertire i commenti in codice..
grazie anticipatamente!
 
Intendi cosi?
PHP:
<?
$file = $_POST["file"]; 
$directory = "/pdf"; 

$files = scandir($directory);

echo (in_array($file.'.pdf',$files)) ? "Il file è stato trovato" : "Il file non è stato trovato";
?>
 
mm non proprio nefyt.. Cioè inserisco il nome del file nel modulo di ricerca. Quando faccio Cerca se lo trova me lo fa vedere sennò dice che non esiste. Insomma un modulo di ricerca normale
 
Beh puoi semplicemente mettere un redirect :eek:

PHP:
<? 
$file = $_POST["file"].'.pdf';  
$directory = "/pdf";  

$files = scandir($directory); 

if(in_array($file,$files))header("Location: /pdf/".$file); else echo "Il file non è stato trovato"; 
?>

Sorry dimenticavo che era in un echo xD
 
Ultima modifica:
grazie dell'aiuto però mi dice sempre file non trovato.. Il percorso è giusto cmq..
 
ciao
un piccolo dubbio
al post di nefyt dove ti diceva di usare
PHP:
<?php
$file = $_POST["file"]; 
$directory = "/pdf"; 
$files = scandir($directory);
echo (in_array($file.'.pdf',$files)) ? "Il file è stato trovato" : "Il file non è stato trovato";
?>
rispondevi che ti mostra il file, ma che ti fa vedere solo il nome
al post di alex (simile al secondo di nefyt)
PHP:
<?php
$file = $_POST['file'] . '.pdf';
if (is_file($path = 'pdf/' . $file)) {
    header('Location: ' . $path);
} else {
    echo 'File non trovato.';
}
?>
rispondi che ti da file non trovato (anche se che il file esiste, penso)

il dubbio:
come inserisci il nome del file nel form?
così: pinco_pallo.pdf
o così: pinco_pallo

se inserisci il nome pinco_pallo.pdf lo script di alex va corretto in
PHP:
<?php
$file = $_POST['file'] ;
if (is_file($path = 'pdf/' . $file)) {
    header('Location: ' . $path);
} else {
    echo 'File non trovato.';
}
?>
altimenti ti cerca pinco_pallo.pdf.pdf per quello che non lo trova
se invece scrivi solo pinco_pallo il .".pdf" ci vuole
 
Fantastico grazie mille adesso funziona!! Però pensandoci un utente che cerca deve scrivere il nome esatto del pdf affinchè si apra e le probabilità sono piuttosto basse.
Per migliorarlo sarebbe bello che appena inserisce una lettera si fa un filtro di tutti i pdf con quella lettera e via discorrendo...

Qualche ulteriore suggerimento??
 
ciao
potresti provare una cosa del genere.
però guarda che è un'idea tutta da verificare e non so se funzi
leggi i commenti

PHP:
<?php
ob_start();//per poter usare header location nel punto in cui ti serve anche dopo output html
$file = strtolower(strip_tags(trim($_POST["file"])));//elimini eventuali spazi iniziali e finali eventuali porcherie e porti tutto minuscolo
if($file == ""){
	echo "non hai inserito un nome valido";
	//e qui torni al form di ricerca o dove vuoi
}else{
	//verifichi che ci sia il punto
	$pos = strpos($file, ".");
	if($pos >= 1){//come minimo deve essere es. a.pdf
		$ex=explode(".",$file);
		$da_cercare=$ex[0];//prelevi solo la parte del nome esclusa l'estenzione
	}else{
		echo "non hai inserito un nome valido";//es è stato inserito .pincopallo
		//e qui torni al form di ricerca o dove vuoi
	}
	//aggungi tu l'estenzione
	$da_cercare.=".pdf";
	$in_cartella=glob("pdf/*.pdf");//crei un array con i nomi di tutti i pdf che hai nella cartella
	//inizi a cilcare l'array
	$trovati=array();
	$quanti=0;
	foreach($in_cartella as $nome){
		//DA VERIFICARE: se non ho capito male similar da il percento di similarità
		//dovrebbe funzionare se l'utente scrive un qualcosa di simile
		if(similar_text $nome, $da_cercare) > 90){
			$trovati[]=$nome;
			$quanti++;
		}
	}
	//puoi avere tre casi di trovato: zero, uno, più di uno
	if($quanti == 0){
		echo "file non trovato, ripeti ricerca";
		//e qui torni al form di ricerca o dove vuoi
	}elseif($quanti == 0){//trovato uno vai subito al file
		$documento=$trovati[0];
		header("location:pdf/$documento");
	}else{//trovati più di uno simili
	echo "sono stati trovati i seguenti documenti: scegli quale aprire";
		foreach($trovati as $documento){
			echo "<a href=\"$documento\">$documento</a><br />"
		}
	}
}
ob_end_flush();//vedi in cima
?>

dimenticavo: per similar dai un occhio a
http://it.php.net/manual/en/function.similar-text.php
 
Ultima modifica: