私が進めているプロジェクトでは、.tar.gzアーカイブを作成して外部サービスに提供する必要があります。この外部サービスは.tar.gzのみで動作し、別のタイプのアーカイブは問題になりません。私が作業しているコードが実行されるサーバーは、システムコールへのアクセスを許可しません。だからsystem
、exec
、バッククックなどはブエノではありません。つまり、.tar.gzファイルを作成するには純粋なPHP実装に頼らなければなりません。PHPを使用して.tar.gzファイルを作成する
少しの研究を行ったところ、PharData
が結果を達成するのに役立つようです。しかし、私はそれで壁を打って、いくつかの指導が必要です。
は、次のフォルダのレイアウトを考えてみましょう:私は、トリックを行いますが、最終結果にマイナーな問題があります.tar.gzアーカイブを作成するには、以下のコードスニペットを使用しています
parent folder
- child folder 1
- child folder 2
- file1
- file2
、それはしていません親フォルダは含まれていますが、その中のすべてが含まれます。
$pd = new PharData('archive.tar');
$dir = realpath("parent-folder");
$pd->buildFromDirectory($dir);
$pd->compress(Phar::GZ);
unset($pd);
unlink('archive.tar');
アーカイブを作成するときには、上記のフォルダレイアウトと完全に一致する必要があります。
- child folder 1
- child folder 2
- file1
- file2
がbuildFromDirectory
の説明は、それがアーカイブに親フォルダを含有していないので、次のように言及しない:上記のコードスニペットを使用して、アーカイブには、外部サービスのための契約ブレーカである親フォルダ以外のすべてを含んでいます
ディレクトリ内のファイルからtar/zipアーカイブを作成します。
私もbuildFromIterator
を使ってみましたが、最終結果は同じです。つまり、親フォルダはアーカイブに含まれていません。私はaddFile
を使用して希望の結果を得ることができましたが、これは痛いほど遅いです。
もう少し調査を行ったところ、次のライブラリが見つかりました:https://github.com/alchemy-fr/Zippy。しかし、これはサーバー上で利用できないcomposer
サポートを必要とします。誰かが最終結果を達成するために私を導くことができたら、私は感謝します。また、純粋なPHP実装であり、外部依存関係を必要としない限り、他のメソッドやライブラリを使用することもできます。コードが実行されるサーバが役立つかどうかわからない場合PHP 5.6
サーバー上にコンポーザーは必要ありません。あなたは地元の開発マシンで作曲家が必要です。 – DanielO
@DanielO。素晴らしい情報をありがとう、それを感謝します。あなたがすでにそれを理解したように、作曲家との私の経験は限られています! :)私はそれを試して見てみましょう。 –