2012-10-12 2 views
1

PHP 스크립트에 일련의 "이전"및 "이후"이미지를 업로드합니다. 업로드를 처리 할 때 올바른 '이전'과 '이후'이미지가 일치하는지 확인해야합니다.PHP 파일 업로드 일치 쌍

I 단지 본 할 경우 PHP가 정확한 순서를 유지하는

before: <input type="file" name="image[]"> after: <input type="file" name="image[]"> 
before: <input type="file" name="image[]"> after: <input type="file" name="image[]"> 

를 다음 이미지 [] 배열을 통해 단지 루프 I가 의존 할 수 있는가?

같은 질문은 내가이로 변경 한 경우 내 생각 적용 : 난 아직도해야 할 필요가있다

before: <input type="file" name="before[]"> after: <input type="file" name="after[]"> 
before: <input type="file" name="before[]"> after: <input type="file" name="after[]"> 

그 [] 전에 어레이와 후 [] 배열 순서에있을 것입니다 플러스 이제는 두 루프를 어떤 루프로도 조정해야합니다.

또는 내가

before: <input type="file" name="before1"> after: <input type="file" name="after1"> 
before: <input type="file" name="before2"> after: <input type="file" name="after2"> 
etc.... 

을 할 수있는 (아마 내가 그물에 어떻게 할 것인지)하지만 난 아주 확실하지 않다 어떻게 PHP에서 해당 통해 루프 것이다.

그래서 $ _FILES 배열을 만들 때 입력 순서를 유지하는 PHP를 믿을 수 있습니까? 아니면 더 좋은 방법이 있습니까?

감사합니다.

답변

1

php-array 확장자 내에서 배열 키를 강제 실행할 수 있습니다.

name="before[1]"  name="after[1]" 
name="before[2]"  name="after[2]" 

하고

또는 양식 데이터를 처리 할 때 PHP는 그 키를 사용하여 배열의 항목을 만들 것입니다, 당신은 단순히 PHP가 처리의 바보 같은 방법을 가지고

foreach(array_keys($_FILES['before']['tmp_name'])) as $key) { 
    processFile($_FILES['before']['tmp_name'][$key]); 
    processFile($_FILES['after']['tmp_name'][$key]); 
} 

노트 같은 것을 가질 수 배열 기반 파일 업로드 및 ['tmp_name'] 속성 (또는 $ _FILES 배열의 다른 속성)에서 루프해야하는 경우 필요합니다. 당신의 before1, before2, 등등 ... 버전에 대한

, 당신은 또한 할 수있는 당신에게 배열을 제공 which'll

$keys = preg_grep('/^after\d+$/', array_keys($_FILES['before']['tmp_name'])); 

같은 :

$keys = array(
    0 => 'after1', 
    1 => 'after2', 
    ... 
) 
+0

완벽한, 정확히 내가 필요한 것, 감사합니다! – Serexx

0

당신은 이름 필드를 사용하는 경우 귀하의 예제에서 보았 듯이 배열을 생성하면 PHP는 양식에 제출 된 것과 동일한 순서로 배열을 제공합니다. 주의 할 점은 본질적으로 사용자 입력을 신뢰한다는 것입니다. 즉, ANYTHING (예 : 악의적으로 생성 된 양식 또는 XSS 삽입)이 양식을 변경하고 대신 게시하면 데이터 순서가 변경 될 수 있습니다. 이것은 다른 종류의 형식 조작과 동일한 위험입니다. 따라서 PHP는 문제가 발생하지 않아야합니다.하지만 황금률은 사용자 입력을 신뢰하지 않는 것입니다.