0

PHPでFacebookアルバムをダウンロードするスクリプトを作成しました。ダウンロード ボタンをクリックすると、スクリプトはバックグラウンドでそのアルバム内のすべての写真を取得し、それらをフォルダー内に圧縮します。ダウンロードプロセスに時間がかかる場合があるため、ユーザーがダウンロードボタンをクリックするとすぐに「進行状況バー」を開始したいと考えています。

以下はindex.php

if ($album['count'] != "0 photos") 
{
   echo "<a href=\"download.php?id={$album['id']}\" title='Download this Album'  class='downloadbtn'><img src=\"common/images/download_button (1).png\"></a>";
}

ここでは、アルバム ID をdownload.php

以下は、download.php画像をダウンロードフォルダーにダウンロードし、そのすべての画像のzipファイルを作成し、そのzipファイルをダウンロードするコードです。

<?php
require 'facebook/facebook.php';

$facebook = new Facebook(array(
            'appId' => 'xxxxxxxxxxxxx',
            'secret' => 'xxxxxxxxxxxxxxxxxxxxx',
            'cookie' => true,
        ));

//GETTING THE ID HERE FROM INDEX.PHP FILE

$albumid = $_GET['id'];
$photos = $facebook->api("/{$albumid}/photos?limit=50");

$file_name = rand(1, 99999) . "_image.zip";
$albumArr = array();
foreach ($photos['data'] as $photo) {
    $albumArr[] = $photo['source'];
}

create_zip($albumArr, $file_name);

function create_zip($files, $file_name, $overwrite = false) {
    $i = 0;
    $imgFiles = array();
    foreach ($files as $imglink) {
        $img = @file_get_contents($imglink);
        $destination_path = 'downloads/' . time() . "Image_" . $i . '.jpg';
        @file_put_contents($destination_path, $img);
        $imgFiles[] = $destination_path;
        $i++;
    }

    if (file_exists($file_name) && !$overwrite) {
        return false;
    }
    $valid_files = array();
    if (is_array($imgFiles)) {
        foreach ($imgFiles as $file) {
            $valid_files[] = $file;
        }
    }

    if (count($valid_files)) {

        $zip = new ZipArchive();
        if ($zip->open($file_name, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
            echo "Sorry ZIP creation failed at this time";
        }
        $size1 = 0;
        foreach ($valid_files as $file) {
            $size1+= filesize($file);
            $zip->addFile($file, pathinfo($file, PATHINFO_BASENAME));
        }

        $zip->close();

        $allimages = glob('downloads/*.jpg');

        foreach ($allimages as $img) { // iterate images
            if (is_file($img)) {
                unlink($img); // delete images
            }
        }

        $count = $zip->numFiles;
        $resultArr = array();
        $resultArr['count'] = $count;
        $resultArr['destination'] = $file_name;

        $filename = $file_name;
        $filepath = $_SERVER['HTTP_HOST'] . '/';
        $path = $filepath . $filename;

        if (file_exists($filename)) {
            // push to download the zip
            header('Content-type: application/zip');
            header('Content-Disposition: attachment; filename="' . $filename . '"');
            readfile($filename);
            unlink($filename);
        }
    } else {
        return false;
    }
}
?>

ダウンロードプロセスに時間がかかる場合があるため、ユーザーがダウンロードボタンをクリックするとすぐに「進行状況バー」を開始したいと考えています。

これどうやってするの?ありがとう

4

2 に答える 2

1

このようなもの?あなたの質問が理解できなかったら教えてください

HTML:

 <img id="loadingImage" src="pathToImage" alt="" style="display:none" />
 //pathToImage is the path to where your image is located

jQuery:

$('#YourButtonID').click(function(){
    $('#loadingImage').css('display','block');
    //call your download page
    return false;
});

ダウンロードとリダイレクトが完了したら、このメソッドを呼び出して進行状況バーを非表示にします

    $('#loadingImage').css('display','none');
于 2013-02-11T12:17:11.977 に答える
0

これは、ajax を使用して行うことができます。

$(document).ready(function()
{
  $("#download_button").click(function() {
     document.getElementById('progressbar').style.display='';
     //call your download page.
  });
});
于 2013-02-11T12:04:03.087 に答える