2012-05-22 63 views
0

作爲跟進Javascript form won't submit(查看我使用的代碼,請訪問該鏈接)的一小部分,我現在遇到一個問題,我找不到已上傳的文件。無法移動/罰款APC上傳的文件

我已經加入$files = apc_fetch('files_'.$_POST['APC_UPLOAD_PROGRESS']);我網頁的頂部,這是print_r($files);

Array 
(
    [theFile] => Array 
     (
      [name] => tt1.mp4 
      [type] => video/mp4 
      [tmp_name] => /tmp/php2BEvy7 
      [error] => 0 
      [size] => 1050290 
     ) 
) 

的輸出。然而,當我嘗試運行下面的代碼:

if (file_exists($files['theFile']['tmp_name'])) { 

    $webinarType = strcmp($files['theFile']['type'], 'video/mp4'); 

    if($webinarType == 0) { 

     $webinarFile = $fileTitle; 
     $webinarTempName = $files['theFile']['tmp_name']; 

    } else { 

     echo 'Webinar must be .mp4'; 

    } 

} else { 

    echo "No File"; 

} 

我得到的No File輸出。

我有ssh'd到服務器和該文件不在/tmp/,/path/to/public_html/tmp/path/to/file/tmp/所有這些都存在。

我曾嘗試使用move_uploaded_file(),但因爲這是對所有file輸入執行我不能得到動態的tmp_name由於我有限的JavaScript的知識。

tl; dr version;我的文件在哪裏,我怎麼找到它?

注意;這種形式在APC干預之前就已經開始工作,並且我正在運行wordpress以防萬一。

+0

永遠不要相信客戶端發送的MIME類型。它很容易被僞造。 – Corbin

+0

正式指出,但[現場]頁面是隱藏給任何人,但僱員。更重要的是阻止他們上傳pdf來代替視頻,並確保所述視頻是iCompatible。 – Joshua

回答

0

修復了這個問題。

progress.php文件(在其他問題中找到)我修改了elseif聲明與此:

elseif(($s_progressId = $_POST['APC_UPLOAD_PROGRESS']) || ($s_progressId = $_GET['APC_UPLOAD_PROGRESS'])) 
{ 
    // If the file has finished uploading add content to APC cache 
     $realpath = realpath($PHP_SELF); 
     $uploaddir = $realpath . '/tmp/'; 
     foreach ($_FILES as $file) {    

      if(!empty($file['name'])) { 

       $uploaded_file = $file['name']; 
       $moveme = $uploaddir.$uploaded_file; 

       move_uploaded_file($file['tmp_name'], $moveme); 

      }  

     } 

     apc_store('files_'.$s_progressId, $_FILES); 
     die(); 
} 

這樣我可以通過$_FILES遍歷數組不知道輸入的名稱。我注意到它循環了幾次,因此事後看來它可能是最好的練習。