我可以上传一个文件使用PHP,如果我只有绝对路径


Can I upload a file using PHP if I ONLY have the absolute path?

如果我无法获得输入文件该怎么办:

<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
  1. 使用:

我更喜欢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"