我为备份数据库编写代码。 当我试图以sql.gz格式下载文件时,它成功下载,但我无法提取它。它告诉我这个: -
加载档案时发生错误
每次它的大小只显示620字节但原始.sql文件大小很大(大于1 MB)
$path=$result_array['path'];
$filename = basename($path);
$full_path = base_url()."database_backup/";
$len = filesize($full_path.$path);
header("Content-Encoding: binary");
header("Content-Type: application/octet-stream");
header( "content-length: " . $len );
header( "content-disposition: attachment; filename=" . $filename );
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private");
header("Pragma: public");
ob_clean();
$fp=fopen( $full_path, "r" );
fpassthru( $fp );
exit;
所以请帮我解决这个问题。
答案 0 :(得分:0)
您的脚本中存在错误路径,请比较您问题中的这两行代码:
$len = filesize($full_path.$path);
和
$fp=fopen( $full_path, "r" );
我认为第二个应该是:
$fp=fopen( $full_path . $path, "r" );
但是,如果可以的话,用$ filename替换$ path以避免任意文件泄露($ path可能类似" ../../../../../../ etc / passwd的&#34)