Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用AJAX调用下载文件_Php_Javascript_Ajax_Download - Fatal编程技术网

Php 使用AJAX调用下载文件

Php 使用AJAX调用下载文件,php,javascript,ajax,download,Php,Javascript,Ajax,Download,我正在尝试将一些详细信息附加到一个文件中,并添加该文件以供下载 为此,我正在使用JavaScript和PHP。。单击下载按钮,它将触发一个AJAX请求 $.ajax({ url:"php/test.php", type: 'POST', data: { totalQuery : test1, }, success: function(finalEntityList){ }, }); 让我们假设test.php有一行代码 $html="Test"; 现在,我想将其添加到一

我正在尝试将一些详细信息附加到一个文件中,并添加该文件以供下载

为此,我正在使用JavaScript和PHP。。单击下载按钮,它将触发一个AJAX请求

$.ajax({
  url:"php/test.php",
  type: 'POST',
  data: { totalQuery : test1, },

  success: function(finalEntityList){
  },
});
让我们假设
test.php
有一行代码

$html="Test";
现在,我想将其添加到一个文件中,并使其可供下载。我用过密码

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
$output = fopen('php://output', 'w');
fwrite($output, $html);
fclose($output);

但下载不会自动启动。。。我必须使用firebug打开POST请求链接,以便启动下载。。可能有什么问题???

也许您需要做的只是使用AJAX调用返回文件的路径,然后使用JavaScript通过以下方法之一“启动”下载-

  • 窗口。打开
  • window.location.href
现在,您的
test.php
文件只需以JSON格式返回下载文件的URL路径-

$filename = 'data.csv';
$path = $_SERVER['DOCUMENT_ROOT'].'/downloads/';
echo json_encode(array('URL'=>$path.$filename));

您可以考虑将URL作为原始字符串返回,但我觉得使用JSON可能会更好,因为您可以轻松地在响应中添加附加信息,而不需要额外的解析功能。所有这些都使它成为一个更加健壮的选择。

也许您需要做的只是使用AJAX调用返回文件的路径,然后使用JavaScript通过以下方法之一“启动”下载-

  • 窗口。打开
  • window.location.href
现在,您的
test.php
文件只需以JSON格式返回下载文件的URL路径-

$filename = 'data.csv';
$path = $_SERVER['DOCUMENT_ROOT'].'/downloads/';
echo json_encode(array('URL'=>$path.$filename));

您可以考虑将URL作为原始字符串返回,但我觉得使用JSON可能会更好,因为您可以轻松地在响应中添加附加信息,而不需要额外的解析功能。所有这些都使它成为一个更可靠的选择。

它需要更多的参数和标题信息:

$file = "data.csv";
$mime_type = "text/csv";
$size = filesize($file);
$name = rawurldecode($name);

@ob_end_clean(); //turn off output buffering to decrease cpu usage

// required for IE, otherwise Content-Disposition may be ignored
if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');

header('Content-Type: ' . $mime_type);
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Content-Transfer-Encoding: binary");
header('Accept-Ranges: bytes');

/* The three lines below basically make the
download non-cacheable */
header("Cache-control: private");
header('Pragma: private');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// multipart-download and download resuming support
if(isset($_SERVER['HTTP_RANGE']))
{
    list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
    list($range) = explode(",",$range,2);
    list($range, $range_end) = explode("-", $range);
    $range=intval($range);
    if(!$range_end)
    {
        $range_end=$size-1;
    } 
    else
    {
        $range_end=intval($range_end);
    }

    $new_length = $range_end-$range+1;
    header("HTTP/1.1 206 Partial Content");
    header("Content-Length: $new_length");
    header("Content-Range: bytes $range-$range_end/$size");
} 
else
{
    $new_length=$size;
    header("Content-Length: ".$size);
}

/* output the file itself */
$chunksize = 1*(1024*1024); //you may want to change this
$bytes_send = 0;
if ($file = fopen($file, 'r'))
{
    if(isset($_SERVER['HTTP_RANGE']))
        fseek($file, $range);

    while(!feof($file) && (!connection_aborted()) && ($bytes_send<$new_length))
    {
        $buffer = fread($file, $chunksize);
        print($buffer); //echo($buffer); // is also possible
        flush();
        $bytes_send += strlen($buffer);
    }
    fclose($file);
} 
else 
    die('Error - can not open file.');
