0

私は、ユーザーがサーバー (および携帯電話) に画像をアップロードできるようにするための非常に基本的なフォームを作成するのに役立つチュートリアルに従いました。

複数のファイルのアップロードを許可したいのですが、PHP スクリプトを変換する方法がわかりません。

単一の写真をアップロードするための以下の作業コードを複数の写真のアップロードに変換するにはどうすればよいですか?

私のコードの関連部分は次のとおりです。

index.php:

<form action="upload.processor.php" enctype="multipart/form-data" id="upload" method="post" name="Upload">
   <input id="file" name="file" type="file" accept="image/*" capture="camera" />
   <input id="submit" name="submit" type="submit" value="Upload!">
</form>

upload.processor.php:

<?php 

    // make a note of the current working directory, relative to root. 
    $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']); 

    // make a note of the directory that will receive the uploaded file 
    $uploadsDirectory = $_SERVER['DOCUMENT_ROOT'] . $directory_self . 'img/'; 

    // make a note of the location of the upload form in case we need it 
    $uploadForm = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'index.php'; 

    // make a note of the location of the success page 
    $uploadSuccess = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'upload.success.php'; 

    // fieldname used within the file <input> of the HTML form 
    $fieldname = 'file'; 

    // possible PHP upload errors 
    $errors = array(1 => 'php.ini: Max file size exceeded.', 
                    2 => 'HTML form: Max file size exceeded.', 
                    3 => 'File upload was only partial.', 
                    4 => 'No file was attached.'); 

    // check the upload form was actually submitted else print the form 
    isset($_POST['submit']) 
        or error('The upload form is required.', $uploadForm); 

    // check for PHP's built-in uploading errors 
    ($_FILES[$fieldname]['error'] == 0) 
        or error($errors[$_FILES[$fieldname]['error']], $uploadForm); 

    // check that the file we are working on really was the subject of an HTTP upload 
    @is_uploaded_file($_FILES[$fieldname]['tmp_name']) 
        or error('Not an HTTP upload.', $uploadForm); 

    // validation to make sure the uploaded file is in fact an image. 
    @getimagesize($_FILES[$fieldname]['tmp_name']) 
        or error('Only image uploads are allowed!', $uploadForm); 

    // make a unique filename for the uploaded file and check it is not already 
    // taken... if it is already taken keep trying until we find a vacant one 
    // sample filename: 1140732936-filename.jpg 
    $now = time(); 
    while(file_exists($uploadFilename = $uploadsDirectory.$now.'-'.$_FILES[$fieldname]['name'])) { 
        $now++; 
    } 

    // move the file to its final location and allocate the new filename to it 
    @move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadFilename) 
        or error('Receiving directory has incorrect permissions.', $uploadForm); 

?> 
4

1 に答える 1

0

$_FILES[$fieldname] を繰り返し処理して、フォームに基づいてファイルの配列を取得します。したがって、配列を反復処理してから、ファイルを処理します。

それで:

foreach($_FILES[$fieldname] => $singleFile) {
   // check for PHP's built-in uploading errors 
    ($singleFile['error'] == 0) 
        or error($errors[$singleFile['error']], $uploadForm); 

    // check that the file we are working on really was the subject of an HTTP upload 
    @is_uploaded_file($singleFile['tmp_name']) 
        or error('Not an HTTP upload.', $uploadForm); 

    // validation to make sure the uploaded file is in fact an image. 
    @getimagesize($singleFile['tmp_name']) 
        or error('Only image uploads are allowed!', $uploadForm); 

    // make a unique filename for the uploaded file and check it is not already 
    // taken... if it is already taken keep trying until we find a vacant one 
    // sample filename: 1140732936-filename.jpg 
    $now = time(); 
    while(file_exists($uploadFilename = $uploadsDirectory.$now.'-'.$singleFile['name'])) { 
        $now++; 
    } 

    // move the file to its final location and allocate the new filename to it 
    @move_uploaded_file($singleFile['tmp_name'], $uploadFilename) 
        or error('Receiving directory has incorrect permissions.', $uploadForm);


}
于 2013-02-20T20:00:40.490 に答える