2014-01-27 161 views
1

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

应该指出的是,表格是在另一个表格内。最终的结果是有一个图像上传(这个形式,在更大的一个里面),允许用户在提交第二个表单之前裁剪图像并添加标签,标题描述等。第二个表单的最终提交将发布到自定义帖子类型,并且工作正常。只是我感兴趣的移动文件和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> 
+0

有多大的文件? –

+0

25k,不大于极限,我已经提升到了极限100000的测试 – vincentieo

回答

1

OK,所以这是一个令人费解处理。在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

1

的问题是这一行:

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

你需要在你的第二个参数来指定上传的目录,比如:

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

嗨,谢谢指针。在测试之后,我忘记了再次添加upload_dir,并试图上传到服务器的根目录。 如果我询问$ upload_dir。$ _ FILES [“file”] [“name”])的回声,我会得到:/ Users/vince/Sites/lolhatespeech/wp/wp-content/uploads/jcrop_temp/1 - 测试 - image.png。仍然没有文件在文件夹中,没有错误。我在这里受到感染! – vincentieo

+0

好的,所以我已经将它分离出来,放到一个单独的表格中...现在,对于jpg文件,一切正常,但是我得到了一个无效的文件...不知道为什么。 另外,我还没有命名的形式,我现在要求用isset $ _ POST [“上传”] – vincentieo

+0

它是每一个PNG脚本? PNG图像占用了比JPEG或GIF相当多的空间。这可能是因为文件大小太大。试着做一个1x1 PNG和上传一个。 –