elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ... 75
141  Programación / PHP / Re: Cambiar de directorio en: 27 Mayo 2016, 20:15 pm
Lo de dirname() es porque antes estaba usando el separador de unix / y en windows es \ por lo tanto:

Código
  1. $backDir = $dirName == '/' ? '' : '?move=' . $dirName;

En tu caso tu botón tiene /test?move=\ y el mio /test. Esto resuelve el misterio de porqué a tí se te muestra el botón en el directorio raiz, al ser la url /test?move=\ entonces $newPath ya no es NULL y entonces se muestra el botón.

Antes de PHP 7, dirname mostraba el primer directorio: /dir1/dir2/dir3 -> /dir1 o C:\dir1\dir2\dir3 -> C:\dir1. Ahora sube 1 nivel por defecto, con la adicción del parámetro adicional levels, que puedes elegir cuantos subir.

Todo estó quedo arreglado en la versión 1.0  ;D

Aaalaaaaaa  :o hahahaha  ;D (al menos no es tanto como lo que intenté hacer una vez...  :silbar:)

Mira esta manera parece más complicada?  :rolleyes:

Código
  1. // IMPORTANT: Requires PHP >= 7
  2.  
  3. $newPath = $_GET['move'] ?? NULL;
  4. $slash   = DIRECTORY_SEPARATOR; // \ for Windows and / for the rest
  5. $levels  = count(explode($slash, $newPath)) - 1;
  6. $baseDir = '/home/admin'; // Absolute path to document root
  7.  
  8. $path  = realpath($baseDir . $newPath); // Checks for a valid and existent path within the document root
  9.  
  10. if ( NULL !== $newPath ) {
  11.    if (dirname($path, $levels) !== $baseDir) die('Sorry I just died :P'); // Hack attempt
  12. }
  13.  
  14. if ( FALSE !== $path && is_dir($path) ) {
  15.  
  16.    $files          = new FileSystemIterator($path, FileSystemIterator::SKIP_DOTS);
  17.    $privateArray   = [ '.htaccess' => '', 'h4x0r stuff' => '', 'etc...' => '' ]; // List of excluded files and folders
  18.    $folder_list    = $file_list = '';
  19.  
  20.    if ( FALSE !== $files ) {
  21.  
  22.        if ( isset($newPath) && $newPath != '' ) {
  23.  
  24.            $dirName = dirname($newPath);
  25.            $backDir = $dirName == $slash ? '' : '?move=' . $dirName;
  26.  
  27.            echo '<a href="/test' . $backDir . '">Go Back</a><br />';
  28.  
  29.        }
  30.  
  31.        foreach ( $files as $file ) {
  32.  
  33.            $baseName = basename($file);
  34.  
  35.            if ( !isset($privateArray[$baseName]) ) {
  36.  
  37.                if ( is_dir($file) ) {
  38.  
  39.                    $dir = isset($newPath) ? '?move=' . $newPath . $slash . $baseName : '?move=' . $slash . $baseName;
  40.  
  41.                    $folder_list .= '<a href="/test' . $dir . '">' . $file . '</a><br />';
  42.  
  43.                }
  44.  
  45.                if ( is_file($file) ) {
  46.                    $file_list .= '<a href="#">' . $file . '</a><br />';
  47.                }
  48.  
  49.            }
  50.        }
  51.  
  52.        echo $folder_list, $file_list;
  53.  
  54.    }
  55. }

Ahora es más facil darle estilo a la lista.
142  Programación / PHP / Re: Cambiar de directorio en: 27 Mayo 2016, 19:09 pm
Dejo la versión 1.0 release del script  ;D

Sigo sin saber por qué te salia el botón en el directorio raiz, pero ahora sé que estás en Windows y el separador de directorios es la barra invertida en lugar de la normal. El script ahora soporta Windows también:

