我网站中页面的总体结构: -
<!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逻辑移至单独的文件中输出文件,并确保其打印出仅文件内容。