2012-05-22 1 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 версия; Где мой файл пропал и как его найти?

ПРИМЕЧАНИЕ; Эта форма работала до интродукции 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 массива, не зная имя входа. Я заметил, что он проходит через пару раз, следовательно, if(!empty()), однако в ретроспективе это, вероятно, лучшая практика.