0

皆さん、私は自分のコードに本当に苦労しています。複数の画像をアップロードしようとすると、両方の画像をアップロードするのではなく、同じ画像を 5 回アップロードします。どんな助けでも大歓迎です。お時間をいただきありがとうございます。

ここに var_dumb($_FILES) があります

array(1) {
  ["userfile"]=>
  array(5) {
    ["name"]=>
    string(9) "test1.jpg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(14) "/tmp/phpdDGCy2"
    ["error"]=>
    int(0)
    ["size"]=>
    int(1768037)
  }
}

ここに私のアップロード機能があります:

if(count($_FILES['userfile'])){
    foreach($_FILES['userfile'] as $file){
$alt=mysqli_real_escape_string($conn, $_POST['alt']);
echo '<pre>';
var_dump($_FILES);
echo '</pre>';
if (($_FILES["userfile"]["error"] == 0) && ($_FILES['userfile']['size'] > 0))
{
$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
} 
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["userfiles"]["name"]));
if((($_FILES["userfile"]["type"] == "image/gif")
    ||($_FILES["userfile"]["type"]=="image/jpeg")
    ||($_FILES["userfile"]["type"]=="image/png")
    ||($_FILES["userfile"]["type"]=="image/pjpeg")
    && in_array($extension, $allowedExts)))
    {
        $fp = fopen($tmpName, 'r');
        $content =fread($fp, filesize($tmpName));
        $SourceImage = imagecreatefromstring($content);
        $SourceWidth = imagesx($SourceImage);
        $SourceHeight=imagesy($SourceImage);
        $DestWidth=100;
        $DestHeight=130;
        if ($SourceHeight> $SourceWidth)
        {$ratio = $DestHeight / $SourceHeight;
        $newHeight = $DestHeight;
        $newWidth = $sourceWidth * $ratio;
        }
        else
        {
            $ratio = $DestWidth / $SourceWidth;
            $newWidth = $DestWidth;
            $newHeight = $SourceHeight * $ratio;
        }
        $DestinationImage = imagecreatetruecolor($newWidth, $newHeight);
        imagecopyresampled($DestinationImage, $SourceImage, 0,0,0,0,$DestWidth, $DestHeight, $SourceHeight, $SourceWidth);
        ob_start();
        imagejpeg($DestinationImage);
        $BinaryThumbnail = ob_get_contents();
        ob_end_clean();
        $thumb = addslashes($BinaryThumbnail);
        $content = addslashes($content);
        fclose($fp);
        $fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);

         mysqli_query($conn, "INSERT INTO files (username, name, size, content, type, link, alt, thumbnail) VALUES ('$username', '$fileName', '$fileSize', '$content', '$fileType', 1, '$alt', '$thumb')") or die('Error, query failed'); 
           echo "<script>alert('The file has been uploaded');location.replace('uploaded.php');</script>";
           unlink ($_FILES['username']['tmp_name']);

    }else{ 
           echo "<script>alert('Please upload an image');location.replace('upload.php');</script>";
    }
}
}
}

アップロードフォームは次のとおりです。

    <div class="container">
 <div class="row">
  <div class="col-md-6 col-md-offset-3">
          <h1>Upload a file</h1>
<form method="post" enctype="multipart/form-data" action="process.php">
<div id="filediv">
<div id="imagefiles">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<label>Upload File:
<input name="userfile[]" type="file" id="userfile" multiple></label>
<label>Alt Text: <input name="alt" type="text"></label>
 </div>
 </div>
<br>

<input type="button" value="Add Another File" onclick="copyDiv()"/>
<input name="UploadFile" type="submit" />
</form>
4

4 に答える 4

0

はい、php ではなく、ここで JS/AJAX ソリューションを使用することを検討します。複数のファイルをアップロードすることは、読み込み時間と、コード実行中のページの更新に時間がかかるため、php では少し面倒です。バックグラウンドで何が起こっているかについて、ユーザーに実際のフィードバックはありません。

私はアップロードを数回使用しましたが、うまく機能します。

于 2013-10-29T19:23:38.437 に答える
0

一度に複数のファイルをアップロードすると、サーバーが 1 つのファイルのみを受け入れる可能性が非常に高くなります。私は一度この問題を抱えており、ajaxファイルのアップロードで修正しました。すべてのファイルがサーバーに転送されるまで待つ必要がないため、Ajax ファイルのアップロードも非常に便利です。これを使用できます。https://github.com/blueimp/jQuery-File-Upload

于 2013-10-29T19:13:40.980 に答える