我正在创建一个显示在其上传的新闻管理面板的网站 每个帖子都有一个图像和一个标题(和描述,但我还没有实现它) 我的问题是,当我尝试发布(并使用它上传图像)时,会创建帖子,但图像不存在。
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检查文件,图像不存在。
答案 0 :(得分:0)
$ echo baz >> /tmp/foo.bar
是一个绝对路径名,如$_FILES['image']['tmp_name']
。将它连接到/var/tmp/something
时,会得到一个指向子目录img/
的路径名。由于子目录不存在,img//var/tmp/something
失败。
您应该使用move_uploaded_file()
来获取文件名部分。
basename()
但是,我并不确定使用临时文件名这样安全的方式是多么安全。我不认为可以保证不会为不同的上传重复相同的名称。