在php中动态创建文件(扩展问题)

时间:2016-12-24 18:19:22

标签: php

我正在用PHP创建一个包含纯文本的文件,然后告诉浏览器使用以下代码下载它:

# Create the verification file and force-download it.
header("Content-type: text/plain");
header("Content-Disposition: attachment; filename='.ecf'"); #1
header("Pragma: no-cache");
header("Expires: 0");
echo "...";

#1 指定的行所示,我希望将要下载的文件命名为 .ecf ,但是我当前的代码,在下载时,它名为 ecf (不带扩展名)

如何告诉PHP将文件保存为 .ecf 而不是 ecf

注意:我遇到的问题在于下载的文件没有扩展名,而不是试图动态创建和下载文件,所以请不要将此问题标记为关于这一点的无数存在问题的重复。

修改:正如评论中指出的那样,我尝试转义点,但随后下载的文件名为 -.ecf

2 个答案:

答案 0 :(得分:1)

这是浏览器级别的安全限制。以. - “dotfiles”开头的文件 - 在OSX和Linux上具有特殊功能(默认情况下是隐藏的),因此允许您在用户的“下载”文件夹中删除一个文件可能会允许恶意行为。

https://www.w3.org/TR/html5/links.html#downloading-resources

  

否则,如果已知命名类型具有潜在危险(例如,它将被平台约定视为本机可执行文件,shell脚本,HTML应用程序或具有可执行宏功能的文档)然后可选择更改文件名以添加已知安全扩展名(例如“.txt”)。

答案 1 :(得分:-1)

您可以使用php创建文件。这是我用.php扩展做的尝试,它起作用了:

<?
$file = "test.php";
$content ="testing\n That is\n working";
if(!is_file($file)){
  file_put_contents($file, $content);
}
?>

!在is_file之前意味着它检查文件是否没有使用名称退出然后创建它并用$ content中的内容填充它。

也许这适合你。只需将标题指向$ file?