1

データベースでさまざまな画像を blob ファイルとして分割しています。これらの blob ファイルにアクセスしてローカルにダウンロードする php スクリプトを作成しました。

多くの画像があるため、データベースに保存されているすべての画像をダウンロードするループを配置しましたが、ループ内でスクリプトを実行すると、1 つの大きなダウンロードが取得され、個別の画像は取得されません。

私のコードは次のとおりです。

$query="SELECT `id` FROM `images` LIMIT 10";
$result=mysql_query($query);
$imageid = array();

while($row = mysql_fetch_assoc($result)){
//iterate over all the fields
foreach($row as $key){ 
    $imageid[] = $key;
    }
} 

$fileName ='';

for ($i = 0; $i < count($imageid); $i++) {

    $query="SELECT `filename` FROM `images` WHERE `id`=".$imageid[$i]."";

    $result=mysql_query($query);

    while($row = mysql_fetch_assoc($result)){
        foreach($row as $key){ 
            $fileName = $key;
        }
    } 


    header("Pragma: public");
    header("Expires: 0"); // set expiration time
    header("Cache-Control: must-revalidate, post-check=0,pre-check=0");

    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");

    header("Content-Transfer-Encoding: binary");

    header('Content-type: application/octet-stream');
        header('Content-Disposition: inline; filename='.$fileName.'');

    $sql = "SELECT `data` FROM `images_data` WHERE `image_id`=".$imageid[$i]." ORDER BY id";    
        $result1=mysql_query($sql);

    while($row = mysql_fetch_array($result1)) echo $row['data'];




}//END FOR LOOP

スクリプトを実行してすべての画像をダウンロードする方法はありますか? $imageid[$i] のパラメーター (例: 0,1,2,3 など) を手動で変更すると、さまざまな画像がダウンロードされますが、使用する必要がある画像の量には役に立ちません。

どんな助けでも大歓迎です!

4

1 に答える 1

1

1 回の php スクリプトの実行で 1 回だけファイルを取得できます。あなたの場合、最善の方法は、DBからすべてのファイルを一時フォルダーに保存し、このフォルダーをzip(またはGZ)し、このZIP(またはGZ)アーカイブを出力した後、header()で対応するMIMEタイプを使用することです

于 2013-04-10T16:54:19.407 に答える