Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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中与其他表单一起显示文件本身_Php - Fatal编程技术网

如何显示下载链接,而不是在php中与其他表单一起显示文件本身

如何显示下载链接,而不是在php中与其他表单一起显示文件本身,php,Php,我有一个表格要显示,在填写表格时有文件附件,我成功地附加了文件,但在显示表格时,它也以某种二进制/etc格式显示了附加的文件,相反,我希望它只显示一个文件名,每当我们点击文件名时,它都必须下载文件。。。请帮帮忙 我的代码是: <?php ... $id = htmlentities($_GET['id'], ENT_QUOTES); // Get the details of the risk $risk = get_risk_by_id($id); $status = htmlenti

我有一个表格要显示,在填写表格时有文件附件,我成功地附加了文件,但在显示表格时,它也以某种二进制/etc格式显示了附加的文件,相反,我希望它只显示一个文件名,每当我们点击文件名时,它都必须下载文件。。。请帮帮忙

我的代码是:

<?php 
...
$id = htmlentities($_GET['id'], ENT_QUOTES);
// Get the details of the risk
$risk = get_risk_by_id($id);
$status = htmlentities($risk[0]['status'], ENT_QUOTES);
$subject = $risk[0]['subject'];
//file retrival fields
$filename = $risk[0]['name'];
$mimetype = $risk[0]['type'];
$filedata = $risk[0]['content'];
...
?>
<html>
...
<?php
...
echo "<label>Risk Assessment</label>\n";
echo "<textarea name=\"assessment\" cols=\"50\" rows=\"3\" id=\"assessment\" disabled=\"disabled\">" . htmlentities(stripslashes($assessment), ENT_QUOTES). </textarea>\n";
echo "<label>Additional Notes</label>\n";
echo "<textarea name=\"notes\" cols=\"50\" rows=\"3\" id=\"notes\" disabled=\"disabled\">" . htmlentities(stripslashes($notes), ENT_QUOTES) . "</textarea>\n";
echo "<label>Files attached:\n</label>";
echo $filedata;
...
?>
...
</html>

...

您正在回显$filedata内容。您应该回显$filedata位置,而不是其内容。

以下是如何下载pdf文件而不是显示它的示例:

您的页面:

<a href="dl.php?filnam=xyz.pdf>Download the file</a>

dl.php

<?php
$filnam = str_replace(" ", "%20", basename($_GET['filnam'])); 
header ("content-type: application/pdf");
header ("Content-Disposition: attachment; filename*=UTF-8'en'$filnam");
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($_GET['filnam']));
readfile($_GET['filnam']);
?>

所以有几个步骤

  • 获取文件名
  • 获取文件的本地路径
  • 用链接回应
  • 我已经有一段时间没有使用PHP了,但我相信您可以使用

    //basename takes /a/b/c/d.jpg and returns d.jpg
    
    $filename = basename($risk[0]['name']); 
    $localpath = $risk[0]['tmp_name'];
    
    fclose($handle);
    
    然后为你的输出做些什么

    echo "<a href=\"" . $localpath . "\"> . $filename . "</a>" . PHP_EOL
    
    你可以使用任何你想要的文件名。您应该添加时间戳或用户ID之类的内容,使文件具有唯一性,这样它就不会被多个请求覆盖。这将创建文件。然后,您可以通过执行以下操作来填写该文件

    fwrite($handle, $risk[0]['content']);
    
    最后使用关闭文件

    //basename takes /a/b/c/d.jpg and returns d.jpg
    
    $filename = basename($risk[0]['name']); 
    $localpath = $risk[0]['tmp_name'];
    
    fclose($handle);
    
    要输出此新链接,如果愿意,可以使用相同的文件名

    echo "<a href=\"" . $filename . "\"> . $filename . "</a>" . PHP_EOL
    
    echo”“。PHP_EOL
    
    如果通过包含一些唯一值来指定文件名,则可以使用

    echo "<a href=\"" . $filename . "\"> . $risk[0]['name'] . "</a>" . PHP_EOL
    
    echo”“。PHP_EOL
    

    希望有帮助

    您共享的部分代码不足以清楚地理解问题。请添加更多代码..这是一个非常大的文件,这就是为什么我附加了一个小代码如何给出$filedata位置,我不知道文件位置我正在将我的文件保存在一个表中,以及一些其他填写表单的详细信息,如风险、注释和许多其他字段,那么我的文件将如何与所有这些文件分离@zimorokmy db没有一个名为tmp_name的变量。。。我的dbmy数据库中有名称、大小、类型和内容,但没有名为tmp_name的变量。。。我的数据库中有名称、大小、类型和内容@Paarth@santu47更新了我的帖子谢谢你的帮助,因为我不擅长编码,我仍然无法完成。。。我已经做了更改,在执行时显示了指向文件的链接,当我单击该链接时,会出现错误,因为“在该服务器上找不到”。@santu47,因此服务器只能为存在的文件提供服务。当你有东西时,文件存储在数据库中,所以目前没有物理文件。我在文章的更新部分所做的是创建这样一个文件,其中包含来自数据库的条目名称和来自数据库的内容内容。首先,我创建一个具有该名称的文件,然后使用fwrite将数据库的内容填充到该文件中。关闭文件是一种形式。既然这个文件已经存在,我就可以把它提供给大家了。在一个简单的情况下,您可以忽略我关于添加独特内容的消息。它可以工作,但没有文件下载,只是在没有下载处理后请求下载…:(我无法下载文件,它要求保存文件,但选择Save后没有发生任何事情,这意味着它找不到该文件。您能否确认该文件位于href=“dl.php?filnam=[file path/name]”指向的目录中?