为了在PHP中保存文档/图像,我使用move_uploaded_file($tmp, "location")
。
当文件改变时,我得到了文档/图像的值,所以我得到了文件名,但我不能创建tmp_name
,因为我以以下方式得到了name
:
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="upload" onChange="change(this.value)" />
<input type="submit" name="chk" value="Submit" />
<div id="div"></div>
</form>
JavaScript: <script src="js/jquery1.js"></script>
<script>
function change(val){
$.ajax({
url:"filecheck.php?id=" + val,
success:function(res){
alert(res);
}
});
}
PHP: filecheck.php
mysql_connect("localhost","root","");
mysql_select_db("newdatabase");
if(isset($_GET['id']))
{
$name=$_GET['id'];
$tmp=$_GET['id']['tmp_name']; //here i need temp file name
move_uploaded_file($tmp, "C:/xampp/htdocs/jerome/project/newimage/".$name);
echo $name;
}
如果我通过$_FILES['file']['name']
获得文件名,这意味着我可以获得$_FILES['file']['tmp_name']
,但我不能通过这种方式获得。你能给我一个关于如何获得$_FILES['file']['tmp_name']
的建议吗
您的问题是您试图从$_GET
超全局变量而不是$_FILES
超全局变量访问文件,
使用下面的代码进行简单的检查将显示文件数据:
print_r($_FILES);
你的ajax也有一个问题。
function change(val){
$.ajax({
url:"filecheck.php?id=" + val,
type: "post",
data: $('#yourformid').serialize()
success:function(res){
alert(res);
}
});
}
我可以看到你试图做一个即时上传通过ajax。你现在做这件事的方式是不好的。
你应该看看下面的教程,以掌握应该如何做的理解:
- 通过php/ajax上传
- 通过ajax在PHP中上传文件
- Google搜索"php/ajax文件上传"
否则你就像这样检查:
if(!empty($_FILES)) {
$name = $_FILES['file']['name'];
$tmp = $_FILES['file']['tmp_name'];
}
注意
查看 code-jaffs comment
,它验证了我上面的观点,即您的文件不会以当前的方式上传。
问题是$tmp=$_GET['id']['tmp_name'];
..这应该更改为$tmp=$_FILES['file']['tmp_name'];
,如code-jaff所说…
get的用法可以在这里找到http://php.net/manual/en/reserved.variables.get.php