为什么在PHP力量下载脚本过程中损坏文件



我网站中页面的总体结构: -

<!DOCTYPE html>
<html>
<head>
<title>Home</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
</head>
<body>
<form method="get" action="remote2.php">
<input type="text" name="url" placeholder="Enter URL with http://" />
<input type="text" name="name" placeholder="File Name.jpg" />
<input type="text" name="path" placeholder="File Path" />
<input name="submit" type="submit" value="Upload" />
</form>
<?php
set_time_limit (24 * 60 * 60);
if (!isset($_GET['submit'])) die();
$destination_folder = 'uploads/';
$url = $_GET['file'];
$name = $_GET['name'];
$newfname = $destination_folder . basename($name);
$file = fopen ($url, "rb");
if ($file) {
$newf = fopen ($newfname, "wb");
if ($newf)
while(!feof($file)) {
fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
  }
  }
if ($file) {
fclose($file);
}
if ($newf) {
fclose($newf);
}
header('Pragma: public'); 
header('Content-Disposition: attachment; filename="'.basename($name).'"');
header('Content-Transfer-Encoding: binary');
echo readfile(str_replace(" ","%20",$newfname)); 
exit;
?>
</body>
</html>

我想您可以理解代码的目的!我将尝试简要解释。

URL格式就像: -

/remote2.php?file=https://i.stack.imgur.com/w0jUI.jpg&name=Rose.jpg&submit=Upload

这是一个力量下载脚本!当有人单击上面给出的链接时,脚本会运行两个活动。

用户单击链接第一次(如下第一个活动[1])时,它将在uploads/ PATH中存储https://i.stack.imgur.com/w0jUI.jpg的文件![2]它也强迫文件在浏览器中下载。

当用户单击第二次时,它不会再次从https://i.stack.imgur.com/w0jUI.jpg获取文件,它直接迫使要从uploads/Rose.jpg路径下载到浏览器的文件。

我希望我能够清楚地解释它。

我的问题是在此过程中,文件正在损坏。文件的大小没有变化,只是文件正在损坏。当我尝试打开下载的图像时,我刚刚收到了一条消息"无效的图像"。还尝试使用其他文件格式(例如mp3),但仍然存在于同一问题上。

此代码有什么问题?我该如何解决?

您的文件已损坏,因为您在同一页面中输出HTML 文件内容。另外,您应该在使用header('...')时警告headers already sent

将您的PHP逻辑移至单独的文件中输出文件,并确保其打印出文件内容。

最新更新