0

更新

所以我想我已经追踪到文件不可用:

我已经检查了上传文件夹和 tmp(高于 doc root)的所有权。两者似乎都拥有正确的所有权,upload.php 文件也是如此

我检查了 $_FILES 并显示

        [name] => sampleImage3.jpg
        [type] => image/jpeg
        [tmp_name] => /tmp/phpypdbTb
        [error] => 0
        [size] => 19791

所以文件被加载到 tmp 文件夹中

但是,当我尝试

复制($_FILES['file']['tmp_name'],$uploadFile);

在哪里

tmp_name 是 mnt/storage/vhosts/domain.com/tmp/phpypdbTb uploadFile 是 uploads/sampleImage3.jpg

它抛出一个

警告:复制(上传/sampleImage3.jpg):无法打开流:没有这样的文件或目录

任何想法如何调试和弄清楚发生了什么?


原来的

我想通过ajax上传文件。

html是

<div class="container">
    <form method="post" action="" enctype="multipart/form-data" id="myform">
        <div class='preview'>
            <img src="" id="img" width="100" height="100">
        </div>
        <div >
            <input type="file" id="file" name="file" />
            <input type="button" class="button" value="Upload" id="but_upload">
        </div>
    </form> </div>

JavaScript 是

jQuery(document).ready(function(){

    jQuery("#but_upload").click(function(){

        var fd = new FormData();
        var files = jQuery('#file')[0].files;

        if(files.length > 0 ){
            fd.append('file',files[0]);

            jQuery.ajax({
                url: '/upload.php',
                type: 'post',
                data: fd,
                contentType: false,
                processData: false,
                success: function(response){
                    if(response != 0){
                        console.log(response);
                        //jQuery(".preview img").show(); // Display image element
                    }else{
                        alert('file not uploaded');
                    }
                },
            });
        }else{
            alert("Please select a file.");
        }
    });
});

加载upload.php

<?php

if(isset($_FILES['file']['name'])){

    /* Getting file name */
    $filename = $_FILES['file']['name'];
    $location = "/uploads";
    $imageFileType = pathinfo($location,PATHINFO_EXTENSION);
    $imageFileType = strtolower($imageFileType);

/*    echo "<pre>";
    print_r($_FILES);
    echo "</pre>";
*/

    /* Valid extensions */
    $valid_extensions = array("jpg","jpeg","png","JPG");
    move_uploaded_file($_FILES['file']['tmp_name'],'$location/$filename');


    $response = 0;
    /* Check file extension */
  //  if(in_array(strtolower($imageFileType), $valid_extensions)) {
        /* Upload file */
        if(move_uploaded_file($_FILES['file']['tmp_name'],'$location/$filename')){
            $response = $location;
        }
    //}

    echo $response;

}

echo 0;

ajax 调用没有问题,我什至可以 print_r FILES 变量

Array ([file] => Array ([name] => Organ Pipes and SGW.jpg [type] => image/jpeg [tmp_name] => /tmp/phpQxJK34 [error] => 0 [size] => 373852)

但是文件不会上传。任何想法我做错了什么?

4

1 回答 1

0

您的位置是绝对路径/uploads,我认为您可以像这样找到它

cd /uploads;
ls -la

你应该看到它
但是如果上传目录在你的项目中或者在你的 php 文件的同一个地方,你需要更改/uploads./uploads

于 2021-01-27T19:06:20.463 回答