Código
  1. $newPath = $_GET['move'] ?? NULL;
  2. $slash   = DIRECTORY_SEPARATOR; // \ for Windows and / for the rest
  3. $levels  = count(explode($slash, $newPath)) - 1;
  4. $baseDir = 'C:\\Apache\\htdocs\\'; // Absolute path to document root
  5.  
  6. $folder  = realpath($baseDir . $newPath);  // Checks for a valid and existent path
  7.  
  8. if ( NULL !== $newPath ) {
  9.    if (dirname($folder, $levels) !== $baseDir) die('Sorry I just died :P'); // Hack attempt
  10. }
  11.  
  12. if ( FALSE !== $folder && is_dir($folder) ) {
  13.  
  14.    $files          = new FileSystemIterator($folder, FileSystemIterator::SKIP_DOTS);
  15.    $privateArray   = [ '.htaccess' => '', 'h4x0r stuff' => '', 'etc...' => '' ]; // List of excluded files and folders
  16.  
  17.    if ( FALSE !== $files ) {
  18.  
  19.        if ( isset($newPath) && $newPath != '' ) {
  20.  
  21.            $dirName = dirname($newPath);
  22.            $backDir = $dirName == $slash ? '' : '?move=' . $dirName;
  23.  
  24.            echo '<a href="/test' . $backDir . '">Go Back</a><br />';
  25.  
  26.        }
  27.  
  28.        foreach ( $files as $file ) {
  29.  
  30.            $baseName = basename($file);
  31.  
  32.            if ( !isset($privateArray[$baseName]) ) {
  33.  
  34.                $dir = is_dir($file)
  35.                          ? (isset($newPath) ? '?move=' . $newPath . $slash . $baseName : '?move=' . $slash . $baseName)
  36.                          : '#';
  37.  
  38.                echo '<a href="/test', $dir, '">', $file, '</a><br />';
  39.  
  40.            }
  41.        }
  42.    }
  43. }

La dirección base tiene que ser absoluta, en Windows empezando por la letra de la unidad, que suele ser C.

Con realpath() ya te aseguras de que no se salga del document root, pero dará un error, para evitar esto se hace una pequeña comprobación y si se cumple entonces se termina el script y no se sigue ejecutando. También sirve por si quieres mostrar solo a partir de un subdirectorio y si se intenta subir con .. entonces realpath no dará error, pero la comprobación terminará el script y se evitará que se muestren directorios que no permites.

También he añadido otra comprobación por si se quieren excluir archivos y carpetas. Lo que no quieras que se muestre añadelo a la lista. Como se comprueba por key (nombre de archivo/carpeta) hay que darle un valor cualquiera (en este caso '') a cada elemento del array (lista).
143  Programación / PHP / Re: ajax recibir daros en: 27 Mayo 2016, 18:24 pm
Haciendo eso no serviria para tiempo real, porque si entran dos usuarios a la web y sin recargar la página pondrían mensajes y cada uno solo vería sus propios mensajes y no los de los demás hasta que no recargaran.

Para producción hay varias cosas que se podrían mejorar bastante:

Primero ese script estaría llamando mil veces la misma función y reventaria el servidor cuando hayan varios usuarios online. Para solucionarlo se mueve el while dentro de la función, llamandola 1 vez pasandole como arguamento el fetch array:

Código
  1. function mostrarDatos($result, $color) {
  2.    while ($fila = mysqli_fetch_array($result)) {
  3.  
  4.    }
  5. }
  6.  
  7. $result = mysqli_query($link, 'SELECT * FROM chat');
  8.  
  9. echo mostrarDatos($result, $color);
  10.  

De igual modo no veo necesidad para una función...

Para tiempo real, habria que hacer que jquery hiciera una petición cada X segundos (5 como mínimo) y que comprobara si hay nuevos mensajes. Para empezar habria que enumerarlos con un id y usar ese id para saber cual es el ultimo mensaje y mostrar los ids que falten.
144  Programación / PHP / Re: Cambiar de directorio en: 27 Mayo 2016, 15:30 pm
Te estás confundiendo, == y !== son dos cosas totalmente distintas, ¿no te leiste la tabla de comparadores?

