在客户端下载由服务器端 php 创建的文件的 html 代码

问题描述 投票:0回答:1

用户可以使用

上传文件
<form enctype="multipart/form-data" method="post" ...
<input type="file"   name="file_post" ...

文件已在服务器端加载

  1. 生产:
    $_FILES[file_post][tmp_name] = /tmp/phpRGYt66
  2. 本地主机:
    $_FILES[file_post][tmp_name] = /opt/lampp/temp/phpRGYt66

并由php处理。我使用 fopen 创建一个新文件,将“.csv”附加到输入文件的名称中,并使用 fwrite 放置内容

在本地主机中,我能够检索文件

/opt/lampp/temp/phpRGYt66.csv
并确保它是我所期望的。

然后用户可以使用

下载输出文件

<a href="<?php echo $csv_file_name; ?>">Download csv file</a>

此下载不起作用

  1. 在本地主机中:当鼠标悬停在“localhost/opt/lampp/temp/phpRGYt66.csv”上时,我得到
Error 404
localhost
Apache/2.4.54 (Unix) OpenSSL/1.1.1s PHP/8.2.0 mod_perl/2.0.12 Perl/v5.34.1
  1. 生产中: 当鼠标悬停在“mywebsite.fr/tmp/phpRGYt66.csv”上时,我得到了
Not Found

The requested URL was not found on this server.

使用 FileZilla,我看不到任何 /tmp/ 文件夹,并且无法找到创建的 .csv 文件。

如何解决这个问题?

谢谢

我尝试下载一个由 php 管理的带有 html 的临时文件“

服务器的文件系统和Web服务器的公共目录是两个不同的东西。

这会将文件存储在相对于服务器文件系统根目录的路径中:

/opt/lampp/temp/phpRGYt66

因此服务器上运行的应用程序可以读取服务器的文件系统并读取文件。但网络服务器看不到该文件。

想象一下,如果互联网上任何位置的任何用户都可以读取服务器上任何位置的任何文件,将会发生什么。

您基本上有两个选择:

  1. 将文件存储在 Web 服务器的公用文件夹结构中并向用户提供该 URL。
  2. 将文件存储在 Web 服务器的公共文件夹结构之外,并编写一个 PHP 脚本,该脚本接受文件的名称(或其他一些标识符),并在该名称前面加上文件的已知位置,并将该文件流式传输给用户。

如果您选择第二种方法,请务必小心。允许用户向您发送文件的路径,然后您向他们发送他们请求的任何文件可能很诱人。但请记住...

想象一下,如果互联网上任何位置的任何用户都可以读取服务器上任何位置的任何文件,将会发生什么。

确保您不会让用户从您的文件系统下载他们想要的任何文件。将文件保存在只有服务器端代码知道的文件夹中,并且只为该文件夹中的用户文件提供服务。 (从安全角度来看,所问问题的本质强烈表明您应该选择上面的第一个选项。)

php html post download
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.