1

私は、ユーザーがバックアップしたもののリストから選択したファイルを含むzipファイルをダウンロードできるようにするWebバックアップサービスの一部に取り組んでいます。

zip プロセスは、shell_exec コマンドを介して実行されます。これを機能させるために、Apache ユーザーにパスワードなしの sudo 特権を zip コマンドに与えました。

私の問題は、ユーザーのバックアップファイルを含むフォルダーに「sudo cd /path/to/user/files」を実行できないため、圧縮するファイルへの完全な絶対パスを指定する必要があることです。私が欲しくないzipファイル。

これが私が意味することです:

ユーザー 'test1' のファイルはバックアップされており、次のように保存されて

ます
。 pics/pic3.jpg
/home/backups/test1/hello.txt
/home/backups/test1/music/band/song.mp3

これらのファイルを圧縮すると、完全なパスが保持されますが、表示したいだけです:
my pics/pic1.jpg
my pics/pic2.jpg
my pics/pic3.jpg
hello.txt
music/band/song.mp3

パスを切り捨てるか、各ファイルのカスタム パスを指定するように zip に指示する方法はありますか?
または、相対ファイル パスを簡単に指定できるように、作業ディレクトリをユーザーのルート バックアップ フォルダに変更する方法はありますか。

お読みいただきありがとうございます。ここまで読んでいただければ幸いです。

4

4 に答える 4

2

優れた PHP 圧縮クラスが数多くあるのに、なぜ潜在的に危険なシステム シェル呼び出しを行っているのか、少し疑問に思う必要があります。ここのチュートリアルでは、zip ファイルをブラウザーに出力するクラスを簡単に作成する方法を示します。phpclasses.org にもいくつかのクラスがありますが、これが一番良いようです。

システムコールでそれを行う必要ある場合、私の提案は次のとおりです。

ファイルのパスを切り詰めるには、シンボリック リンクを使用できます。

zip 実行可能ファイルのアクセス許可を増やして、Apache が sudo を使用せずにそれを使用できるようにすることはできませんか?

于 2009-05-05T15:46:00.163 に答える
1

を使用chdir()して作業ディレクトリを変更してみましたか?

chdir('/home/backups/test1/');
于 2009-05-05T15:08:00.940 に答える
1

シェル スクリプトを作成し、そのシェル スクリプトへの sudo アクセスを Web サーバーに許可することをお勧めします。こちらも安心かもしれません

#!/bin/bash
#
# Zip up files for a given user
# 
# usage: backupToZipFile.sh <username>

cd home/backups/$1
tar -czf /tmp/$1.tgz .

また、ルートとしてではなく、ファイルを圧縮しようとしているユーザーとして sudo を実行することを検討しましたか? これもより安全になります。

于 2009-05-06T23:03:53.707 に答える
0

簡単なオプションのように見えますが、それによると、manそこにはありません。もちろん、zipファイルを作成する場所にアーカイブしたいものをシンボリックリンクすることもできます(実際にそのディレクトリにcdできると思います)。適切なオプションを使用zipすると、シンボリックリンク自体をアーカイブするのではなく、シンボリックリンクの名前を使用してシンボリックリンクされたファイルをアーカイブします。

たとえば、シンボリックリンク/ tmp / $ PID / my pics / pic1.jpgなどを作成してから、すべてを/ tmp /$PIDに圧縮します。

于 2009-05-05T15:29:43.150 に答える