使用php移动上传的文件

时间:2014-01-27 18:10:29

标签: php image wordpress forms

我在上传文件时遇到问题。上传似乎没有报告错误。我上传的文件夹上有777。该系统是wordpress,我不知道我做错了什么。

应该注意的是,表格是另一种形式。最终的结果是上传图像(这个形式,在较大的内部),允许用户在提交第二个表单之前裁剪图像并添加标签,标题描述等。第二个表单的最终提交将发布到自定义帖子类型,并且工作正常。只是我关注的移动文件和jcrop。

有人可以在那里看到拼写错误吗?

我做不到。

<form method="POST" action="" enctype="multipart/form-data">
                <label for="image_upload">Image Upload</label>
                <input id="image_upload" type="file" class="text_input" value="" name="file">
                <input id="image-upload" type="submit" class="button" value="Upload" name="upload">

                <!-- <img id="image-upload" src="<?php echo get_template_directory_uri(); ?>/images/sago.jpg" alt=""> -->

                    <?php 
                    // Process the upload 
                        if (!empty ($_POST['upload'])) {

                            $allowedExts = array("gif", "jpeg", "jpg", "png");
                            $temp = explode(".", $_FILES["file"]["name"]);
                            $extension = end($temp);
                            if ((($_FILES["file"]["type"] == "image/gif")
                            || ($_FILES["file"]["type"] == "image/jpeg")
                            || ($_FILES["file"]["type"] == "image/jpg")
                            || ($_FILES["file"]["type"] == "image/pjpeg")
                            || ($_FILES["file"]["type"] == "image/x-png")
                            || ($_FILES["file"]["type"] == "image/png"))
                            && ($_FILES["file"]["size"] < 100000)
                            && in_array($extension, $allowedExts))
                              {
                              if ($_FILES["file"]["error"] > 0)
                                {
                                echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
                                }
                              else
                                {
                                echo "<div> Upload: " . $_FILES["file"]["name"] . "<br>";
                                echo "Type: " . $_FILES["file"]["type"] . "<br>";
                                echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
                                echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br> </div>";

                                //set temp dir path
                                $path = $_SERVER['DOCUMENT_ROOT'];
                                $upload_dir = $path . '/wp-content/uploads/jcrop_temp/';    

                                if (file_exists($path . '/wp-content/uploads/jcrop_temp/' . $_FILES["file"]["name"]))
                                  {
                                  echo "<div style='border: solid 1px #BF5738; color: #BF5738; padding: 1em;'> The File: <span style='color: black;'>" . $_FILES["file"]["name"] . "</span> already exists. Please rename the file before trying again. </div>";
                                  }
                                else
                                  {
                                  move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
                                  echo "Stored in: " . $upload_dir . $_FILES["file"]["name"];
                                  echo "<div style='border:solid 1px #E1E1E1; max-width: 710px; text-align: center;'>
                                            <img id='image-upload' src='" . "/wp-content/uploads/jcrop_temp/" . $_FILES["file"]["name"] . "'>
                                        </div>
                                        ";
                                  }
                                }
                              }
                            else
                              {
                              echo "Invalid file";
                              }

                            //end upolad if  
                            }

                    ?>
            </form>

2 个答案:

答案 0 :(得分:1)

问题在于这一行:

move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);

您需要在第二个参数中指定上传的目录,如下所示:

move_uploaded_file($_FILES["file"]["tmp_name"], $upload_dir.$_FILES["file"]["name"]);

答案 1 :(得分:1)

好的,所以这是一个复杂的过程。在Wordpress之外就足够简单,但内心......这很痛苦。

我需要更改一些东西,首先文件大小以字节为单位而不是kb!白痴!...(感谢巴拿马杰克让我再次看到它并提醒我不要假设。)

其次,move_uploaded_file()函数在wordpress中不起作用。相反,我拼凑了一些有用的帖子:http://wordpress.org/support/topic/using-move_uploaded_file-in-a-plugin

$path_array  = wp_upload_dir();
        $path = str_replace('\\', '/', $path_array['path']);
        $old_name = $_FILES["image_upload_path"]["name"];
        $split_name = explode('.',$old_name);
        $time = time();
        $file_name = $time.".".$split_name[1];
        move_uploaded_file($_FILES["image_upload_path"]["tmp_name"],$path. "/" . $file_name);

(请注意,如果您使用此代码,您将需要知道您正在做什么,因为问题和答案中的引用不相关。)

通过这个我能够将上传的文件发送到uploads目录并生成wordpress喜欢的各种图像大小(80x80拇指,中等,大等)。

为什么WP不允许move_uploaded_file超出......任何人?

无论哪种方式,都有可能,只是一种痛苦。我希望这会有所帮助。

我过去使用的其他资源: http://cube3x.com/2013/03/upload-files-to-wordpress-media-library-using-php/

move_uploaded_file() wordpress plugin