uploadprogress扩展名:uploadprogress_get_info总是返回null

时间:2012-07-12 14:39:11

标签: php upload

我想在上传代码中添加进度条 所以我已经安装了uploadprogress扩展(实际上我已经将我的wamp服务器降级为2.0,因为这个已经有扩展但新版本似乎有问题)

这是我的后端代码

///////////////////上传

<?php


if (isset($_POST['upload'])) {
    echo 'UPLOADING . . . <br />';

    $location = './uploads';
    $new= uniqid().'.'.end(explode('.' , basename($_FILES['mailfile']['name']) ));  
    if(move_uploaded_file( $_FILES['mailfile']['tmp_name'],"$location/$new"))
       echo 'DONE !! ';
    else
       echo 'error';

}

///////////////获取上传信息

else if(isset($_GET['get_info']))
{
        if (function_exists("uploadprogress_get_info")) {

            $info = uploadprogress_get_info($_GET['get_info']);
        } else {
            $info = 'nofunc';
        }
        var_dump($info);
}

///////////////上传表格

else
{           $uploadID = substr(md5(microtime(true)), 0, 10);
    ?>

            <form enctype="multipart/form-data" action="uploadprogress.php" method="post" >
                <input type="text" name="UPLOAD_IDENTIFIER"  value="<?php echo $uploadID; ?>" id="uploadIdentifier" />
                <input id="file" name="mailfile" type="file" />
                <input type="submit" value="Send File" id="btn" name="upload" />
            </form>

    <?php
}

这是我的前html / jquery代码 当文件被上传时,它从iframe获取UPLOAD_IDENTIFIER值并将其发送到set()函数,该函数假设通过ajax调用获取上传进度,但它总是返回null

<html>
    <head>
    <script language="javascript" src="../../js/jquery.js"></script>
        <script>
        var val;
        $(function(){

            $('#progress_iframe').load(function() {
                var ifr = $(this);

              $(this)
                .contents()
                .find('#btn')
                .bind('click', function() {

                    val = ifr.contents().find('#uploadIdentifier').val();
                     set();

                    //  do stuff
                });
            });

        })


function set() { 
   $.get('uploadprogress.php' , {get_info : val} , function(data){
      data = $.trim(data);
     $('#info').html(data) ;
     if(data < 100  )
     set();
   })
  }


        </script>
    </head>
    <body>

<div>
<iframe id="progress_iframe" src="uploadprogress.php" frameborder="0">   </iframe>
<span id="info"></span>     
</div>
    </body>
</html>

所以文件正在上传没有任何问题我已经尝试了一个大文件,但仍然在上传文件时uploadprogress_get_info为空

1 个答案:

答案 0 :(得分:0)

  1. 检查服务器上是否可以访问UploadProgress tmp目录。这意味着“uploadprogress.file.filename_template”指的是phpinfo中正确的tmp文件夹。

  2. 您可以运行以下代码进行检查。

    &lt; div id =“status”style =“border:1px black solid;&lt;?php
      $ templateini = ini_get(“uploadprogress.file.filename_template”);
      $ testid =“thisisjustatest”;
      $ template = sprintf($ templateini,$ testid);
      $ templateerror = false;
      if($ template&amp;&amp; $ template!= $ templateini&amp;&amp; @touch($ template)&amp;&amp; file_exists($ template)){
      // print'('。$ templateini。'是可写的。真实路径是'.str_replace($ testid,“%s”,realpath($ template))。')';
      取消链接($模板);
      其他{
      $ templateerror = true;
      }
      if(function_exists(“uploadprogress_get_info”)){
      if($ templateerror){
      print'background-color:red;'';
      打印“&gt;问题。”;   if($ template == $ templateini){
      print“uploadprogress.file.filename_template($ templateini)中没有%s用于制作唯一的临时文件。请调整。&lt; br /&gt;”;

      其他{
      打印“$ templateini不可写。&lt; br /&gt;请确保该目录存在且可写入网络服务器。&lt; br /&gt;

      或者将ini设置'uploadprogress.file.filename_template'调整为正确的路径。“;
      }
      其他{
      print'background-color:green;“&gt;安装uploadprogress扩展并初步检查显示一切正常';
      }
      其他{
      ?&GT;
      background-color:red;“&gt;未安装uploadprogress扩展名。
      &lt;?php}?&gt;

    &LT; / DIV&GT;

  3. 如果上面的代码出错,请指向php.ini文件中正确的tmp目录。在windows localhost机器上的Xampp tmp目录的php.ini文件中添加了以下行。 uploadprogress.file.filename_template = C:\ xampp \ tmp \ some_name_%s.txt

  4. 现在您的代码应该有效。