Nueva pregunta

Pregunta:

Fecha: 15-04-2019 12:02:06 (En Español)

Hola tengo un problema con mi codigo es un escaner de palabra en varias carpetas que tienen varios txt[No resuelta]

Hola tengo un problema con un codigo este recibe una palabra de un formulario luego,El codigo escánea la carpeta actual y nos muestra los archivos si son carpetas las abrirá y volverá a imprimir los archivos existentes dentro al escontrar un txt mediante strpos(); nos busca archivo por archivo la palabra.hasta ahi anda bien pero al buscar la palabra no la encuentra en los archivos que tengo pero si creo en la carpeta dada un nuevo txt y dentro de el escribo la palabra a buscar en ese caso si la encuentra pero si escribo la palabra a buscar en un archivo txt antigui "que son los que me interesa escanear " no me muestra nada encontrado aquí el código:


<?php
//Creamos Nuestra Función
function lista_archivos($carpeta){ //La función recibira como parametro un carpeta
if (is_dir($carpeta)) { //Comprovamos que sea un carpeta Valido
if ($dir = opendir($carpeta)) {//Abrimos el carpeta
echo '<ul>';
while (($archivo = readdir($dir)) !== false){ //Comenzamos a leer archivo por archivo
if ($archivo != '.' && $archivo != '..'){
$nuevaRuta = $carpeta.'/'.$archivo;
echo $nuevaRuta;

echo '<li>'; //Abrimos un elemento de lista
if (is_dir($nuevaRuta)) { //Si la ruta que creamos es un carpeta entonces:
//echo '<b>'.$nuevaRuta.'</b>'; //Imprimimos la ruta completa resaltandola en negrita
lista_archivos($nuevaRuta);//Volvemos a llamar a este metodo para que explore ese carpeta.
} else { //si no es un carpeta:
$palabra = $_POST['palabra'];

$pagina = file_get_contents($nuevaRuta);


$pos =strpos($pagina,$palabra);

if ($pos === false) {
echo "";
}
else {
echo "La cadena '$palabra' fue encontrada en la cadena dada $nuevaRuta ";
echo " y existe en la posición $pos";}
}
'</li>';
}
}
echo '</ul>';
closedir($dir);
}
}else{//Finaliza el If de la linea 12, si no es un carpeta valido, muestra el siguiente mensaje
echo 'No Existe la carpeta';
}
}
lista_archivos(".");
?>

Etiquetas: PHP Votos: 0 - Respuestas: 4 - Vistas: 6 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 16-04-2019 11:13:36 Quizás sea un tema de encodings...
    A lo mejor los archivos que tenés en la carpeta están en formato ASCII y el strpos lo estás haciendo con un valor UTF. Luego cuando creás a mano un archivo por ahí sin darte cuenta lo estás creando como UTF y ahí sí te funciona (o viceversa todo lo que dije xD).
    Podés intentar usando funciones como utf8_encode, utf8_decode, mb_strpos, mb_detect_encoding (y otras de la familia mb_***.
      Votos: 0 - Link respuesta
     
  • Fecha: 16-04-2019 18:38:29 Gracias me ha servido bastante estoy muy agradecido .Sos fenomenal   Votos: 0 - Link respuesta
     
  • Fecha: 17-04-2019 08:54:03 Bueno, tanto como fenomenal... no es pa' tanto...
    Nada más ya me ha pasado eso de los encodings otras veces xD
      Votos: 0 - Link respuesta
     
  • Fecha: 28-04-2019 07:32:15 <?php
    class Letras{
    //
    public $dir = "./nuevo_dir/"; // digitar el directorio donde estàn los archivos.
    public $palabra="letra"; // digitar letra a buscar.
    //
    public function lista()
    {
    echo'<h1>'."directorio => ".$this->dir.'</h1>';
    foreach (scandir($this->dir) as $f)
    {
    if ($f !== '.' and $f !== '..')
    {
    echo'<br>'.'archivo encontrado -> '. "$f\n",'<br>'.'<br>';
    $this->palabra2($f);
    }
    }
    }
    public function palabra2($texto)
    {

    echo 'palabra buscada --> '.$this->palabra.'<br>';
    $pos = 1;

    foreach((file("./nuevo_dir/$texto")) as $linea){
    if (strstr($linea,$this->palabra)){
    echo">>> $linea, está en la linea : ".$pos .'<br>';
    }
    $pos++;
    }

    $pos1 = strpos((file_get_contents("./nuevo_dir/$texto")), $this->palabra);
    if ($pos1 === false)
    {
    echo "La cadena '$this->palabra' no fue encontrada ";
    echo"<br>"."------U.L------";
    } else {
    echo"------U.L------";
    }
    }
    }
    $Ver=New Letras;
    $Ver-> lista();
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com