导入文件时输入名称

时间:2015-06-28 12:46:51

标签: php import filenames

我想为要导入的文件指定一个自定义名称。所以在导入页面中我有两个文本字段<input type='text' name='f[]' value='http://'>|<input type='text' name='n[]'>。 当我只在文本区域中放置文件的URL而不添加任何名称时,文件将被上传,文件将采用URL的基本名称。但我想在上传时为文件指定一个自定义名称。因此,当我将文件的url和我自己的自定义名称放在两个文本字段中时,会出现一些不同的名称,如#34; file_0.dat&#34;。我试图使用$ _POST [n]获取名称,但它没有用。我正在共享导入操作脚本的一部分。请帮助我。

$i=0;

    if(trim($_POST['n'][$i]) == '')
        $_name = preg_match("~(.*)\.(\w)~i",basename($f)) ? basename($f) : "file_$i.dat";
    else
        $_name = preg_match("~(.*)\.(\w)~i",basename($_POST['n'][$i])) ? basename($_POST['n'][$i]) : "file_$i.dat";

1 个答案:

答案 0 :(得分:0)

如果您询问如何更改文件名,可以在上传文件后使用PHP rename功能执行此操作。

rename(basename($f), "/path_to_file/my_file.txt");

如果您问为什么您的文件名为file_0.dat,那么因为基本名称与您给出的正则表达式不匹配。

试试这个正则表达式。

$filename = 'abc.zip';
$name = preg_match('/^(.)*/i', $filename) ? $filename : "file_$i.dat";
print($name);

这匹配all个字符(不区分大小写)。它将始终匹配您提供的任何文件名和will never go to the else part

但对于文件名,你不想要这个。您不希望文件名中包含“特殊字符”。我建议的正确的正则表达式只允许:

  1. 字母和数字
  2. _,。, -
  3. 扩展名必须只是数字和字母。
  4. 扩展名的大小必须为3或4。'
  5. 这个正则表达式是我使用的:

    preg_match('/^[a-zA-Z\d]{1}[\w\-\s]+.[\w\d]{3,4}/i', $filename)
    

    这将允许第一个字符只是字母或数字。从第二个字符到句点(。),它将允许字母,数字, - 和_。然后延长可以是3或4个字符长。扩展名必须是字母或数字。