复制文件上传vai PHP的HTTP获取PHP 4

时间:2010-10-07 19:21:49

标签: php ajax http file-upload php4

我一直致力于为最初用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提交数据,以允许使用进度条等多个文件上传。

1 个答案:

答案 0 :(得分:2)

我遇到了这个线程,寻找完全相同问题的答案 我知道帖子已经过时但是在这里给别人看答案 你很亲密 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;
    }