【问题标题】:Copying file uploaded vai PHP's HTTP Get in PHP 4在 PHP 4 中使用 PHP 的 HTTP Get 复制上传的文件
【发布时间】:2011-04-22 13:22:25
【问题描述】:

我一直致力于为最初用 PHP 4.4.9 编写的网站添加功能。将网站移植到 PHP5 不在他们的预算之内,所以甚至不建议这样做。 (尽管它非常需要它)。我面临的问题是如何将二进制数据从 GET 请求复制到服务器上的文件位置。目前编写的支持该方法的代码如下:

function save($path) { 
    $input = fopen("php://input", "r");
    $temp = tmpfile();
    $realSize = stream_copy_to_stream($input, $temp);
    fclose($input);

    if ($realSize != $this->getSize()){            
        return false;
    }

    $target = fopen($path, "w");        
    fseek($temp, 0, SEEK_SET);
    stream_copy_to_stream($temp, $target);
    fclose($target);
}

我遇到的问题是函数stream_copy_to_stream 仅在 PHP 5 中受支持。这是我目前所拥有的,但它似乎只创建了 8K 大小的文件,我不确定为什么。理论上,它应该允许最多 20M。

function save($path) {    
    $input = fopen("php://input", "rb");
    $temp = tmpfile();
    fwrite($temp, fread($input, 20971520));
    fclose($input);

    $target = fopen($path, "w");        
    fseek($temp, 0, SEEK_SET);
    #stream_copy_to_stream($temp, $target);
    fwrite($target, fread($temp, 20971520));
    fclose($target);
    echo $path;

    return true;
}

我删除了大小检查,因为我无法在阅读时找到获取文件大小的方法。非常感谢您对此的任何帮助。我已经绞尽脑汁好几个小时了,我知道那里有人,很可能是在 stackoverflow 上,可以很容易地回答我的问题。

提前感谢所有帮助!

另外,我正在通过 GET 提交数据以允许使用进度条等上传多个文件。

【问题讨论】:

    标签: php ajax http file-upload php4


    【解决方案1】:

    我遇到了这个线程,正在寻找完全相同的问题的答案。
    我知道帖子很旧,但在这里为其他人寻找答案。
    你很亲密。
    fread 一次只将8192 byte chunks 带出流。所以你必须循环直到它看到文件结尾。

    
        function save($path) {    
            $input = fopen("php://input", "rb");
            $temp = tmpfile();
            while(!feof($input))
                fwrite($temp, fread($input, 8192));
            //fwrite($temp, fread($input, 20971520));
            fclose($input);
    
            $target = fopen($path, "w");        
            fseek($temp, 0, SEEK_SET);
            #stream_copy_to_stream($temp, $target);
            while(!feof($temp))
                fwrite($target, fread($temp, 8192));
    
            fclose($target);
            echo $path;
    
            return true;
        }
    

    【讨论】:

    • 伙计,我希望我早点发现这一点……哈哈。我最终使用了另一种发布图像的方法,但感谢您的回复!这可能会帮助其他一些使用 PHP 4 的可怜人。
    猜你喜欢
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2012-09-15
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多