我想为要导入的文件指定一个自定义名称。所以在导入页面中我有两个文本字段<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";
答案 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
。
但对于文件名,你不想要这个。您不希望文件名中包含“特殊字符”。我建议的正确的正则表达式只允许:
这个正则表达式是我使用的:
preg_match('/^[a-zA-Z\d]{1}[\w\-\s]+.[\w\d]{3,4}/i', $filename)
这将允许第一个字符只是字母或数字。从第二个字符到句点(。),它将允许字母,数字, - 和_。然后延长可以是3或4个字符长。扩展名必须是字母或数字。