Diferencia entre revisiones de «Plantilla:ManuelRomero/PHP/OperadoresExpresiones»
De WikiEducator
(→Operadores de Control de Errores) |
|||
(5 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 2: | Línea 2: | ||
==Operadores y expresiones== | ==Operadores y expresiones== | ||
+ | <br /> | ||
{{MRM_Definicion|Title=¿Qué es una expresión?| | {{MRM_Definicion|Title=¿Qué es una expresión?| | ||
Línea 600: | Línea 601: | ||
</source> | </source> | ||
− | + | {{Notas| | |
− | + | *1. Usar **@** puede dificultar la depuración, ya que los errores se suprimen y pueden pasar desapercibidos. | |
− | 1. Usar **@** puede dificultar la depuración, ya que los errores se suprimen y pueden pasar desapercibidos. | + | *2. En entornos de producción, es preferible manejar los errores mediante [manejo de excepciones](http://php.net/manual/es/language.exceptions.php) o configuraciones de registro de errores. |
− | 2. En entornos de producción, es preferible manejar los errores mediante [manejo de excepciones](http://php.net/manual/es/language.exceptions.php) o configuraciones de registro de errores. | + | *3. Aunque útil en algunos casos, **@** debe evitarse en código crítico o de gran complejidad. |
− | 3. Aunque útil en algunos casos, **@** debe evitarse en código crítico o de gran complejidad. | + | }} |
===Operadores Bit a Bit=== | ===Operadores Bit a Bit=== | ||
Línea 707: | Línea 708: | ||
</source> | </source> | ||
− | === | + | === Operadores de Ejecución (``)=== |
− | + | ||
− | + | ||
− | + | ||
− | + | El operador '''``''' permite ejecutar comandos del sistema directamente desde PHP. Es equivalente a usar la función [shell_exec()](http://php.net/manual/es/function.shell-exec.php). | |
− | + | ====Funcionamiento==== | |
− | + | * Los comandos dentro de las comillas invertidas '''``''' se ejecutan en el sistema operativo, y el resultado se devuelve como una cadena de texto. | |
− | + | * Es útil para interactuar con el sistema desde un script PHP, pero debe usarse con precaución, especialmente en entornos de producción. | |
− | + | ||
− | + | ====Ejemplo Básico==== | |
+ | |||
+ | El siguiente código ejecuta el comando `df` (para mostrar información sobre discos y particiones en sistemas Linux): | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | + | $Discos = `df`; // Ejecuta el comando `df` | |
− | $ | + | echo "<pre>$Discos</pre>"; // Muestra el resultado en un formato legible |
− | + | ||
− | + | ||
− | // | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | echo " | + | |
− | + | ||
− | + | ||
?> | ?> | ||
</source> | </source> | ||
− | + | El código anterior generará una salida similar a esta (en sistemas Linux): | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<source lang=php> | <source lang=php> | ||
− | + | Filesystem 1K-blocks Used Available Use% Mounted on | |
+ | /dev/sda5 86378608 6072360 75895384 8% / | ||
+ | none 4 0 4 0% /sys/fs/cgroup | ||
+ | udev 4023720 4 4023716 1% /dev | ||
+ | tmpfs 806904 1384 805520 1% /run | ||
+ | none 5120 0 5120 0% /run/lock | ||
+ | none 4034504 6588 4027916 1% /run/shm | ||
+ | none 102400 28 102372 1% /run/user | ||
+ | /dev/sda7 101797224 40480360 56122728 42% /home | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | ====Equivalencia con shell_exec()==== | ||
+ | El operador de comillas invertidas '''``''' es funcionalmente igual a usar la función [shell_exec()](http://php.net/manual/es/function.shell-exec.php). | ||
− | + | Por ejemplo: | |
− | + | ||
− | + | ||
− | + | ||
− | : | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<source lang=php> | <source lang=php> | ||
− | $ | + | <?php |
− | + | $Discos = shell_exec('df'); // También ejecuta el comando `df` | |
− | + | echo "<pre>$Discos</pre>"; | |
− | + | ?> | |
− | + | ||
− | + | ||
− | + | ||
</source> | </source> | ||
− | |||
− | + | ====Notas Importantes==== | |
− | + | ||
− | + | 1. '''Restricciones del sistema:''' | |
− | + | Si [safe_mode](http://php.net/manual/es/ini.sect.safe-mode.php#ini.safe-mode) está activado o la función `shell_exec()` está deshabilitada, el operador de ejecución no funcionará. | |
− | + | Este operador sólo es funcional en entornos donde PHP tiene permisos para ejecutar comandos del sistema. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | 2. '''Compatibilidad con el sistema operativo:''' | |
− | + | En sistemas Linux/Unix, puedes usar comandos como `ls`, `df`, `cat`, etc. | |
− | : | + | En sistemas Windows, usa comandos como `dir`, `type`, etc. |
− | + | ||
− | + | ||
− | + | ||
− | + | 3. '''Precauciones de seguridad:''' | |
− | + | Nunca uses entradas del usuario directamente dentro del operador de ejecución. | |
+ | Usa funciones como [escapeshellcmd()](http://php.net/manual/es/function.escapeshellcmd.php) para evitar inyecciones de comandos. | ||
− | + | ====Actividad Práctica==== | |
− | + | ||
− | + | ||
− | + | ||
− | + | 1. Escribe un programa que use el operador `` para listar los archivos del directorio actual (Linux: `ls`, Windows: `dir`). | |
− | + | 2. Modifica el programa para mostrar el contenido de un archivo específico. | |
− | + | 3. Usa [escapeshellcmd()](http://php.net/manual/es/function.escapeshellcmd.php) para proteger las entradas del usuario. | |
− | el | + | |
− | el | + | |
− | + | ||
− | + | ||
− | + | '''Plantilla de Ejemplo:''' | |
− | + | ||
− | : | + | |
− | + | ||
− | + | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | + | // Listar archivos en el directorio actual | |
− | + | $listado = `ls -al`; // En Linux/Unix | |
− | + | // $listado = `dir`; // En Windows | |
− | + | echo "<pre>$listado</pre>"; | |
− | + | ||
− | + | ||
− | </ | + | |
− | + | ||
− | + | // Mostrar contenido de un archivo (protegido) | |
− | + | $archivo = escapeshellcmd("archivo.txt"); | |
− | + | $contenido = `cat $archivo`; // En Linux/Unix | |
− | + | // $contenido = `type $archivo`; // En Windows | |
− | + | echo "<pre>$contenido</pre>"; | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | $ | + | |
− | echo "<pre>$ | + | |
?> | ?> | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |