用户可以使用
上传文件<form enctype="multipart/form-data" method="post" ...
<input type="file" name="file_post" ...
文件已在服务器端加载
$_FILES[file_post][tmp_name] = /tmp/phpRGYt66
$_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>
此下载不起作用
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
mywebsite.fr/tmp/phpRGYt66.csv
”上时,我得到了Not Found
The requested URL was not found on this server.
使用 FileZilla,我看不到任何 /tmp/ 文件夹,并且无法找到创建的 .csv 文件。
如何解决这个问题?
谢谢
我尝试下载一个由 php 管理的带有 html 的临时文件“
这会将文件存储在相对于服务器文件系统根目录的路径中:
/opt/lampp/temp/phpRGYt66
因此服务器上运行的应用程序可以读取服务器的文件系统并读取文件。但网络服务器看不到该文件。
想象一下,如果互联网上任何位置的任何用户都可以读取服务器上任何位置的任何文件,将会发生什么。
您基本上有两个选择:
如果您选择第二种方法,请务必小心。允许用户向您发送文件的路径,然后您向他们发送他们请求的任何文件可能很诱人。但请记住...
想象一下,如果互联网上任何位置的任何用户都可以读取服务器上任何位置的任何文件,将会发生什么。
确保您不会让用户从您的文件系统下载他们想要的任何文件。将文件保存在只有服务器端代码知道的文件夹中,并且只为该文件夹中的用户文件提供服务。 (从安全角度来看,所问问题的本质强烈表明您应该选择上面的第一个选项。)