我网站中网页的整体结构: -
<!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>
我想您可以理解代码的用途!我将尝试简要解释一下。
网址格式如下: -
/remote2.php?file=https://i.stack.imgur.com/w0jUI.jpg&name=Rose.jpg&submit=Upload
这是一个强制下载脚本!当有人点击上面给出的链接时,脚本会运行两个活动。
当用户第一次点击链接时(如第一个活动[1]所示),它会将https://i.stack.imgur.com/w0jUI.jpg
中的文件存储在uploads/
路径中! [2]它还强制文件在浏览器中下载。
当用户第二次点击时,它无法再次从https://i.stack.imgur.com/w0jUI.jpg
获取文件,它会直接强制将文件从uploads/Rose.jpg
路径下载到浏览器。
我希望我能够清楚地解释清楚。
我的问题是在此过程中,文件已损坏。文件大小没有变化,只是文件被破坏了。当我尝试打开下载的图像时,我收到一条消息“无效图像”。还试图使用其他文件格式,如mp3
,但它仍然存在同样的问题。
这段代码有什么问题?我该如何解决?
答案 0 :(得分:0)
您的文件已损坏,因为您在同一页面中输出了HTML 和文件内容。此外,使用headers already sent
时,您应该收到header('...')
的警告。
将PHP逻辑移至单独文件中的输出文件,并确保打印出仅文件内容。