2014-02-21 2 views
-1

Для части моего веб-приложения я пытаюсь загрузить 1 файл под 2 разными именами. Первое имя - это имя исходного файла, которое пользователь указал. Это будет использоваться для ссылки позже в моем приложении. Второе имя - измененное имя (просто добавление переменной счетчика). Для загрузки одного файла с помощью move_uploaded_file ($ name, $ path) он работает как шарм. Когда я попытался вызвать один файл move_uploaded_file (...) после другого, только первая функция будет загружать файл. Вторая функция не вернет сообщение об ошибке.Одновременная загрузка файла в тот же каталог

После поиска в Интернете казалось, что это может быть выполнено с помощью цикла. Я поместил имена и пути в массив, пропустил его с помощью цикла foreach, но загружен только первый файл.

Ниже приведены файлы и их соответствующие части, так как некоторые из них являются длительными.

mainPage.php применяет заголовок на всех моих страницах. verifyFile.php - это файл, который выполняет загрузку, а также проверку массовой обработки, чтобы проверить, что файл действителен.

workPage.php

<?php 
session_start(); 
require("mainPage.php"); 

?> 
<link rel = "stylesheet" type = "text/css" href = "CSS/workpageCSS.css" /> 
<div id = "pageContainer"> 
    <form enctype = "multipart/form-data" action = "verifyFile.php" method = "post"> 
     <table border = "0" cellpadding = "2" cellspacing = "5"> 
      <tr> 
       <td> 
        <label for = "fileName">Select file to upload</label> 
       </td> 
       <td> 
        <input type = "file" name = "file" id = "fileName" placeholder = "Choose file path" autofocus = "autofocus" required = "required" /> 
       </td> 
      </tr> 
      <tr> 
       <td></td> 
       <td><input type = "submit" value = "Load file" /></td> 
      </tr> 
     </table> 
    </form> 
</div> 

Порция verifyFile.php, который загружает файл.

Попытка 1:

<?php 
session_start(); 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
    $dupFile = appendFileName(basename($_FILES['file']['name'])); 
$origToUpload = basename($_FILES['file']['name']); 

$targetPath = ("uploads/".$dupFile); 
$origTargetPath = "uploads/".$origToUpload; 
if(move_uploaded_file($_FILES['file']['tmp_name'], $targetPath)) { 
    #echo("Successfully uploaded ".basename($_FILES['file']['name'])); 
} else { 
    echo("Failed 1<br />"); 
} 

/*move_uploaded_file($_FILES['file']['tmp_name'], $origTargetPath); Does not upload but no errors are generated */ 
?> 

Покушение 2

<?php 
session_start(); 
error_reporting(E_ALL); 
ini_set('display_errors', '1') 
$filesToUpload = array($targetPath, $origTargetPath); 

foreach($filesToUpload as $toUpload) { 
    if(move_uploaded_file($_FILES['file']['tmp_name'], $toUpload)) { 
     echo("worked!"); /* first time is successful and $targetPath is loaded onto my server */ 
    } else { 
     echo("neg"); /* nothing is uploaded and returns neg */ 
    } 
} 
?> 

$ origTargetPath и $ TargetPath оба действительны, так как если я сторнировать их в моем массиве, только первый файл правильно загружено.

За дополнительной информацией, я использую Apache через XAMPP.

+0

@Prix Извините за ответ delaeyd, только что вернулся к своему столу. Использование полного пути ничего не изменило, но я выбрал ответ Энтони Гарсиа. –

ответ

0

Когда вы позвоните move_upload_file, php будет переместить файл из файла временного местоположения, указанного вами. Поэтому вы не можете переместить файл дважды.

Что вы ищете, это функция copy. В вашем случае (первая попытка):

copy($targetPath, $origTargetPath); 

Вы также могли бы рассмотреть symlink

+0

Извините за задержанный ответ, только что вернулся к моему столу, попробовал ваше предложение, и это сработало красиво! –

Смежные вопросы