私はzipファイルトラフPHPを作成してダウンロードしようとしています。私のコードは、macを除いて、すべてのポッシブルディスポーザリでうまくいく。 Macユーザーがファイルをダウンロードしようとすると、ブラウザは数分後に「空の応答」エラーを表示します。 zipファイルのサイズは可変であるが、常に1.5GBMacコンピュータでPHPでzipファイルをダウンロード
これは、ZIPの作成やダウンロードをiniciates javascript関数であるに近いです、この1:
var peticion = ConstructorXMLHttpRequest();
if (peticion){
disableButtons();
peticion.open('POST', './php/createzip.php');
peticion.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
peticion.onreadystatechange = function() { //llama a una funcion cuando el estado cambia
if(peticion.readyState == 4 && peticion.status == 200) {
window.location.href = './php/download.php?az='+id_windturbine;
enableButtons();
}
}
zipファイルを作成するコード(なしbbddクエリ)thisoneです:
while($row = mysqli_fetch_row($result)){
$url = '../'.$url1.$url2.'/'.$row[0];
if ($gestor = opendir($url)){
while (false !== ($entrada = readdir($gestor))){
if (strpos($entrada,"full.png")!==false){
$files[] = $url.$entrada;
}
}
closedir($gestor);
}
}
$zip = new ZipArchive;
$fecha = date('YmdGis');
mkdir('../temp/'.$id_user.'_'.$fecha);
$zipname = '/var/www/html/temp/'.$id_user.'_'.$fecha.'/images.zip';
$zip->open($zipname,ZIPARCHIVE::CREATE);
foreach ($files as $file) {
$zip->addFile($file);
}
$zip->close();
mysqli_close($db);
$_SESSION['zipaero'.$id_windturbine]=$zipname;
それはJSファイルに見られるように、このPHPファイルは、ダウンロードファイルが開始され、その後、終了します。
include('sesion.php');
$aero=$_GET['az'];
$zipname = $_SESSION['zipaero'.$aero];
if(file_exists($zipname)){
stream($zipname);
unset($_SESSION['zipaero'.$aero]);
}else{
echo "El fichero $zipname no existe";
}
function stream($url){
header('Content-Description: File Transfer');
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename="images.zip"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($url));
$archivo = fopen($url,"r");
if (!($archivo===false)){
while(!feof($archivo)){
//imprimir contenido del archivo cada 1KB (kilobyte)
print(fread($archivo, 1024));
//decirle a apache que ya puede enviarlo
ob_flush();
flush();
}
}
//cerrar el puntero al archivo
fclose($archivo);
}
誰も同じ問題を抱えていましたか?それを解決する方法を知っていますか? 私はこの問題は、createzip.phpスクリプトの実行が長時間(3分)続いたためだと思いますが、どうしたら解決するのか本当に分かりません。事前
でおかげ
---新しい情報と編集---
私は二回のVivek D.によって提供されているコードを試してみました。最初のダウンロードが始まりましたが、141Mbで停止しました。
もう一つはmentionated空の応答を上昇
消去window.location.href「は./php/download.php?az='+id_windturbineありますあなたがコードで見ることができるように。 (キャプチャはプロダクションサーバーからのものです)
これが役立つかどうかわかりませんが、これはAJAX呼び出しに使用するコードです。
function ConstructorXMLHttpRequest()
{
if(window.XMLHttpRequest) /*Vemos si el objeto window posee el metodo XMLHttpRequest(Navegadores como Mozilla y Safari).*/
{
return new XMLHttpRequest(); //Si lo tiene, crearemos el objeto
}
else if(window.ActiveXObject) /*Sino tenia el metodo anterior,deberia ser el Internet Exp.*/
{
var versionesObj = new Array(
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Microsoft.XMLHTTP');
for (var i = 0; i < versionesObj.length; i++)
{
try
{
return new ActiveXObject(versionesObj[i]);
}
catch (errorControlado)
{
}
}
}
throw new Error("No se pudo crear el objeto XMLHttpRequest");
}
Mac/PCの問題ではなくブラウザの問題ではないですか? MacのユーザーはしばしばSafariを使います。あなたはMAC + FF(またはChrome)で試してみることができますか? – Xenofexs
こんにちは、お返事ありがとうございます。サファリを避けるために、ユーザーにすべてのコンピュータで常にクロムを使用するように頼んだ。また、Macコンピュータでこの機能をクロムでテストしていますが、エラーは引き続き表示されます。 – Pharaun