2013-10-09 3 views
1

Я новичок в PHP и создал небольшой код для загрузки файла в форму.PHP: Как создать цикл foreach (простой код)

Код работает нормально, но мне было интересно, могу ли я достичь того же, используя цикл foreach, чтобы он мог обрабатывать больше файлов, и мне не нужно писать отдельную строку для каждого из них.

Может кто-то здесь помочь мне с этим и рассказать мне, как правильно его написать.

Мой код (рабочий):

session_start(); 

$varUID = $_POST['UID']; 
$varSender = $_SESSION['email']; 

$varFile1 = $_FILES["file1"]["name"]; 
$varExt1 = pathinfo($varFile1, PATHINFO_EXTENSION); 
$varFile2 = $_FILES["file2"]["name"]; 
$varExt2 = pathinfo($varFile2, PATHINFO_EXTENSION); 
$varFile3 = $_FILES["file3"]["name"]; 
$varExt3 = pathinfo($varFile3, PATHINFO_EXTENSION); 

move_uploaded_file($_FILES["file1"]["tmp_name"], "uploads/" . $varUID . "_1" . "." . $varExt1); 
move_uploaded_file($_FILES["file2"]["tmp_name"], "uploads/" . $varUID . "_2" . "." . $varExt2); 
move_uploaded_file($_FILES["file3"]["tmp_name"], "uploads/" . $varUID . "_3" . "." . $varExt3); 

echo $varUID; 

Спасибо за любую помощь с этим, Tim

ответ

5
foreach ($_FILES as $key => $file) { 
    $name = $file["name"]; 
    $ext = pathinfo($name, PATHINFO_EXTENSION); 
    preg_match('/(\d+)$/', $key, $match); // get 2 out of "file2" 
    $nr = $match[1]; 
    move_uploaded_file($file["tmp_name"], "uploads/" . $varUID . "_" . $nr . "." . $ext); 
} 
+1

Очень элегантный +1 – Sal00m

+0

Это отлично работает, и я понимаю, как это написано - спасибо за быструю помощь! – user2571510

+0

Я просто видел, что вам нужно добавить что-то вроде $ nr ++ в конце, так как в противном случае все файлы получат одинаковое имя. – user2571510

3
$varUID = $_POST['UID']; 
$varSender = $_SESSION['email']; 

$i = 1; 

foreach ($_FILES as $key => $file) { 
    $varFile = $file[$key]["name"]; 
    $varExt = pathinfo($varFile, PATHINFO_EXTENSION); 
    move_uploaded_file($file[$key]["tmp_name"], "uploads/" . $varUID . "_" . $i . "." . $varExt); 
    $i++; 
} 

echo $varUID; 
+0

Привет, большое спасибо за быстрый ответ. Я пробовал, но это не работает. Нужно ли мне что-то менять? Мои имена и идентификаторы моих полей ввода - file1, file2 и file3. – user2571510

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