van siempre recuperar reciclaje que pueden por para papelera los fotos eliminar eliminados duro donde disco dela definitivamente computadora completo como borrar borra archivos php

php - siempre - eliminar por completo archivos



borrando por completo un archivo del servidor (7)

Quiero eliminar un archivo usando PHP. He usado la función unlink() , pero me preguntaba sobre la seguridad de unlink . ¿El archivo está completamente eliminado del servidor? Quiero asegurarme de que no hay forma de recuperar el archivo y que el archivo se elimine por completo del servidor.


Debe hacer varias pasadas de sobreescritura para eliminar trazas. Por ejemplo, utilizando el DoD 5220-22.M de EE. UU .: "Sobrescriba todas las ubicaciones accesibles con un carácter, su complemento, luego un carácter aleatorio y verifique" (desde el sitio killdisk)


En mi dispositivo Ubuntu incorporado, uso: echo exec(''rm /usr/share/subdirectory/subdirectory/filename''); Esto funciona para mí

si usa rm -f (--force) entonces Linux lo hará

ignorar archivos y argumentos inexistentes, nunca pedir

rm -d will

eliminar directorios vacíos

Si ingresa rm --help en la solicitud, obtendrá la pantalla de ayuda. Las últimas líneas dicen:

Tenga en cuenta que si usa rm para eliminar un archivo, es posible que recupere algunos de sus contenidos, con suficiente experiencia y / o tiempo. Para una mayor seguridad de que los contenidos son realmente irrecuperables, considere usar shred.

Como mi sistema es un sistema "cerrado", no me preocupa violar los problemas de seguridad. Mi lógica es que uno debe tener la contraseña del sistema para SSH en el sistema operativo y la única interfaz de usuario es a través de páginas web.

Los comentarios de @Sliq siguen siendo fieles hasta la fecha. Debe decidir por su caso.


Es posible que debido a cierta fragmentación en el disco, algunas partes del archivo permanezcan, incluso si el archivo está sobrescrito por completo.

La otra forma es ejecutar (mediante el programa externo shell_exec() ), que es específico del sistema. Aquí hay un ejemplo (para Windows), sin embargo no lo he probado.


Es posible que esto no responda CÓMO eliminar perfectamente un archivo "con PHP", pero responde a su pregunta: "¿Se ha eliminado por completo el archivo del servidor?"

En algunos casos, ¡No! (en sistema operativo UNIX / POSIX).

De acuerdo con el comentario más votado en la página oficial del manual de desvinculación de PHP () , la función de desvinculación no elimina realmente el archivo, ¡ está borrando el enlace del sistema al contenido del archivo ! Como los archivos pueden tener varios nombres de archivos (!) [¿Enlaces simbólicos?], El archivo solo se eliminará cuando TODOS los nombres de los archivos estén desvinculados. Entonces, si su archivo tiene 2 nombres, entonces unlink () realmente no eliminará el archivo a menos que desvincule () ambos nombres de archivo. Queridos chicos de Linux, por favor corríjanme aquí si es necesario.

¡Esta podría ser la razón por la cual la función se llama unLINK () y no delete () !

Aquí una cita completa del excelente comentario:

