私は、ユーザーがサーバー側にある写真のアーカイブを作成し、その間にPHPが実行終了するまで何が起きているのかを知らずに白いページで待たずにこのアーカイブをダウンロードできるようにしようとしています。PHPで写真のアーカイブを作成する前に、どのようにページを読み込むことができますか?
私は、index.htmlのようなhtml形式の写真のリストを持っています。
<form action="include/download_archive.php" method="POST" id="downloadForm">
<input type="hidden" name="downloadForm" value="downloadForm">
<ul id="photos">
//JavaScript populates this list with photos once the document is ready.
</ul>
</form>
フォームを送信するjavascript機能をトリガーするボタンもあります。私は、画像の配列を読んでアーカイブを作成し、そのアーカイブにダウンロードリンクを提供しています、フォームの送信を処理するPHPページ(download_archive.php言う)で
document.getElementById('downloadForm').submit();
。
if(isset($_POST['downloadForm']) && $_POST['downloadForm']=="downloadForm"){
ignore_user_abort(true);
ini_set('max_input_vars','500000');
set_time_limit(0);
//Checking if the zip already exists and remove it
if(file_exists('../collections/Zips/'.$collection.'.zip'))
unlink('../collections/Zips/'.$collection.'.zip');
//Get the array of images
$images = $_POST['images'];
//Push the images into a new array with the correct path
foreach($images as $image => $value) {
array_push($files, "../collections/".$collection."/".$value);
}
//Create a new archive
$zip = new ZipArchive;
$zip->open('../collections/Zips/'.$collection.'.zip', ZipArchive::CREATE);
//Add the files to the archive
foreach ($files as $file) {
$zip->addFile($file);
}
//Store the relative location to the zip file
$zipPath = '../collections/Zips/'.$collection.'.zip';
//If the zip was succesfully closed, echo a download link.
if($zip->close()){
$link = BASE_URL2."collections/Zips/".$collection.'.zip';
$link = str_replace(" ", "%20", $link);
echo "<a href='".$link."'>Download photos</a>";
}
主な問題は、一度、私はメインページの写真を選択し、「ダウンロード」ボタンを押すと、フォームにはJavaScriptによって提出されていることです。私は、PHPのスクリプト全体が完了してからPHPページにリダイレクトされるまで、メインページに待機しています。
私は、アーカイブの作成を処理するPHPページ上にフォームを持っていると思っていました。そして、PHPフォームが完全に読み込まれたときにファイル配列を取得しています。内部フォームが、私はこれらの操作(ファイルの配列)全体のデータを維持するのに問題があります。
私はasynch PHPについても考えましたが、制限されていると思われるsocket-way以外の方法を見つけることができませんでした。
私はそれを過度に作成していると信じています。これをどのように達成できますか?
私は答えを受け入れませんでしたが、動作するように聞こえても、私はこのアプローチを使用してPHPスクリプトを実行することはできませんでした。これを使用して私を歩くための簡単な例/リンクがありますか? – 1istbesser
しばらくお待ちください。より詳細な例を書いて答えを更新します... – Phright
OK - 私は完全に実例を書いています。何か問題がある場合は教えてください。 – Phright