无法在php中创建缩略图

时间:2014-11-17 06:04:15

标签: php

我使用PHP从以下代码创建缩略图,但是当我运行代码时,我得到了ERROR

Notice: Undefined variable: phpThumb in C:\Users\logon\Documents\NetBeansProjects\rename multiple file with rename frm single input\for.php on line 42
Fatal error: Call to a member function setSourceFilename() on a non-object in C:\Users\logon\Documents\NetBeansProjects\rename multiple file with rename frm single input\for.php on line 42

因为我上传了多个文件如何为所有合成图像创建拇指
用于上传多个图像和创建拇指的PHP处理代码

<?php

$newname = uniqid() . '_' . time();
$file1 = isset($_FILES['files']['name'][0]) ? $_FILES['files']['name'][0] : null;
$file2 = isset($_FILES['files']['name'][1]) ? $_FILES['files']['name'][1] : null;
$file3 = isset($_FILES['files']['name'][2]) ? $_FILES['files']['name'][2] : null;
$file4 = isset($_FILES['files']['name'][3]) ? $_FILES['files']['name'][3] : null;
$file5 = isset($_FILES['files']['name'][4]) ? $_FILES['files']['name'][4] : null;
if (isset($_FILES['files'])) {
    $errors = array();
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
        $file_name = $key . $_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['type'][$key];
        if ($file_size > 2097152) {
            $errors[] = 'File size must be less than 2 MB';
        }
        $desired_dir = "user_data";
        if (empty($errors) == true) {
            if (is_dir($desired_dir) == false) {
                mkdir("$desired_dir", 0700);        // Create directory if it does not exist
            }
            if (is_dir("$desired_dir/" . $file_name) == false) {
                move_uploaded_file($file_tmp, "$desired_dir/" . $newname . $file_name);
            } else {                                  // rename the file if another one exist
                $new_dir = "$desired_dir/" . $newname . $file_name;
                rename($file_tmp, $new_dir);
            }
        } else {
            print_r($errors);
        }
    }
    if (empty($error)) {
        echo "FILE : $file1<br>";
        echo "FILE : $file2<br>";
        echo "FILE : $file3<br>";
        echo "FILE : $file4<br>";
        echo "FILE : $file5<br>";

 //thumb creation
        $files = array("$file1", "$file1", "$file1", "$file1", "$file1");
        foreach ($files as $file) { // here's part 1 of your answer
            $phpThumb->setSourceFilename($file);
            $phpThumb->setParameter('w', 100);
            $outputFilename = "thumbs/" . $file;

            if ($phpThumb->GenerateThumbnail()) {
                if ($phpThumb->RenderToFile($outputFilename)) { // here's part 2 of your answer
                    // do something on success
                } else {
                    //failed
                }
            } else {
                // failed
            }
        }
    }
}
?>

1 个答案:

答案 0 :(得分:1)

再次编辑以反映海报对用户体验应该如何的新愿望。现在有一个拖放预览或手动选择5个文件。拖放是由ajax帖子提交的,因此请在控制台中查看结果。显示和流程需要简化,但显示了一个技术工作示例。相同的PHP代码处理两个结果。

<html>
    <body>
        <pre><?
            print_r($_FILES); //SHOW THE ARRAY

            foreach ($_FILES as $file) {
                if (!$file['error']) {
                    //PROCESS THE FILE HERE
                    echo $file['name'];
                }
            }
        ?></pre>

        <script src="http://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"></script>
        <script type="text/javascript">

            var fd = new FormData(); 
            $(document).ready(function() {

                //submit dragdropped by ajax
                $("#dropsubmit").on("click", function(e) {
                     $.ajax({           
                        data: fd,
                        processData: false,
                        contentType: false,
                        type: 'POST',
                        success: function(data){
                            //FILES POSTED OK! REDIRECT
                            console.log(data);
                        }
                      });
                })

                var dropzone = $("#dropzone");
                dropzone.on('dragenter', function (e) {
                    $(this).css('background', 'lightgreen');
                });

                //dropped files, store as formdata
                dropzone.on('dragover', stopPropagate);
                dropzone.on('drop', function (e) {
                    stopPropagate(e)
                    $(this).css('background', 'white');
                     var files = e.originalEvent.dataTransfer.files;

                     for (var i = 0; i < files.length; i++)  {
                        preview(files[i])
                        fd.append('file' + (i + 1), files[i]);
                        if (i >= 5) continue
                     }

                });
                function stopPropagate(e) {
                    e.stopPropagation();
                    e.preventDefault();
                } 


                if (window.File && window.FileList && window.FileReader) {
                    $("input[type=file]").on("change", function(e) {
                        preview(e.target.files[0])
                    });
                } else {
                    alert("Your browser doesn't support to File API")
                }

                function preview(item) {
                    var fileReader = new FileReader();
                    fileReader.onload = (function(e) {
                        var file = e.target;
                        $("<img></img>", {
                            class: "imageThumb",
                            src: file.result,
                            title: file.name,
                        }).appendTo("#images");
                    });
                    fileReader.readAsDataURL(item);
                }
            });
        </script>

        <div id="dropzone" style="width:100px;height:100px;border:2px dashed gray;padding:10px">Drag & Drop Files Here</div>
        <input type="button" id="dropsubmit" value="Submit dropped files" />
        <hr>
        <form method="post" enctype="multipart/form-data">
            <input id="file1" name="file1" type="file"/><br>
            <input id="file2" name="file2" type="file"/><br>
            <input id="file3" name="file3" type="file"/><br>
            <input id="file4" name="file3" type="file"/><br>
            <input id="file5" name="file3" type="file"/><br>
            <input name="submit" type="submit" value="Upload files" />
        </form><div id="images"></div>
    </body>
</html>