我正在使用PHP从表单上传图像到服务器,并希望将图像重命名为lastname_firstname.[原始扩展名]。我目前有:
move_uploaded_file($_FILES["picture"]["tmp_name"], "peopleimages/" . "$_POST[lastname]" . '_' . "$_POST[firstname]")
当然,这会重命名没有扩展名的文件姓_名。我该怎么样才能重命名文件但保留扩展名呢?
谢谢!
我正在使用PHP从表单上传图像到服务器,并希望将图像重命名为lastname_firstname.[原始扩展名]。我目前有:
move_uploaded_file($_FILES["picture"]["tmp_name"], "peopleimages/" . "$_POST[lastname]" . '_' . "$_POST[firstname]")
当然,这会重命名没有扩展名的文件姓_名。我该怎么样才能重命名文件但保留扩展名呢?
谢谢!
pathinfo
函数可以发挥奇效 ;-)
$path_parts = pathinfo('/www/htdocs/index.html');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // since PHP 5.2.0
/www/htdocs
index.html
html
index
$_POST[lastname]
,以确保它只包含有效的字符
$_POST['lastname']
-- 参见为什么$foo[bar]
是错误的?您可以尝试以下方法:
move_uploaded_file($_FILES["picture"]["tmp_name"], "peopleimages/" . "$_POST[lastname]" . '_' . "$_POST[firstname]".".".end(explode(".", $_FILES["picture"]["tmp_name"])))
或者像Niels Bom建议的那样
$filename=$_FILES["picture"]["tmp_name"];
$extension=end(explode(".", $filename));
$newfilename="$_POST[lastname]" . '_' . "$_POST[firstname]".".".$extension;
move_uploaded_file($filename, "peopleimages/" .$newfilename);
如果您允许用户上传任意文件而未检查其扩展名,则他们可以完全上传.php文件并在您的服务器上执行代码 ;)
防止在某个文件夹内执行php的.htaccess规则如下(根据您的设置进行调整)。
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI
这段代码存在安全隐患。
move_uploaded_file($_FILES["picture"]["tmp_name"], "peopleimages/" . "$_POST[lastname]" . '_' . "$_POST[firstname]". $extension);
如果
$_POST[firstname] =mypicture.php%00
并且
$extension=.jpg;
这段代码存在安全漏洞,其结果为
test.php%00.jpg //test.php uploaded on server.
欲了解更多信息,请查看此链接:
这个链接介绍了有关不受限制的文件上传的信息。$pos = strrpos($filename, '.');
if ($pos === false)
{
// file has no extension; do something special?
$ext = "";
}
else
{
// includes the period in the extension; do $pos + 1 if you don't want it
$ext = substr($filename, $pos);
}
$newFilename = "foobar" . $ext;
move_uploaded_file($_FILES['picture']['tmp_name'], 'peopleimages/' . $newFilename);
$imagetypes = array(
'image/png' => '.png',
'image/gif' => '.gif',
'image/jpeg' => '.jpg',
'image/bmp' => '.bmp');
$ext = $imagetypes[$_FILES['myfile']['type']];
move_uploaded_file($_FILES["picture"]["tmp_name"], "peopleimages/" . "$_POST[lastname]" . '_' . "$_POST[firstname]." . pathinfo($_FILES["picture"]["tmp_name"], PATHINFO_EXTENSION));
你可以随时:
$original = explode('.', $_FILES["picture"]["tmp_name"]);
$extension = array_pop($original);
move_uploaded_file($_FILES["picture"]["tmp_name"], "peopleimages/" . "$_POST[lastname]" . '_' . "$_POST[firstname]". $extension);
move_uploaded_file
会自动为您完成。 - zneak