无法复制上传的文件(php)

时间:2017-04-24 17:00:05

标签: php file web file-upload upload

我正在创建一个显示在其上传的新闻管理面板的网站 每个帖子都有一个图像和一个标题(和描述,但我还没有实现它) 我的问题是,当我尝试发布(并使用它上传图像)时,会创建帖子,但图像不存在。

uploader(php):

if (isset($_FILES['image'])) {

//this script
//connects to mysql database
//declares an array that contains table names (array name is db)
require_once("db.php");

//move file to the img folder
move_uploaded_file($_FILES['image']['tmp_name'], "img/" . $_FILES['image']['tmp_name']);

//upload the post to the database
$sql = "INSERT INTO `{$db["posts"]}` (`img`, `text`) VALUES ('img/{$_FILES['image']['tmp_name']}', '{$_POST["text"]}')";
if (!mysql_query($sql)) {
    //display error message
}

}

form(html):

<form action="post.php" method="POST" enctype="multipart/form-data">
    <label>Image: </label><input type="file" name="image" />
    <br />
    <label>Text: </label><input type="text" name="text" />
    <input type="submit" />
</form>

我在发布后通过ftp检查文件,图像不存在。

1 个答案:

答案 0 :(得分:0)

$ echo baz >> /tmp/foo.bar 是一个绝对路径名,如$_FILES['image']['tmp_name']。将它连接到/var/tmp/something时,会得到一个指向子目录img/的路径名。由于子目录不存在,img//var/tmp/something失败。

您应该使用move_uploaded_file()来获取文件名部分。

basename()
但是,我并不确定使用临时文件名这样安全的方式是多么安全。我不认为可以保证不会为不同的上传重复相同的名称。