2012-06-13 32 views
6

Có ai đó biết một giải pháp PHP tốt để xóa hoặc xóa sạch tệp tốt hơn khỏi hệ thống Linux không?Xóa an toàn với PHP 5.3.x

Kịch bản: Tệp được mã hóa và lưu, khi tải xuống được yêu cầu, tệp được sao chép vào thư mục tạm thời và giải mã. Điều này đã hoạt động.

Nhưng cách xóa tệp khỏi vị trí tạm thời sau khi gửi cho người dùng?

Trong tâm trí của tôi, tôi có các tùy chọn sau:

  • mở File qua "fopen" và viết 0,1 vào nó (suy nghĩ rất chậm)
  • Lưu tập tin vào memcache thay vì ổ cứng (có thể là một vấn đề với hoster của tôi)
  • Sử dụng somd cụ viên hoặc thứ 3 trên dòng lệnh hoặc như cronjob (có thể là một vấn đề để cài đặt)

Mục tiêu: Xóa các tập tin từ ổ đĩa cứng, mà không có khả năng thu hồi (lau/o verwrite)

+1

Bạn không thể giải mã trực tiếp và gửi thay vì tạo tệp tạm thời? –

+0

Vấn đề cần giải quyết ở đây là gì? An ninh đã đủ khó để có được ngay khi bạn biết * chính xác * những gì bạn muốn. – Jon

+0

Đầu tiên nghĩ rằng bật ra là việc sử dụng unlink() [link] (http://php.net/manual/en/function.unlink.php), mà bạn thậm chí có thể sử dụng với md5(). Tuy nhiên, đây không phải là một lau và nó không phải là giải pháp tốt nhất. Có thể thử shell_exec()? – AleksanderKseniya

Trả lời

5

Có thể cho rằng tốt nhất là không bao giờ lưu các tập tin trong trạng thái giải mã của nó ở nơi đầu tiên.

Thay vào đó, hãy sử dụng stream filters để giải mã trực tiếp và gửi trực tiếp đến người dùng cuối.

Cập nhật

lựa chọn của bạn 1 là thực sự không phải là quá xấu nếu bạn xem xét mã này:

$filename = 'path/to/file'; 
$size = filesize($filename); 

$src = fopen('/dev/zero', 'rb'); 
$dest = fopen('/path/to/file', 'wb'); 

stream_copy_to_stream($src, $dest, $size); 

fclose($src); 
fclose($dest); 

Bạn có thể chọn /dev/urandom là tốt, nhưng điều đó sẽ chậm.

Các vấn đề liên quan