0

シンプルなPHPアップロードプログレスバースクリプトをウェブサイトに掲載しようとしています

APC はサーバーに既にインストールされており、指示に従って php.ini を調整しました。

apc.rfc1867 = オン

ここでの問題は、アップロード プロセスから実数ではなく %NaN を取得していることです。

このスクリプトが他のサーバーで動作していることはわかっているので、スクリプトにバグはなく、php.ini または APC に関連するものであると仮定します。

これは私の upload.php ファイルです:

<?php 
    //get unique id
    $up_id = uniqid(); 

    //process the forms and upload the files
    if ($_POST) {    
        //specify folder for file upload
        $folder = "tmp/"; 

        //specify redirect URL
        $redirect = "upload.php?success";

        //upload the file
        move_uploaded_file($_FILES["file"]["tmp_name"], "$folder" . $_FILES["file"]["name"]);

        //do whatever else needs to be done (insert information into database, etc...)

        //redirect user
        header('Location: '.$redirect); die;
    } 
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Upload your file</title>

        <!--Progress Bar and iframe Styling-->
        <link href="style_progress.css" rel="stylesheet" type="text/css" />

        <!--Get jQuery-->
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.js" type="text/javascript"></script>

        <!--display bar only if file is chosen-->
        <script>    
            $(document).ready(function() {     
                //show the progress bar only if a file field was clicked
                var show_bar = 0;
                $('input[type="file"]').click(function(){
                    show_bar = 1;
                });

                //show iframe on form submit
                $("#form1").submit(function(){    
                    if (show_bar === 1) { 
                        $('#upload_frame').show();
                        function set () {
                            $('#upload_frame').attr('src','upload_frame.php?up_id=<?php echo $up_id; ?>');
                        }
                        setTimeout(set);
                    }
                });    
            });    
        </script>    
    </head>    
    <body>
        <h1>Upload your file </h1>    
        <div>
            <?php if (isset($_GET['success'])) { ?>
                <span class="notice">Your file has been uploaded.</span>
            <?php } ?>
            <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
                Name<br />
                <input name="name" type="text" id="name"/>
                <br />
                <br />
                Your email address <br />
                <input name="email" type="text" id="email" size="35" />
                <br />
                <br />
                Choose a file to upload
                <br />    
                <!--APC hidden field-->
                <input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="<?=$up_id?>"/>

                <input name="file" type="file" id="file" size="30"/>    

                <!--Include the iframe-->
                <br />
                <iframe id="upload_frame" name="upload_frame" frameborder="0" border="0" src="" scrolling="no" scrollbar="no" > </iframe>
                <br />

                <input name="Submit" type="submit" id="submit" value="Submit" />
              </form>
          </div>    
    </body>    
</html>

これは私のupload_frame.phpです

<?php

$url = basename($_SERVER['SCRIPT_FILENAME']);

//Get file upload progress information.
if(isset($_GET['progress_key'])) {
    $status = apc_fetch('upload_'.$_GET['progress_key']);
    echo $status['current']/$status['total']*100;
    die;
}
//

?>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.js" type="text/javascript"></script>
<link href="style_progress.css" rel="stylesheet" type="text/css" />

<script>
$(document).ready(function() { 
//

    setInterval(function() 
        {
    $.get("<?php echo $url; ?>?progress_key=<?php echo $_GET['up_id']; ?>&randval="+ Math.random(), { 
        //get request to the current URL (upload_frame.php) which calls the code at the top of the page.  It checks the file's progress based on the file id "progress_key=" and returns the value with the function below:
    },
        function(data)  //return information back from jQuery's get request
            {
                $('#progress_container').fadeIn(100);   //fade in progress bar  
                $('#progress_bar').width(data +"%");    //set width of progress bar based on the $status value (set at the top of this page)
                $('#progress_completed').html(parseInt(data) +"%"); //display the % completed within the progress bar
            }
        )},500);    //Interval is set at 500 milliseconds (the progress bar will refresh every .5 seconds)

});


</script>

<body style="margin:0px">
<!--Progress bar divs-->
<div id="progress_container">
    <div id="progress_bar">
         <div id="progress_completed"></div>
    </div>
</div>
<!---->
</body>

これは私のstyle_progress.cssです

/*iframe*/
#upload_frame {
    border:0px;
    height:40px;
    width:400px;
    display:none;
}

#progress_container {
    width: 300px; 
    height: 30px; 
    border: 1px solid #CCCCCC; 
    background-color:#EBEBEB;
    display: block; 
    margin:5px 0px -15px 0px;
}

#progress_bar {
    position: relative; 
    height: 30px; 
    background-color: #F3631C; 
    width: 0%; 
    z-index:10; 
}

#progress_completed {
    font-size:16px; 
    z-index:40; 
    line-height:30px; 
    padding-left:4px; 
    color:#FFFFFF;
}

そのための簡単な修正があれば教えてください。

4

1 に答える 1

0

どこに電話しましたapc_store()か?を使用して値を取得する前に、これを行う必要があると確信していますapc_fetch()

于 2013-07-17T12:16:31.483 に答える