==   -> es igual
=== -> es idéntico
!=    -> no es igual
!==  -> no es idéntico

Eso es muy extraño, a mí el boton "Go back" no se me muestra en el directorio raiz.

(Por cierto eso se llama condición, no operador.)

Ah si, la barra invertida se usa para escapar caracteres, incluida ella misma.



Edito: Ah vale lo siento (soy yo el que me he confundido  :-[). Que pusiste TRUE en el segundo if, y yo dando por sentado que ambos tenian FALSE. Si, el resultado sería el mismo.

De todas maneras ya sabes que no se debe usar == para estos casos. Por lo tanto no es por gusto.

Estoy algo espeso ultimamente...

Edito 2: Estoy mejorando el script ya que voy a usarlo yo tmb xD Termino otras cosas y lo pondré.
145  Programación / Desarrollo Web / Re: scrollIntoview en: 27 Mayo 2016, 15:13 pm
El scroll que quieres que baje es lo de menos, lo cambias donde dice 'html, body' cambias por el elemento div y será ese scroll el que se anime (o eso creo :P)

Pruebalo con algo más simple como un simple click y a ver si funciona como quieres, luego le añades ese if y así te aseguras que el scroll funciona.
146  Programación / PHP / Re: Cambiar de directorio en: 27 Mayo 2016, 00:09 am
Vale, lo de los puntos y comas: para enlazar contenido dinamico, lo que php hace es concatenar los strings con variables o funciones usando el punto.

Código
  1. $mensaje = 'Hola ' . $nombre;

echo() no es una simple función, es un constructor de lenguage especial, por lo que acepta varias expresiones separadas por una coma.

La diferencia radica en que al concatenar, primero se juntan todos los trozos y luego se muestran, sin embargo si usas comas en echo, simplemente se muestran los trozos, sin tener que juntarlos. Esto supone un ahorro considerable. Siempre que uses echo utiliza la coma en lugar del punto.

La ultima pregunta: lo primero es por gusto: es lo mismo decir "(1+1) === 2" que "2 === (1+1)".

Lo segundo ya tiene su porque: no es lo mismo decir "X es identico a Y" que "X NO es identico Y": Eso es, el ! es negación cuando lo pones delante:

Código
  1. $variable = TRUE;
  2.  
  3. if (!$variable) {}
  4. // o lo que es lo mismo
  5. if (TRUE !== $variable) {}
  6. // no es lo mismo que
  7. if (TRUE === $variable) {}

Los dos primeros if no se cumplen, el tercero si que se cumple.
147  Programación / PHP / Re: Cambiar de directorio en: 26 Mayo 2016, 21:06 pm
Sobre lo de igual e idéntico, engel lex dijo algo muy importante, no sé si te acordarás:

debido a la similitud entre 0, "" y false al no usar === en lugares clave, los programas pueden fallar

Básicamente cuandro trabajes con booleanos TRUE y FALSE usa identico para asegurarte que la respuesta solo sea esa y no un 0 o un 1 un texto o cualquier cosa que pueda dar positivo y no sea TRUE o falso y no sea FALSE.

Exacto! asi es, te paso una versión más completa. No se si te has fijado, pero te estás introduciendo a los Operadores ternarios (x = y ? 'si' : 'no') que, en ocasiones van mejor que un simple if y también al nuevo Null Coalesce Operator (x ?? 'no') si x no es null/false o el 'no', son un else/if simplificados.

Código
  1. $newPath = $_GET['move'] ?? NULL;
  2.  
  3. $folder = realpath('./' . $newPath);
  4.  
  5. if ( FALSE !== $folder && is_dir($folder) ) {
  6.  
  7.    $files  = new FileSystemIterator($folder, FileSystemIterator::SKIP_DOTS);
  8.  
  9.    if ( FALSE !== $files ) {
  10.  
  11.        $back_dir = dirname($newPath) == '/' ? '' : dirname($newPath);
  12.  
  13.        echo isset($newPath)
  14.                ? ($newPath == '' ? '' : '<a href="?move=' . $back_dir . '">Go Back</a><br />')
  15.                : '';
  16.  
  17.        foreach ( $files as $file ) {
  18.  
  19.            $dir = is_dir($file) ? (isset($newPath) ? '?move=' . $newPath . '/' . basename($file) : '?move=/' . basename($file)) : '#';
  20.  
  21.            echo '<a href="', $dir, '">', $file, '</a><br />';
  22.  
  23.        }
  24.    }
  25. }
148  Programación / Desarrollo Web / Re: scrollIntoview en: 26 Mayo 2016, 13:24 pm
A mí me funciona perfectamente, mira que es lo que estás haciendo mal. ¿Lo has puesto dentro de un document ready? ¿Donde tenias antes tu código?
149  Programación / PHP / Re: Cambiar de directorio en: 26 Mayo 2016, 05:34 am
Hmmm con eso no vás a conseguir mostrar los archivos y carpetas de la ruta a la que hagas click. Fíjate bien: lo que estás haciendo es cuando le das click a cualquier ruta, hace una petición y el script vuelve a empezar, entonces el primer directorio activara el chdir(), por lo que si le has dado click al primero tuviste suerte, pero si le das click a otro  :silbar:

De todas maneras no se puede hacer de esa manera, necesitas saber cual es el nombre del directorio antes de empezar el foreach, por lo que hay que pasarlo por get (como hace apache).

Tampoco tiene mucho sentido redeclarar $list como $dir_list o $file_list, es un simple número y van a tener el mismo valor siempre...

Es aconsejable comprobar primero que el directorio existe para que no de error. Puedes usar realpath().

Luego, scandir() es conocido por ser lento, en su lugar utiliza FilesystemIterator():

Por cierto, ya se te olvido lo de igual e idéntico?  :P

Código
  1. if ($com_dir == true)

 :rolleyes:

Código
  1. // necesitas php >= 7 para esto
  2. // si no usa isset($_GET['move']) ? $_GET['move'] : NULL;
  3. $newPath = $_GET['move'] ?? NULL;
  4.  
  5. $folder = realpath('./css' . $newPath);
  6.  
  7. if ( FALSE !== $folder && is_dir($folder) ) {
  8.  
  9.    $files  = new FileSystemIterator($folder, FileSystemIterator::SKIP_DOTS);
  10.  
  11.    if ( FALSE !== $files ) {
  12.  
  13.        echo isset($newPath) ? '<a href="/test">Go Back</a><br />' : '';
  14.  
  15.        foreach ( $files as $file ) {
  16.  
  17.            $dir = is_dir($file) ? '?move=/' . basename($file) : '#';
  18.  
  19.            echo '<a href="', $dir, '">', $file, '</a><br />';
  20.  
  21.        }
  22.    }
  23. }

Actualmente solo sube 1 nivel, te dejo a tí como hacer que suba 2 o más niveles, no es nada dificil, usa la imaginación  ;D

Si van a acceder a este script más personas (que no son de confianza) tendrás que verificar ese get.
150  Programación / Desarrollo Web / Re: scrollIntoview en: 25 Mayo 2016, 19:58 pm
Código
  1. $('html, body').animate({scrollTop: $( $( '#final' ) ).offset().top}, 1000);

El 1000 es el tiempo de transicción que dura la animación, reducelo o aumentalo a tu gusto.

Yo no mezclaria javascript con JQuery, si vas a trabajar con un lenguaje ciñete con ese y será más facil entender el código y encontrar los errores. En este caso con más razón, estás cargando una libreria entera (JQuery) que te facilita la vida.

Recuerda "Write less, do more"  ;)


Por cierto, si una pregunta ya la tienes respondida y se ha solucionado tu problema, indicalo cambiando el icono del primer mensaje y responde para que sepamos que ya está solucionado. A parte, un gracias nunca está de más. (tienes varias preguntas aun abiertas y no has dicho nada...)
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ... 75
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines