通过session.upload_progress.name

时间:2015-11-25 10:28:05

标签: java php

我试图通过session.upload_progress.name上传文件 - 它在某些文件上工作正常,但如果文件是“更大”f.ex. 13MB,脚本停止。问题不在于文件大小 - 更多的是我想的时间限制。如果我使用更快的互联网连接,它工作正常。我的webhoster是Strato - 有没有人有解决方案?

这是我的代码:

    <?php session_start();
?>

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Upload CSV Dateien</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script src="jquery.form.js"></script>
</head>

<body>
    <article>
        <header>
            <h1>UPLOAD Import Dateien</h1>
        </header>

        <section>
            <form action="upload.php" method="post" enctype="multipart/form-data" id="upload_form">
            <!--
                Dieses Feld ist wichtig. PHP benötigt dies für die Zuordnung.
                Der Wert (Value) ist für uns später wichtig um auf die globale $_SESSION zuzugreifen
            -->
                <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="test">
                <div>
                    <label for="datei1">Bitte Datei zum hochladen auswählen: </label>
                    <p></p>
                    <input name="file1" type="file" id="datei1">
                </div>
                <div>
                    <input name="upload_start" type="submit" value="Hochladen">
                    <input name="abbrechen" type="button" value="Abbrechen" id="abbrechen">
                </div>
            </form>
        </section> 

        <section>
            <div>
                <progress max="1" value="0" id="fortschritt"></progress>
                <p id="fortschritt_txt"></p>
            </div>
        </section>   
    </article>

    <script>

        var intervalID = 0;

        $(document).ready(function(e) {

            $('#upload_form').submit(function(e) {

                if($('#datei1').val() == ''){
                    e.preventDefault(); //Event abbrechen

                    return false;
                }

                intervalID = setInterval(function() {
                    $.getJSON('fortschritt.php', function(data){

                        if(data)
                        {
                            $('#fortschritt').val(data.bytes_processed / data.content_length);
                            $('#fortschritt_txt').html('Fortschritt '+ Math.round((data.bytes_processed / data.content_length)*100) + '%');
                        }
                    });
                }, 1000); //Zeitintervall auf 1s setzen

                $('#upload_form').ajaxSubmit({    
                                                success: function()
                                                {
                                                    $('#fortschritt').val('1');
                                                    $('#fortschritt_txt').html('Fertig');
                                                    clearInterval(intervalID);  
                                                    location.reload(); 
                                                },                                                
                                                error:    function()
                                                {
                                                    $('#fortschritt').val('1');
                                                    $('#fortschritt_txt').html('Ein Fehler ist aufgetreten');
                                                    clearInterval(intervalID);    
                                                }
                                            });
                e.preventDefault(); //Event Abbrechen

            });

            $('#abbrechen').click(function(e) {
                $.ajax("fortschritt.php?cancel=true");
                $('#fortschritt').val('1');
                $('#fortschritt_txt').html('Upload abgebrochen');

                clearInterval(intervalID);
            });
        });

    </script>

</body>
</html>

这就是upload.php

<?php

session_start();

/*
* Session-Upload-Progress ist leer
* durch die Option session.upload_progress.enabled = On
*/
var_dump($_SESSION);

/*
* Übliches Format von $_FILES
*/
var_dump($_FILES);

move_uploaded_file($_FILES['file1']['tmp_name'],'../import/'.$_FILES['file1']['name']);

/*
* Wenn abgebrochen
*/
if($_FILES['error'] == UPLOAD_ERR_EXTENSION)
    echo "Datei abgebrochen";
?>

1 个答案:

答案 0 :(得分:0)

请在开始上传文件之前将set_time_limit设置为0,并设置无限时间执行,脚本在完成上传之前不会停止。 (但最好为上传设置一些时间限制,以避免服务器问题。

${PN}-dev