$file=“data.csv”;
$mime_type=“text/csv”;
$size=filesize($file);
$name=rawurldecode($name);
@ob_end_clean()//关闭输出缓冲以减少cpu使用
//IE需要,否则可能忽略内容处理
if(ini_get('zlib.output_compression'))
ini_集('zlib.output_compression','Off');
标题(“内容类型:”.$mime\U类型);
标题('Content-Disposition:attachment;filename=“.”.$name.'”);
标题(“内容传输编码:二进制”);
标题('Accept-Ranges:bytes');
/*下面的三行基本上构成了
下载不可缓存*/
标头(“缓存控制:专用”);
标题('Pragma:private');
标题(“到期日期:1997年7月26日星期一05:00:00 GMT”);
//多部分下载和下载恢复支持
如果(isset($\u服务器['HTTP\u范围]]))
{
列表($a,$range)=分解(“=”,$\u服务器['HTTP\u range',2);
列表($range)=分解(“,”,$range,2);
列表($range,$range_end)=分解(“-”,$range);
$range=intval($range);
如果(!$range\u end)
{
$range_end=$size-1;
} 
其他的
{
$range\u end=intval($range\u end);
}
$new\u length=$range\u end-$range+1;
标题(“HTTP/1.1 206部分内容”);
标题(“内容长度:$new_长度”);
标题(“内容范围:字节$Range-$Range_end/$size”);
} 
其他的
{
$new_length=$size;
标题(“内容长度:.$size”);
}
/*输出文件本身*/
$chunksize=1*(1024*1024)//你可能想改变这个
$bytes\u send=0;
如果($file=fopen($file,'r'))
{
如果(isset($\u服务器['HTTP\u范围]]))
fseek($file,$range);

当(!feof($file)&&(!connection_aborted())&&($bytes_send时,它需要更多的参数和headerinfo:

$file = "data.csv";
$mime_type = "text/csv";
$size = filesize($file);
$name = rawurldecode($name);

@ob_end_clean(); //turn off output buffering to decrease cpu usage

// required for IE, otherwise Content-Disposition may be ignored
if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');

header('Content-Type: ' . $mime_type);
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Content-Transfer-Encoding: binary");
header('Accept-Ranges: bytes');

/* The three lines below basically make the
download non-cacheable */
header("Cache-control: private");
header('Pragma: private');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// multipart-download and download resuming support
if(isset($_SERVER['HTTP_RANGE']))
{
    list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
    list($range) = explode(",",$range,2);
    list($range, $range_end) = explode("-", $range);
    $range=intval($range);
    if(!$range_end)
    {
        $range_end=$size-1;
    } 
    else
    {
        $range_end=intval($range_end);
    }

    $new_length = $range_end-$range+1;
    header("HTTP/1.1 206 Partial Content");
    header("Content-Length: $new_length");
    header("Content-Range: bytes $range-$range_end/$size");
} 
else
{
    $new_length=$size;
    header("Content-Length: ".$size);
}

/* output the file itself */
$chunksize = 1*(1024*1024); //you may want to change this
$bytes_send = 0;
if ($file = fopen($file, 'r'))
{
    if(isset($_SERVER['HTTP_RANGE']))
        fseek($file, $range);

    while(!feof($file) && (!connection_aborted()) && ($bytes_send<$new_length))
    {
        $buffer = fread($file, $chunksize);
        print($buffer); //echo($buffer); // is also possible
        flush();
        $bytes_send += strlen($buffer);
    }
    fclose($file);
} 
else 
    die('Error - can not open file.');
$file=“data.csv”;
$mime_type=“text/csv”;
$size=filesize($file);
$name=rawurldecode($name);
@ob_end_clean();//关闭输出缓冲以减少cpu使用
//IE需要,否则可能忽略内容处理
if(ini_get('zlib.output_compression'))
ini_集('zlib.output_compression','Off');
标题(“内容类型:”.$mime\U类型);
标题('Content-Disposition:attachment;filename=“.”.$name.'”);
标题(“内容传输编码:二进制”);
标题('Accept-Ranges:bytes');
/*下面的三行基本上构成了
下载不可缓存*/
标头(“缓存控制:专用”);
标题('Pragma:private');
标题(“到期日期:1997年7月26日星期一05:00:00 GMT”);
//多部分下载和下载恢复支持
如果(isset($\u服务器['HTTP\u范围]]))
{
列表($a,$range)=分解(“=”,$\u服务器['HTTP\u range',2);
列表($range)=分解(“,”,$range,2);
列表($range,$range_end)=分解(“-”,$range);
$range=intval($range);
如果(!$range\u end)
{
$range_end=$size-1;
} 
其他的
{
$range\u end=intval($range\u end);
}
$new\u length=$range\u end-$range+1;
标题(“HTTP/1.1 206部分内容”);
标题(“内容长度:$new_长度”);
标题(“内容范围:字节$Range-$Range_end/$size”);
} 
其他的
{
$new_length=$size;
标题(“内容长度:.$size”);
}
/*输出文件本身*/
$chunksize=1*(1024*1024);//您可能需要更改此值
$bytes\u send=0;
如果($file=fopen($file,'r'))
{
如果(isset($\u服务器['HTTP\u范围]]))
fseek($file,$range);

虽然(!feof($file)&(!connection_aborted())&($bytes_send)将您的文件名放在引号
标题('Content-Disposition:attachment;filename=“data.csv“);
@jav-如果您要编辑帖子-请尝试解决所有问题-。将您的文件名放在引号
标题('Content-Disposition:attachment;filename=“data.csv“)
@jav-如果你要编辑一篇文章-尝试解决所有问题-。我不确定,在使用php下载文件时,默认路径是什么。路径只是表示文件的URL。如果文件位于你的web根文件夹中,那么很简单,就是你的网站名和文件名-
http://yourdomain.com/data.csv路径是脚本所在的位置,因此如果脚本位于
http://yourdomain.com/script/download.php
那么该脚本的fileroot是
http://y