¿Se eliminó un archivo grande pero no se observó un aumento en el espacio libre o una disminución en el uso del disco? ¿Utilizando UNIX u otro sistema operativo POSIX? El desvincular () no se trata de eliminar archivos, se trata de eliminar un nombre de archivo. La página de manual dice: `unlink - delete a name and possibly the file it refers to''''. Most of the time a file has just one name -- removing it will also remove (free, deallocate) the `unlink - delete a name and possibly the file it refers to''''. Most of the time a file has just one name -- removing it will also remove (free, deallocate) the cuerpo del archivo (con una advertencia, ver a continuación). Ese es el caso simple y habitual. Sin embargo, está perfectamente bien que un archivo tenga varios nombres (vea la función de enlace ()), en el mismo directorio o en directorios diferentes. Todos los nombres se referirán al cuerpo del archivo y lo keep it alive'', so to say. Only when all the names are removed, the body of file actually is freed. The caveat: A file''s body may *also* be keep it alive'', so to say. Only when all the names are removed, the body of file actually is freed. The caveat: A file''s body may *also* be keep it alive'', so to say. Only when all the names are removed, the body of file actually is freed. The caveat: A file''s body may *also* be mantenerse keep it alive'', so to say. Only when all the names are removed, the body of file actually is freed. The caveat: A file''s body may *also* be vivo (aún usando el espacio de disco) mediante un proceso que mantiene el archivo abierto. El cuerpo no será desasignado (no liberará espacio en el disco) siempre que el proceso lo mantenga abierto. De hecho, hay una forma elegante de resucitar un archivo eliminado por un error, pero aún se mantiene abierto por un proceso ...

Eche un vistazo al link() función hermana de unlink() link() here .

La (mejor) forma de eliminar un archivo a través de PHP:

El camino a seguir para eliminar realmente un archivo con PHP (en linux) es usar la función exec() , que ejecuta comandos de bash reales (hacer cosas con Linux bash feel correct byt). En este caso, el archivo test.jpg se eliminará haciendo:

exec("rm test.jpg);

Aquí puede encontrar más información sobre cómo usar rm (eliminar) correctamente. Tenga en cuenta: PHP necesita el derecho de eliminar el archivo!

ACTUALIZACIÓN: desafortunadamente, el comando linux rm TAMPOCO realmente no elimina el archivo si tiene dos nombres / enlaces. Mire aquí para más información. Haré una investigación más profunda sobre eso y daré tu opinión ...



abra el archivo en modo binario para escribir, escriba 1 en todo el archivo, cierre el archivo y luego desvíelo. sobrescribe cualquier dato dentro del archivo para que no se pueda recuperar.

Personalmente, diría que usar 1 en lugar de 0 ya que 1 son datos reales y siempre escribirán, mientras que los 0 pueden no escribir, dependiendo de varios factores.

Editar: Después de pensar un poco, y leer comentarios, usaría un enfoque híbrido, dependiendo de "qué tan borrado" quiera que sea el archivo, si simplemente desea hacerlo para que los datos no se puedan recuperar, sobrescriba los archivos completos de longitud con 1, ya que es rápido, y destruye los datos, el problema con esto, es que deja una longitud establecida de datos uniformes en el disco que infiere un archivo UTILIZADO para estar allí y regala la longitud de los archivos, proporcionando piezas vitales de análisis forense información. Simplemente escribir datos aleatorios no evitará esto también, ya que si todos los sectores de unidad alrededor de este archivo no se tocan, esto también dejará una huella forense.

La mejor solución para el borrado forense, la ofuscación y la verosimilitud plausible (una vez más, esto es excesivo, pero lo estoy agregando por el solo hecho de agregarlo), sobrescribe la longitud completa del archivo con 1 y luego, durante la mitad del archivo en bytes, escriba desde mt_rand en tamaños de longitud aleatorios, desde puntos de inicio aleatorios, dejando la impresión de que muchos archivos de diferentes longitudes solían estar en esta área, creando así una pista falsa. (De nuevo, esto es completamente exagerado y generalmente solo lo necesitan los asesinos en serie y la CIA, pero lo estoy agregando por el simple hecho de hacerlo).


el gobierno de los Estados Unidos solía recomendar una limpieza de siete pasos para los discos. 1) todos ''1''s 2) todos'' 0''s 3) el patrón ''01'' 4) el patrón ''10'' 5) un patrón aleatorio 6) todos ''1'' 7) un patrón aleatorio,

El ejemplo del código, usar un lenguaje como PHP es incorrecto para este tipo de borrado ya que su retransmisión en el sistema operativo realmente borra el archivo y no hace algo como limpiarlo solo la última vez o simplemente desvincularlo, sin embargo ...

(no probado)

$filename = "/usr/local/something.txt"; $size = filesize($filename); $pat1 = chr(0); $pat2 = chr(255); $pat3 = chr(170); $pat4 = chr(85); $mask = str_repeat($pat1, $size); file_put_contents($filename, $mask); $mask = str_repeat($pat2, $size); file_put_contents($filename, $mask); $mask = str_repeat($pat3, $size); file_put_contents($filename, $mask); $mask = str_repeat($pat4, $size); file_put_contents($filename, $mask);