了解上传文件

时间:2015-09-28 03:19:07

标签: php html

我为超长的帖子道歉。我是超级菜鸟,我很乐意得到你的帮助。

我创建了一个名为Upload Pictures的文件,在这个文件中我有四个文件。首先,php.ini使用以下代码:

file_uploads = On

其次,upload.html

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

第三,upload.php

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
?>

第四,我有一个名为uploads的文件夹,该文件夹内没有任何内容。

我的主要问题来自upload.php文件。如果我的理解不正确,请纠正我。

我理解$target_dir是存储文件的目录。现在到&target_file行。我知道$_FILES["fileToUpload"]["name"]会返回我上传的文件的名称。因此,如果我的文件名为picture.jpg,则会返回picture.jpg

我的问题是,为什么我需要拨打basename()?因为我认为这个函数只返回文件的名称。所以这几乎就像使用$_FILES["fileToUpload"]["name"]basename()两次返回名称一样?

另外,根据我的经验,有一个.和一些函数调用类中的方法。这就是$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);发生的事情吗?如果是这样,我不确定实际存储在$target_file中的是什么。

此外,在这里稍微切换一下,当我从Upload Image按下html按钮时,它会转到另一页。有没有办法防止这种情况发生?

2 个答案:

答案 0 :(得分:3)

basename返回路径中的实际文件名。

在您的示例中,不需要在从$_FILES检索的名称上使用basename,因为它没有相关的路径。在上传脚本中,tmp_name上传统上可能更常使用basename来从文件名中删除任何临时文件夹。

.是你在PHP中concatenate字符串(或者在这种情况下包含字符串的变量)的方式。

在此示例中,代码将目录和文件名一起连接到一个变量中,用于使用pathinfo$imageFileType变量中获取扩展名。

表单有一个action属性。 action="upload.php"因此,在提交表单时,您将被带到“upload.php”页面。

我希望这能回答你的问题 -

答案 1 :(得分:1)

实际上basename()函数用于获取文件名,文件扩展名为

所以basename函数代表

basename(path,suffix)

解释

Parameter   |   Description
--------------------------
path        |   Required. Specifies the path to check
suffix      |   Optional. Specifies a file extension. If the filename has this file extension, the file extension will not show

实施例

<?php
    $path = "/testweb/home.php";

    //Show filename with file extension
    echo basename($path) ."<br/>";

   //Show filename without file extension
    echo basename($path,".php");
?>

输出

home.php
home

php 5 basename() function

我们在这里使用.dot)运算符$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);

所以这会绑定$target_dirbasename()。所以$target_file知道文件的确切位置。