如果我无法获得输入文件该怎么办:
<input type="file" name="upload" id="upload">
选择要上传的文件后,输入字段会消失。它将显示绝对路径:
C:'users'foo'Desktop'file.zip
C:'fakepath'file.zip
下面是我用来获取绝对路径的代码:
<script>
$('#upload').on('change',function(){
var filename = document.getElementById("filename").innerHTML;
$.ajax({
type: "POST",
url: "execs/upload.php",
data: { filename: filename},
dataType: "json",
success: function (data) {
alert ("Success")
},
error: function () {
alert ("Failed")
}
});
})
</script>
我还能在PHP中上传它吗?我在网上得到的大部分内容是我需要$_FILES['filename']['tmp_name']。如果我只有绝对路径,我不知道怎么得到它。
这是upload.php文件:
<?php
$filename = $_POST["filename"]; //C:'users'foo'Desktop'file.zip
$target_dir = "uploads/";
$target_file = $target_dir . $filename;
if(move_uploaded_file($filename, $target_file)){ // $target_file = uploads/file.zip
echo "yes";
}
else echo "no";
?>
当我也检查文件是否存在时($filename),它说它不存在。
任何帮助将非常感激!非常感谢!
您不应该使用$_POST[]
作为文件输入,而应该使用$_FILES[]
。
请参考这篇文章:如何获得文件名从完整的路径与PHP?
有两个方法:
- 使用pathinfo
- 。 使用:
- 。
我更喜欢pathinfo
<?php
$xmlFile = pathinfo('/usr/admin/config/test.xml');
function filePathParts($arg1) {
echo $arg1['dirname'], "'n";
echo $arg1['basename'], "'n";
echo $arg1['extension'], "'n";
echo $arg1['filename'], "'n";
}
filePathParts($xmlFile);
?>
这将返回:
/usr/管理/配置
test.xml
xml 测试<?php
$path = "/home/httpd/html/index.php";
$file = basename($path); // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"
?>
用$_FILES
代替$_POST
$filename = $_FILES["upload"];
print_r($filename);
<?php
$uploaddir = "/www/uploads/";
$uploadfile = $uploaddir . basename($_FILES['upload']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['upload']['tmp_name'], $uploadfile)) {
echo "Success.'n";
} else {
echo "Failure.'n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
您有$filename = $_POST["filename"];
,但将其更改为:
$filename = $_POST["upload"];
既然你有:
<input type="file" name="upload" id="upload">
So: name="upload"