2014-01-27 163 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和上傳一個。 –