質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

938閲覧

AWS SDK for PHP を用いたzip圧縮での効率的なS3への転送方法

mosa

総合スコア218

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2019/03/02 03:18

編集2019/03/02 05:06

いつもありがとうございます。

プログラム中で持っているあるデータをS3にzip圧縮して保存する高速な方法を探しています。
現在は以下のようにしています。

PHPでデータをファイル出力  ↓ Linux の zip コマンドで圧縮  ↓ AWS SDK for PHP でそのファイルを指定して S3 にファイル転送

そもそも一度ファイル化する必要性がない気がするのですがそれ以外の方法がわかりません。
メモリは十分にあり、メモリを超えるデータはない前提です。
gzip 等ではなく zip でないとダメです。

CentOS7.4 PHP7(CakePHP3) AWS SDK for PHPv3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

3つのステップが機能として分かれているのは良いことだと思います。
なにか問題が発生した場合にも中間ファイルを確認することが可能です。
それらを順に実行するバッチをSHELLで書けばいかがでしょうか?

mosaさんの処理

1.PHPでデータをファイル出力
2.Linux の zip コマンドで圧縮
3.AWS SDK for PHP でそのファイルを指定して S3 にファイル転送

私が提案する処理

1.PHPでデータをファイル出力
2.Linux の zip コマンドで圧縮
3.AWS CLIでS3にファイル転送

エラー処理は書いていませんが、以下のようなバッチで簡単に実現可能です。

shell

1#!/bin/sh 2 3./hogehoge.php > data.dat 4 5rm -f data.zip 6zip data.zip data.dat 7 8aws s3 cp data.zip s3://bucket/data.zip

投稿2019/03/05 01:50

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mosa

2019/03/12 00:45

うーん。。そうですよね。 「3つのステップが機能として分かれているのは良いことだと思います」というのはまさにおっしゃる通りだと思うのですが、ローカルストレージに一度書き出すのがどうしてもムダに見えてしまって。。。
moonphase

2019/03/12 01:47

プログラムは一見、無駄が多いように見えますが実際は上記にエラー判定処理も入ります。 ディスクの障害、ネットワークの障害、電源の障害などにより様々なエラーが発生することがあります。 無駄ではありませんが、ローカルストレージに保存せずに出力をストリームで圧縮してアップロードするなら、gzipであればパイプラインのみで簡単にできますね。zipは仕様上それができないので、以下のように②を作ればできます。 1.PHPでデータをファイル出力(prog1) 2.入力ストリームの内容を圧縮されたZIPとして出力(prog2) 3.AWS CLIでストリームの内容をS3にファイル転送 ②については標準入力をZIP圧縮して標準出力にストリームするだけの簡単なプログラムです。 prog1 | prog2 | aws s3 cp - s3://bucket/data.zip
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問