Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax PHP文件上传程序无法工作_Javascript_Php_Ajax_Upload_Xmlhttprequest - Fatal编程技术网

Javascript Ajax PHP文件上传程序无法工作

Javascript Ajax PHP文件上传程序无法工作,javascript,php,ajax,upload,xmlhttprequest,Javascript,Php,Ajax,Upload,Xmlhttprequest,我正在使用ajax图像上传器,当有人提交图像时,它会自动工作。我的问题是,当我在代码中添加重命名以排序图像名称时,它不会像预期的那样工作 rename("user_image/".$_FILES[uploaded][name].".png","user_image/".$_SESSION["id"].".png"); 该文件不会上载并移动到指定目录,但当我删除该文件时,该文件已上载,我认为问题在于他可以编辑文件的权限。文件权限为644 这是我的php文件: <?php if($_

我正在使用ajax图像上传器,当有人提交图像时,它会自动工作。我的问题是,当我在代码中添加重命名以排序图像名称时,它不会像预期的那样工作

 rename("user_image/".$_FILES[uploaded][name].".png","user_image/".$_SESSION["id"].".png");
该文件不会上载并移动到指定目录,但当我删除该文件时,该文件已上载,我认为问题在于他可以编辑文件的权限。文件权限为644

这是我的php文件:

<?php
   if($_SERVER["REQUEST_METHOD"]=="POST"){
          $file = $_FILES["uploaded"];
          $target_dir = "user_image/";
          $target_file = $target_dir . basename($_FILES["uploaded"]["name"]);
          move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target_file);
          rename('user_image/'.$_FILE["uploaded"]["name"].".gif",'user_image/'.$_SESSION["id"].".gif");
   }
?>
这是html和ajax的其余部分:

<!DOCTYPE html>
<html>
   <head>
      <title>Register</title>
      <link href='http://fonts.googleapis.com/css?family=Arvo:400,700|Ubuntu:300,400,500,700' rel='stylesheet' type='text/css'>
    <link rel="stylesheet" type="text/css" href="/css/style.css"/>
</head>
<body>
    <div id="container">
        <div id="half1">
            <div id="upload">
               <div id="user">
                   <img src="/img/1.png" id="one" alt="User image"/>
               </div>
              <img src="/img/plus.png" alt="Upload">
              <form method="post" enctype="multipart/form-data"> <input name="uploaded" type="file" id="file_upload"/> </form>
            </div>
        </div>
        <div id="half2">
            <h1>Sign up!</h1>
            <form action="register.php" method="post" >
                <input type="text" placeholder="Age" name="age">
                <input type="text" placeholder="Favourite dish" name="dish">
            </form>
        </div>
    </div>
    <p id="user_id" style="display:none;" ><?= $_SESSION["id"]; ?></p>
    <script charset="UTF-8">
        function _(id){
            return document.getElementById(id);
        }
        _("file_upload").onchange = function() {
            var id = _("user_id").innerHTML;
            var file = _("file_upload").files[0];
            var formdata = new FormData();
            formdata.append("uploaded",file);
            var ajax = new XMLHttpRequest();
            ajax.onreadystatechange =
            function(){
                if(ajax.readyState==4 && ajax.status==200){
                   _("one").remove();
                    var img = document.createElement('img');
                    var first_path = '/user_image/';
                    var path = first_path.concat(id,'.png');
                    img.setAttribute('alt','User image');
                    img.setAttribute('id','one');                        
                    img.setAttribute('src',path);
                    _("user").appendChild(img);  
                    alert("end");
                }    
                else{
                    _("one").remove();
                    var img = document.createElement('img');
                    img.setAttribute('src','/img/loading.gif');
                    img.setAttribute('alt','User image');
                    img.setAttribute('id','one');
                    _("user").appendChild(img);                        
                }
            }              
            ajax.open("POST","upload_image.php");
            ajax.setRequestHeader("Content-type", "multipart/form-data"); 
            ajax.send(formdata);
        };
    </script>
</body>
你想重新命名一些你不能重命名的东西$_文件['Upload']['name']是客户端计算机的原始文件名。所以在你的服务器上不会有像C:\tmp\abc.png这样的文件,这意味着你不能重命名它


不管怎样,这一行的重命名有什么意义?如果要重命名,请在“移动上传的文件”功能中执行。

我认为重命名文件时不会提供图像文件的静态扩展名,并且在文件上载过程中不会更改图像的扩展名

内容类型标头需要设置为多部分/表单数据。因此,服务器知道它需要什么样的数据

这将在Internet Explorer中工作

ajax.setRequestHeader("Content-type", "multipart/form-data");
但在Firefox或Chrome中添加这一功能会导致PHP中的post数据丢失


现在服务器知道它可能需要一些复杂的表单数据,包括文件和blob。

我经常读到,由于Ajax的内容,您无法通过它传递文件。也许我错了,但当有人要求时,我读到的就是这个。上传的文件实际上是用临时文件名存储的。使用$_文件['upload']['tmp_name']可能与我一小时前回答的xhr问题重复。您需要添加特定的问题。您正在重复上载问题,并在此线程中解决移动临时文件的问题。请分别提问。检查php.ini值以获取文件上传。它应该设置为1。它可能会被禁用,这可能会阻止用户上传文件。即使我在move_uploaded_file上重命名了它,文件也不会被上传。我已经在encrypte=multipart/form dataMouser标签中指定了内容加密类型。即使我完全按照你说的做了,同样的问题仍然存在。请帮助。PHP会给我什么回报?请再次尝试var_dump。你有没有用开发工具嗅探过你的帖子?发送到服务器的是什么?我在上传的未定义索引的已发送响应中出错,但正如您在我的代码中看到的,我在输入标记中定义了name属性,我应该做什么请帮助?您是否通过开发工具浏览嗅探请求?是否由浏览器在post参数中发送上载?